Applio-V3 / tabs /report /report.py
PlayerBPlaytime's picture
Upload 125 files
746322b verified
raw
history blame
2.81 kB
import os
import sys
import base64
import pathlib
import tempfile
import gradio as gr
from assets.i18n.i18n import I18nAuto
now_dir = os.getcwd()
sys.path.append("..")
i18n = I18nAuto()
recorder_js_path = os.path.join(now_dir, "tabs", "report", "recorder.js")
main_js_path = os.path.join(now_dir, "tabs", "report", "main.js")
record_button_js_path = os.path.join(now_dir, "tabs", "report", "record_button.js")
recorder_js = pathlib.Path(recorder_js_path).read_text()
main_js = pathlib.Path(main_js_path).read_text()
record_button_js = (
pathlib.Path(record_button_js_path)
.read_text()
.replace("let recorder_js = null;", recorder_js)
.replace("let main_js = null;", main_js)
)
def save_base64_video(base64_string):
try:
video_data = base64.b64decode(base64_string)
with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as temp_file:
temp_filename = temp_file.name
temp_file.write(video_data)
return temp_filename
except Exception as error:
raise gr.Error(f"Failed to convert video to mp4:\n{error}")
def report_tab():
instructions = [
i18n("# How to Report an Issue on GitHub"),
i18n(
"1. Click on the 'Record Screen' button below to start recording the issue you are experiencing."
),
i18n(
"2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not)."
),
i18n(
"3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button."
),
i18n(
"4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step."
),
]
components = [gr.Markdown(value=instruction) for instruction in instructions]
start_button = gr.Button(i18n("Record Screen"))
video_component = gr.Video(interactive=False)
def toggle_button_label(returned_string):
if returned_string.startswith(i18n("Record")):
return gr.Button(value=i18n("Stop Recording")), None
else:
try:
temp_filename = save_base64_video(returned_string)
return gr.Button(value=i18n("Record Screen")), gr.Video(
value=temp_filename, interactive=False
)
except gr.Error as error:
return gr.Button(value=i18n("Record Screen")), error
start_button.click(
toggle_button_label,
start_button,
[start_button, video_component],
js=record_button_js,
)
components.extend([start_button, video_component])