from typing import List, Optional import gradio import facefusion.choices from facefusion import state_manager, wording from facefusion.common_helper import get_first from facefusion.jobs import job_list, job_manager from facefusion.typing import JobStatus from facefusion.uis.core import get_ui_component JOB_LIST_JOBS_DATAFRAME : Optional[gradio.Dataframe] = None JOB_LIST_REFRESH_BUTTON : Optional[gradio.Button] = None def render() -> None: global JOB_LIST_JOBS_DATAFRAME global JOB_LIST_REFRESH_BUTTON if job_manager.init_jobs(state_manager.get_item('jobs_path')): job_status = get_first(facefusion.choices.job_statuses) job_headers, job_contents = job_list.compose_job_list(job_status) JOB_LIST_JOBS_DATAFRAME = gradio.Dataframe( headers = job_headers, value = job_contents, datatype = [ 'str', 'number', 'date', 'date', 'str' ], show_label = False ) JOB_LIST_REFRESH_BUTTON = gradio.Button( value = wording.get('uis.refresh_button'), variant = 'primary', size = 'sm' ) def listen() -> None: job_list_job_status_checkbox_group = get_ui_component('job_list_job_status_checkbox_group') if job_list_job_status_checkbox_group: job_list_job_status_checkbox_group.change(update_job_dataframe, inputs = job_list_job_status_checkbox_group, outputs = JOB_LIST_JOBS_DATAFRAME) JOB_LIST_REFRESH_BUTTON.click(update_job_dataframe, inputs = job_list_job_status_checkbox_group, outputs = JOB_LIST_JOBS_DATAFRAME) def update_job_dataframe(job_statuses : List[JobStatus]) -> gradio.Dataframe: all_job_contents = [] for job_status in job_statuses: _, job_contents = job_list.compose_job_list(job_status) all_job_contents.extend(job_contents) return gradio.Dataframe(value = all_job_contents)