Spaces:
Running
Running
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): | |
base64_video = base64_string | |
video_data = base64.b64decode(base64_video) | |
with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as temp_file: | |
temp_filename = temp_file.name | |
temp_file.write(video_data) | |
print(f"Temporary MP4 file saved as: {temp_filename}") | |
return temp_filename | |
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("Record Screen") | |
video_component = gr.Video(interactive=False) | |
def toggle_button_label(returned_string): | |
if returned_string.startswith("Record"): | |
return gr.Button(value="Stop Recording"), None | |
else: | |
try: | |
temp_filename = save_base64_video(returned_string) | |
except Exception as error: | |
return gr.Button(value="Record Screen"), gr.Warning( | |
f"Failed to convert video to mp4:\n{error}" | |
) | |
return gr.Button(value="Record Screen"), gr.Video( | |
value=temp_filename, interactive=False | |
) | |
start_button.click( | |
toggle_button_label, | |
start_button, | |
[start_button, video_component], | |
js=record_button_js, | |
) | |