diff --git a/index.html b/index.html
index 8d69113..ce7db4d 100644
--- a/index.html
+++ b/index.html
@@ -342,6 +342,7 @@ mark{background:rgba(34,211,238,.28);color:#fff;border-radius:2px;padding:0 1px}
+
@@ -1010,13 +1011,16 @@ async function api(path, body){
if($("btnBrowseFolder")){
$("btnBrowseFolder").onclick = async ()=>{
$("btnBrowseFolder").disabled = true;
+ showToast("Opening folder chooser…", "info");
const j = await api("/api/choose_folder");
$("btnBrowseFolder").disabled = false;
if(j.ok && j.folder){
$("folder").value = j.folder;
showToast("Selected folder: " + j.folder, "ok");
- const scanRes = await api("/api/scan",{folder: j.folder});
- if(scanRes.images!=null){ scanned=true; setBadge("idle"); }
+ scanned = true;
+ setBadge("idle");
+ } else if($("fallbackFolderInput")){
+ $("fallbackFolderInput").click();
}
};
}
diff --git a/server.py b/server.py
index 5e70be7..0579043 100644
--- a/server.py
+++ b/server.py
@@ -1779,7 +1779,7 @@ class Handler(BaseHTTPRequestHandler):
elif self.path == "/api/choose_folder":
try:
- cmd = ["osascript", "-e", 'POSIX path of (choose folder with prompt "Select Photo Folder to Organize:")']
+ cmd = ["osascript", "-e", 'tell application "System Events" to set frontmost of (first process whose background only is false) to true', "-e", 'POSIX path of (choose folder with prompt "Select Photo Folder to Organize:")']
r = subprocess.run(cmd, capture_output=True, timeout=60)
if r.returncode == 0:
chosen = r.stdout.decode("utf-8").strip()
@@ -1787,9 +1787,21 @@ class Handler(BaseHTTPRequestHandler):
with S.lock:
S.folder = chosen
save_folder_config(chosen)
- self._json({"ok": True, "folder": chosen})
+ images, videos, sidecars = scan_folder(chosen)
+ done = sum(1 for p in images if p in S.done_paths)
+ with S.lock:
+ S.files = images
+ S.total_images = len(images)
+ S.video_files = videos
+ S.skipped_videos = len(videos)
+ S.skipped_sidecars = sidecars
+ S.status = "idle"
+ sync_metadata_from_folder(chosen)
+ load_journal()
+ push_stats()
+ self._json({"ok": True, "folder": chosen, "images": len(images), "videos": len(videos), "alreadyDone": done})
return
- self._json({"error": "No folder selected"}, 400)
+ self._json({"error": "No folder selected or dialog cancelled"}, 400)
except Exception as e:
self._json({"error": str(e)}, 500)