From 88a3d2f67b03aaa40cb1861c224c5e100ba14ffc Mon Sep 17 00:00:00 2001 From: Carsten Kvist Date: Sun, 12 Apr 2026 11:38:21 +0200 Subject: [PATCH] Videre --- linedance-app/local/file_watcher.py | 39 ++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/linedance-app/local/file_watcher.py b/linedance-app/local/file_watcher.py index a0022e16..119541b5 100644 --- a/linedance-app/local/file_watcher.py +++ b/linedance-app/local/file_watcher.py @@ -12,7 +12,13 @@ from pathlib import Path from typing import Callable try: - from watchdog.observers import Observer + import sys + if sys.platform == "win32": + # WindowsApiObserver opretter en tråd per undermappe og løber tør + # for Windows handles ved store biblioteker — brug polling i stedet + from watchdog.observers.polling import PollingObserver as Observer + else: + from watchdog.observers import Observer from watchdog.events import ( FileSystemEventHandler, FileCreatedEvent, @@ -23,7 +29,6 @@ try: WATCHDOG_AVAILABLE = True except ImportError: WATCHDOG_AVAILABLE = False - print("Advarsel: watchdog ikke installeret — fil-overvågning deaktiveret") from local.tag_reader import is_supported, read_tags, get_file_modified_at from local.local_db import ( @@ -184,16 +189,26 @@ class LibraryWatcher: self._observer.schedule(handler, str(path), recursive=True) def _full_scan_all(self): - """Kør fuld scan på alle aktive biblioteker — i baggrundstråde.""" - for lib in get_libraries(active_only=True): - path = Path(lib["path"]) - if path.exists(): - t = threading.Thread( - target=self._full_scan_library, - args=(lib["id"], str(path)), - daemon=True - ) - t.start() + """Kør fuld scan på alle aktive biblioteker — én ad gangen i baggrundstråd.""" + def _run(): + try: + import sqlite3 + from local.local_db import DB_PATH + conn = sqlite3.connect(str(DB_PATH)) + conn.row_factory = sqlite3.Row + libs = conn.execute( + "SELECT id, path FROM libraries WHERE is_active=1" + ).fetchall() + conn.close() + for lib in libs: + lib_path = Path(lib["path"]) + if lib_path.exists(): + self._full_scan_library(lib["id"], str(lib_path)) + except Exception as e: + logger.error(f"_full_scan_all fejl: {e}") + + # Kør i én baggrundstråd — undgår Windows handle-udmattelse + threading.Thread(target=_run, daemon=True).start() def _full_scan_library(self, library_id: int, library_path: str): """Scan ét bibliotek med sin egen SQLite-forbindelse — blokerer aldrig GUI."""