Windows
This commit is contained in:
@@ -127,15 +127,30 @@ class LibraryWatcher:
|
|||||||
self._full_scan_all()
|
self._full_scan_all()
|
||||||
return
|
return
|
||||||
|
|
||||||
self._observer = Observer()
|
import sqlite3
|
||||||
libraries = get_libraries(active_only=True)
|
from local.local_db import DB_PATH
|
||||||
|
conn = sqlite3.connect(str(DB_PATH))
|
||||||
|
conn.row_factory = sqlite3.Row
|
||||||
|
libraries = conn.execute(
|
||||||
|
"SELECT id, path FROM libraries WHERE is_active=1"
|
||||||
|
).fetchall()
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
if not libraries:
|
||||||
|
logger.info("Ingen biblioteker — springer watchdog over")
|
||||||
|
self._running = True
|
||||||
|
return
|
||||||
|
|
||||||
|
# Brug længere poll-interval på Windows for at spare handles
|
||||||
|
import sys
|
||||||
|
poll_interval = 30 if sys.platform == "win32" else 5
|
||||||
|
self._observer = Observer(timeout=poll_interval)
|
||||||
|
|
||||||
for lib in libraries:
|
for lib in libraries:
|
||||||
path = Path(lib["path"])
|
path = Path(lib["path"])
|
||||||
if not path.exists():
|
if not path.exists():
|
||||||
logger.warning(f"Bibliotek findes ikke: {path}")
|
logger.warning(f"Bibliotek findes ikke: {path}")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
handler = MusicLibraryHandler(lib["id"], self.on_change)
|
handler = MusicLibraryHandler(lib["id"], self.on_change)
|
||||||
self._observer.schedule(handler, str(path), recursive=True)
|
self._observer.schedule(handler, str(path), recursive=True)
|
||||||
logger.info(f"Overvåger: {path}")
|
logger.info(f"Overvåger: {path}")
|
||||||
|
|||||||
@@ -397,13 +397,8 @@ class MainWindow(QMainWindow):
|
|||||||
from local.file_watcher import get_watcher
|
from local.file_watcher import get_watcher
|
||||||
|
|
||||||
def on_file_change(event_type, path, song_id):
|
def on_file_change(event_type, path, song_id):
|
||||||
# QMetaObject.invokeMethod er den korrekte måde at kalde
|
# Brug signal — den eneste 100% thread-safe metode på Windows
|
||||||
# en slot fra en ikke-GUI-tråd
|
self._file_changed_signal.emit()
|
||||||
from PyQt6.QtCore import QMetaObject, Qt
|
|
||||||
QMetaObject.invokeMethod(
|
|
||||||
self._reload_timer, "start",
|
|
||||||
Qt.ConnectionType.QueuedConnection
|
|
||||||
)
|
|
||||||
|
|
||||||
watcher = get_watcher(on_change=on_file_change)
|
watcher = get_watcher(on_change=on_file_change)
|
||||||
watcher.start()
|
watcher.start()
|
||||||
@@ -437,6 +432,7 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
# Signal til at opdatere biblioteket fra baggrundstråd
|
# Signal til at opdatere biblioteket fra baggrundstråd
|
||||||
_library_loaded = __import__('PyQt6.QtCore', fromlist=['pyqtSignal']).pyqtSignal(list)
|
_library_loaded = __import__('PyQt6.QtCore', fromlist=['pyqtSignal']).pyqtSignal(list)
|
||||||
|
_file_changed_signal = __import__('PyQt6.QtCore', fromlist=['pyqtSignal']).pyqtSignal()
|
||||||
|
|
||||||
def _reload_library(self):
|
def _reload_library(self):
|
||||||
"""Hent sange fra DB i baggrundstråd — thread-safe via signal."""
|
"""Hent sange fra DB i baggrundstråd — thread-safe via signal."""
|
||||||
|
|||||||
Reference in New Issue
Block a user