fix ranking concurrency issue, #108, #109, improve EventListener

controlnet
AlUlkesh 2023-03-31 17:10:06 +02:00
parent df3d541307
commit 897531e41e
2 changed files with 29 additions and 19 deletions

View File

@ -138,9 +138,17 @@ async function image_browser_refresh_preview(wait_time = 200) {
})
}
const image_browser_get_current_img_handler = (del_img_btn) => {
// Prevent delete button spam
del_img_btn.style.pointerEvents = "auto"
del_img_btn.style.cursor = "default"
del_img_btn.style.opacity = "1"
}
async function image_browser_select_image(tab_base_tag, img_index) {
await image_browser_lock("image_browser_select_image")
const del_img_btn = gradioApp().getElementById(tab_base_tag + "_image_browser_del_img_btn")
// Prevent delete button spam
del_img_btn.style.pointerEvents = "none"
del_img_btn.style.cursor = "not-allowed"
del_img_btn.style.opacity = "0.65"
@ -157,13 +165,8 @@ async function image_browser_select_image(tab_base_tag, img_index) {
await image_browser_unlock()
// Prevent delete button spam
const image_browser_get_current_img_handler = () => {
del_img_btn.style.pointerEvents = "auto"
del_img_btn.style.cursor = "default"
del_img_btn.style.opacity = "1"
}
gradioApp().removeEventListener("image_browser_get_current_img", image_browser_get_current_img_handler)
gradioApp().addEventListener("image_browser_get_current_img", image_browser_get_current_img_handler)
gradioApp().removeEventListener("image_browser_get_current_img", () => image_browser_get_current_img_handler(del_img_btn))
gradioApp().addEventListener("image_browser_get_current_img", () => image_browser_get_current_img_handler(del_img_btn))
}
async function image_browser_turnpage(tab_base_tag) {

View File

@ -710,7 +710,7 @@ def get_all_images(dir_name, sort_by, sort_order, keyword, tab_base_tag_box, img
elif sort_by == "ranking":
finfo_ranked = {}
for fi_info in fileinfos:
finfo_ranked[fi_info[0]] = get_ranking(fi_info[0])
finfo_ranked[fi_info[0]], _ = get_ranking(fi_info[0])
if not down_symbol:
fileinfos = dict(sorted(finfo_ranked.items(), key=lambda x: (x[1], x[0])))
else:
@ -866,10 +866,14 @@ def update_move_text(favorites_btn, to_dir_btn):
def get_ranking(filename):
ranking_value = wib_db.select_ranking(filename)
return ranking_value
return ranking_value, None
def update_ranking(img_file_name, ranking, img_file_info):
saved_ranking = get_ranking(img_file_name)
def update_ranking(img_file_name, ranking_current, ranking, img_file_info):
# ranking = None is different than ranking = "None"! None means no radio button selected. "None" means radio button called "None" selected.
if ranking is None:
return ranking_current, None, img_file_info
saved_ranking, _ = get_ranking(img_file_name)
if saved_ranking != ranking:
# Update db
wib_db.update_ranking(img_file_name, ranking)
@ -890,7 +894,7 @@ def update_ranking(img_file_name, ranking, img_file_info):
images.save_image(image, os.path.dirname(img_file_name), "", extension=os.path.splitext(img_file_name)[1][1:], info=geninfo, forced_filename=os.path.splitext(os.path.basename(img_file_name))[0], save_to_dirs=False)
os.utime(img_file_name, (original_time, original_time))
img_file_info = geninfo
return img_file_info
return ranking, None, img_file_info
def create_tab(tab: ImageBrowserTab, current_gr_tab: gr.Tab):
global init, exif_cache, aes_cache, openoutpaint, controlnet
@ -971,8 +975,11 @@ def create_tab(tab: ImageBrowserTab, current_gr_tab: gr.Tab):
next_page = gr.Button('Next Page', elem_id=f"{tab.base_tag}_image_browser_next_page")
with gr.Column(scale=2, min_width=20):
end_page = gr.Button('End Page')
with gr.Row() as ranking_panel:
ranking = gr.Radio(value="None", choices=["1", "2", "3", "4", "5", "None"], label="ranking", elem_id=f"{tab.base_tag}_image_browser_ranking", interactive=True, visible=False)
with gr.Row(visible=False) as ranking_panel:
with gr.Column(scale=1, min_width=20):
ranking_current = gr.Textbox(value="None", label="Current ranking", interactive=False)
with gr.Column(scale=4, min_width=20):
ranking = gr.Radio(choices=["1", "2", "3", "4", "5", "None"], label="Set ranking to", elem_id=f"{tab.base_tag}_image_browser_ranking", interactive=True)
with gr.Row():
image_gallery = gr.Gallery(show_label=False, elem_id=f"{tab.base_tag}_image_browser_gallery").style(grid=opts.image_browser_page_columns)
with gr.Row() as delete_panel:
@ -1004,7 +1011,7 @@ def create_tab(tab: ImageBrowserTab, current_gr_tab: gr.Tab):
aes_filter_min = gr.Textbox(value="", label="Minimum aesthetic_score")
aes_filter_max = gr.Textbox(value="", label="Maximum aesthetic_score")
with gr.Row() as generation_info_panel:
img_file_info = gr.Textbox(label="Generation Info", interactive=False, lines=6)
img_file_info = gr.Textbox(label="Generation Info", interactive=False, lines=6,elem_id=f"{tab.base_tag}_image_browser_file_info")
with gr.Row() as filename_panel:
img_file_name = gr.Textbox(value="", label="File Name", interactive=False)
with gr.Row() as filetime_panel:
@ -1048,7 +1055,7 @@ def create_tab(tab: ImageBrowserTab, current_gr_tab: gr.Tab):
image_index = gr.Textbox(value=-1, elem_id=f"{tab.base_tag}_image_browser_image_index")
set_index = gr.Button('set_index', elem_id=f"{tab.base_tag}_image_browser_set_index")
filenames = gr.State([])
hidden = gr.Image(type="pil")
hidden = gr.Image(type="pil", elem_id=f"{tab.base_tag}_image_browser_hidden_image")
image_page_list = gr.Textbox(elem_id=f"{tab.base_tag}_image_browser_image_page_list")
info1 = gr.Textbox()
info2 = gr.Textbox()
@ -1177,7 +1184,7 @@ def create_tab(tab: ImageBrowserTab, current_gr_tab: gr.Tab):
outputs=[filenames, page_index, image_gallery, img_file_name, img_file_time, img_file_info, visible_img_num, warning_box, hidden, image_page_list]
)
turn_page_switch.change(fn=None, inputs=[tab_base_tag_box], outputs=None, _js="image_browser_turnpage")
hide_on_thumbnail_view = [delete_panel, button_panel, ranking, to_dir_panel, info_add_panel]
hide_on_thumbnail_view = [delete_panel, button_panel, ranking_panel, to_dir_panel, info_add_panel]
turn_page_switch.change(fn=lambda:(gr.update(visible=False), gr.update(visible=False), gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)), inputs=None, outputs=hide_on_thumbnail_view)
sort_order.click(
@ -1236,12 +1243,12 @@ def create_tab(tab: ImageBrowserTab, current_gr_tab: gr.Tab):
set_index.click(show_image_info, _js="image_browser_get_current_img", inputs=[tab_base_tag_box, image_index, page_index, filenames, turn_page_switch, image_gallery], outputs=[img_file_name, img_file_time, image_index, hidden, turn_page_switch, img_file_info_add, image_gallery])
set_index.click(fn=lambda:(gr.update(visible=delete_panel not in override_hidden), gr.update(visible=button_panel not in override_hidden), gr.update(visible=ranking_panel not in override_hidden), gr.update(visible=to_dir_panel not in override_hidden), gr.update(visible=info_add_panel not in override_hidden)), inputs=None, outputs=hide_on_thumbnail_view)
img_file_name.change(fn=lambda : "", inputs=None, outputs=[collected_warning])
img_file_name.change(get_ranking, inputs=img_file_name, outputs=ranking)
img_file_name.change(get_ranking, inputs=img_file_name, outputs=[ranking_current, ranking])
hidden.change(fn=run_pnginfo, inputs=[hidden, img_path, img_file_name], outputs=[info1, img_file_info, info2, image_browser_prompt, image_browser_neg_prompt])
#ranking
ranking.change(update_ranking, inputs=[img_file_name, ranking, img_file_info], outputs=[img_file_info])
ranking.change(update_ranking, inputs=[img_file_name, ranking_current, ranking, img_file_info], outputs=[ranking_current, ranking, img_file_info])
try:
modules.generation_parameters_copypaste.bind_buttons(send_to_buttons, hidden, img_file_info)