""" scan_worker.py — Kører fuld biblioteks-scanning i en baggrundstråd så GUI ikke fryser. """ from PyQt6.QtCore import QThread, pyqtSignal class ScanWorker(QThread): """ Kører _full_scan_all() i en baggrundstråd. Sender status-opdateringer undervejs. """ status_update = pyqtSignal(str) # løbende statusbeskeder scan_done = pyqtSignal(int) # antal behandlede filer def __init__(self, watcher, parent=None): super().__init__(parent) self._watcher = watcher self._total = 0 def run(self): try: from local.local_db import get_libraries libraries = get_libraries(active_only=True) if not libraries: self.status_update.emit("Ingen biblioteker konfigureret") self.scan_done.emit(0) return total_processed = 0 for lib in libraries: from pathlib import Path path = Path(lib["path"]) name = path.name self.status_update.emit(f"Scanner: {name}...") # Tæl filer først så vi kan vise fremgang from local.tag_reader import is_supported files = [f for f in path.rglob("*") if f.is_file() and is_supported(f)] count = len(files) self.status_update.emit(f"Scanner: {name} ({count} filer)...") # Kør scanning self._watcher._full_scan_library(lib["id"], str(path)) total_processed += count self.status_update.emit(f"Scan færdig — {total_processed} filer gennemgået") self.scan_done.emit(total_processed) except Exception as e: self.status_update.emit(f"Scan fejl: {e}") self.scan_done.emit(0)