Tophness2022 commited on
Commit
ced4e9c
·
1 Parent(s): c309a1f

gr.info based quit countdown timer

Browse files
Files changed (1) hide show
  1. wgp.py +46 -39
wgp.py CHANGED
@@ -732,11 +732,17 @@ def quit_application():
732
  import signal
733
  os.kill(os.getpid(), signal.SIGINT)
734
 
735
- def request_quit_confirmation():
736
- return gr.update(visible=False), gr.update(visible=True)
737
 
738
- def cancel_quit_confirmation():
739
- return gr.update(visible=True), gr.update(visible=False)
 
 
 
 
 
 
740
 
741
  def autosave_queue():
742
  global global_queue_ref
@@ -994,7 +1000,6 @@ def create_html_progress_bar(percentage=0.0, text="Idle", is_idle=True):
994
  """
995
  return html
996
 
997
-
998
  def update_generation_status(html_content):
999
  if(html_content):
1000
  return gr.update(value=html_content)
@@ -3625,51 +3630,46 @@ def generate_video_tab(update_form = False, state_dict = None, ui_defaults = Non
3625
  clear_queue_btn = gr.Button("Clear Queue", size="sm", variant="stop")
3626
  quit_button = gr.Button("Save and Quit", size="sm", variant="secondary")
3627
  with gr.Row(visible=False) as quit_confirmation_row:
3628
- gr.Markdown("Quitting in 5 seconds...", elem_id="quit_timer_label")
3629
- confirm_quit_button = gr.Button("Confirm Quit Now", elem_id="comfirm_quit_btn_hidden", size="sm", variant="stop")
3630
- cancel_quit_button = gr.Button("Cancel Quit", size="sm", variant="secondary")
3631
  hidden_force_quit_trigger = gr.Button("force_quit", visible=False, elem_id="force_quit_btn_hidden")
 
 
3632
 
3633
  start_quit_timer_js = """
3634
  () => {
3635
  function findAndClickGradioButton(elemId) {
3636
  const gradioApp = document.querySelector('gradio-app') || document;
3637
  const button = gradioApp.querySelector(`#${elemId}`);
3638
- if (button) {
3639
- button.click();
3640
- }
3641
  }
3642
- window.quitTimerId = setTimeout(() => {
3643
- }, 5000);
3644
- let countdown = 5;
3645
- const label = document.getElementById('quit_timer_label');
3646
- if (label) {
3647
- label.innerText = `Quitting in ${countdown}...`;
3648
- window.quitCountdownInterval = setInterval(() => {
3649
- countdown--;
3650
- if (countdown > 0) {
3651
- label.innerText = `Quitting in ${countdown}...`;
3652
- } else {
3653
- clearInterval(window.quitCountdownInterval);
3654
- findAndClickGradioButton('comfirm_quit_btn_hidden');
3655
- }
3656
- }, 1000);
3657
  }
 
 
3658
  }
3659
  """
3660
 
3661
  cancel_quit_timer_js = """
3662
  () => {
3663
- if (window.quitTimerId) {
3664
- clearTimeout(window.quitTimerId);
3665
- window.quitTimerId = null;
3666
- }
3667
- if(window.quitCountdownInterval) {
3668
- clearInterval(window.quitCountdownInterval);
3669
- window.quitCountdownInterval = null;
3670
  }
3671
- const label = document.getElementById('quit_timer_label');
3672
- if(label) { label.innerText = 'Quit cancelled.'; }
3673
  }
3674
  """
3675
 
@@ -3705,10 +3705,15 @@ def generate_video_tab(update_form = False, state_dict = None, ui_defaults = Non
3705
  }
3706
  """
3707
 
 
 
 
 
 
3708
  quit_button.click(
3709
- fn=request_quit_confirmation,
3710
  inputs=[],
3711
- outputs=[quit_button, quit_confirmation_row]
3712
  ).then(
3713
  fn=None, inputs=None, outputs=None, js=start_quit_timer_js
3714
  )
@@ -3717,12 +3722,14 @@ def generate_video_tab(update_form = False, state_dict = None, ui_defaults = Non
3717
  fn=quit_application,
3718
  inputs=[],
3719
  outputs=[]
 
 
3720
  )
3721
 
3722
  cancel_quit_button.click(
3723
- fn=cancel_quit_confirmation,
3724
  inputs=[],
3725
- outputs=[quit_button, quit_confirmation_row]
3726
  ).then(
3727
  fn=None, inputs=None, outputs=None, js=cancel_quit_timer_js
3728
  )
 
