From ade7c2e5f9564795e3cc466a3a23d6cee1825ffe Mon Sep 17 00:00:00 2001 From: awsr <43862868+awsr@users.noreply.github.com> Date: Fri, 6 Feb 2026 00:50:04 -0800 Subject: [PATCH] Add auto-update setting and functionality --- javascript/gallery.js | 37 +++++++++++++++++++++++++++++++++++++ modules/shared.py | 1 + 2 files changed, 38 insertions(+) diff --git a/javascript/gallery.js b/javascript/gallery.js index b61663c62..78dda3bf2 100644 --- a/javascript/gallery.js +++ b/javascript/gallery.js @@ -1271,6 +1271,43 @@ async function galleryClearInit() { }, 1000); } +async function initGalleryAutoRefresh() { + const isModern = opts.theme_type?.toLowerCase() === 'modern'; + let galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery'); + let timeout = 0; + while (!galleryTab && timeout++ < 60) { + await new Promise((resolve) => { setTimeout(resolve, 1000); }); + galleryTab = isModern ? document.getElementById('gallery_tabitem') : document.getElementById('tab_gallery'); + } + if (!galleryTab) { + throw new Error('Timed out waiting for gallery tab element'); + } + const displayNoneRegEx = /display:\s*none/; + async function galleryAutoRefresh(mutations) { + if (!opts.browser_gallery_autoupdate) return; + for (const mutation of mutations) { + switch (mutation.attributeName) { + case 'class': + if (mutation.oldValue.includes('hidden') && !mutation.target.classList.contains('hidden')) { + await updateFolders(); + GalleryFolder.getActive()?.click(); + } + break; + case 'style': + if (displayNoneRegEx.test(mutation.oldValue) && !displayNoneRegEx.test(mutation.target.style.display)) { + await updateFolders(); + GalleryFolder.getActive()?.click(); + } + break; + default: + break; + } + } + } + const galleryVisObserver = new MutationObserver(galleryAutoRefresh); + galleryVisObserver.observe(galleryTab, { attributeFilter: ['class', 'style'], attributeOldValue: true }); +} + async function blockQueueUntilReady() { // Add block to maintenanceQueue until cache is ready maintenanceQueue.enqueue({ diff --git a/modules/shared.py b/modules/shared.py index b3dec7abf..a29874001 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -535,6 +535,7 @@ options_templates.update(options_section(('saving-images', "Image Options"), { "image_sep_browser": OptionInfo("

Image Gallery

", "", gr.HTML), "browser_cache": OptionInfo(True, "Use image gallery cache"), "browser_folders": OptionInfo("", "Additional image browser folders"), + "browser_gallery_autoupdate": OptionInfo(False, "Automatically update when switching to the gallery"), "browser_fixed_width": OptionInfo(False, "Use fixed width thumbnails"), "viewer_show_metadata": OptionInfo(True, "Show metadata in full screen image browser"),