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(now_dir) 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, )