732
  import signal
733
  os.kill(os.getpid(), signal.SIGINT)
734
 
735
+ def start_quit_process():
736
+ return 5, gr.update(visible=False), gr.update(visible=True)
737
 
738
+ def cancel_quit_process():
739
+ return -1, gr.update(visible=True), gr.update(visible=False)
740
+
741
+ def show_countdown_info_from_state(current_value: int):
742
+ if current_value > 0:
743
+ gr.Info(f"Quitting in {current_value}...")
744
+ return current_value - 1
745
+ return current_value
746
 
747
  def autosave_queue():
748
  global global_queue_ref
 
1000
  """
1001
  return html
1002
 
 
1003
  def update_generation_status(html_content):
1004
  if(html_content):
1005
  return gr.update(value=html_content)
 
3630
  clear_queue_btn = gr.Button("Clear Queue", size="sm", variant="stop")
3631
  quit_button = gr.Button("Save and Quit", size="sm", variant="secondary")
3632
  with gr.Row(visible=False) as quit_confirmation_row:
3633
+ confirm_quit_button = gr.Button("Confirm", elem_id="comfirm_quit_btn_hidden", size="sm", variant="stop")
3634
+ cancel_quit_button = gr.Button("Cancel", size="sm", variant="secondary")
 
3635
  hidden_force_quit_trigger = gr.Button("force_quit", visible=False, elem_id="force_quit_btn_hidden")
3636
+ hidden_countdown_state = gr.Number(value=-1, visible=False, elem_id="hidden_countdown_state_num")
3637
+ single_hidden_trigger_btn = gr.Button("trigger_countdown", visible=False, elem_id="trigger_info_single_btn")
3638
 
3639
  start_quit_timer_js = """
3640
  () => {
3641
  function findAndClickGradioButton(elemId) {
3642
  const gradioApp = document.querySelector('gradio-app') || document;
3643
  const button = gradioApp.querySelector(`#${elemId}`);
3644
+ if (button) { button.click(); }
 
 
3645
  }
3646
+
3647
+ if (window.quitCountdownTimeoutId) clearTimeout(window.quitCountdownTimeoutId);
3648
+
3649
+ let js_click_count = 0;
3650
+ const max_clicks = 5;
3651
+
3652
+ function countdownStep() {
3653
+ if (js_click_count < max_clicks) {
3654
+ findAndClickGradioButton('trigger_info_single_btn');
3655
+ js_click_count++;
3656
+ window.quitCountdownTimeoutId = setTimeout(countdownStep, 1000);
3657
+ } else {
3658
+ findAndClickGradioButton('force_quit_btn_hidden');
3659
+ }
 
3660
  }
3661
+
3662
+ countdownStep();
3663
  }
3664
  """
3665
 
3666
  cancel_quit_timer_js = """
3667
  () => {
3668
+ if (window.quitCountdownTimeoutId) {
3669
+ clearTimeout(window.quitCountdownTimeoutId);
3670
+ window.quitCountdownTimeoutId = null;
3671
+ console.log("Quit countdown cancelled (single trigger).");
 
 
 
3672
  }
 
 
3673
  }
3674
  """
3675
 
 
3705
  }
3706
  """
3707
 
3708
+ single_hidden_trigger_btn.click(
3709
+ fn=show_countdown_info_from_state,
3710
+ inputs=[hidden_countdown_state],
3711
+ outputs=[hidden_countdown_state]
3712
+ )
3713
  quit_button.click(
3714
+ fn=start_quit_process,
3715
  inputs=[],
3716
+ outputs=[hidden_countdown_state, quit_button, quit_confirmation_row]
3717
  ).then(
3718
  fn=None, inputs=None, outputs=None, js=start_quit_timer_js
3719
  )
 
3722
  fn=quit_application,
3723
  inputs=[],
3724
  outputs=[]
3725
+ ).then(
3726
+ fn=None, inputs=None, outputs=None, js=cancel_quit_timer_js
3727
  )
3728
 
3729
  cancel_quit_button.click(
3730
+ fn=cancel_quit_process,
3731
  inputs=[],
3732
+ outputs=[hidden_countdown_state, quit_button, quit_confirmation_row]
3733
  ).then(
3734
  fn=None, inputs=None, outputs=None, js=cancel_quit_timer_js
3735
  )