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)