52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
"""
|
|
scan_worker.py — QThread der scanner biblioteker i baggrunden.
|
|
Rapporterer fremgang via signals uden at blokere GUI.
|
|
"""
|
|
from PyQt6.QtCore import QThread, pyqtSignal
|
|
|
|
|
|
class ScanWorker(QThread):
|
|
progress = pyqtSignal(int, int, str) # done, total, filename
|
|
finished = pyqtSignal(int, str) # antal, library_path
|
|
error = pyqtSignal(str)
|
|
batch_ready = pyqtSignal(int) # antal sange scannet så langt
|
|
|
|
def __init__(self, library_id: int, library_path: str,
|
|
db_path: str, overwrite_bpm: bool = False):
|
|
super().__init__()
|
|
self._library_id = library_id
|
|
self._library_path = library_path
|
|
self._db_path = db_path
|
|
self._overwrite_bpm = overwrite_bpm
|
|
self._cancelled = False
|
|
|
|
def cancel(self):
|
|
self._cancelled = True
|
|
self.requestInterruption()
|
|
|
|
def run(self):
|
|
try:
|
|
from local.scanner import scan_library
|
|
self._batch_count = 0
|
|
|
|
def on_progress(done, total, filename):
|
|
if self.isInterruptionRequested():
|
|
raise InterruptedError()
|
|
self.progress.emit(done, total, filename)
|
|
self._batch_count += 1
|
|
if self._batch_count % 50 == 0:
|
|
self.batch_ready.emit(self._batch_count)
|
|
|
|
count = scan_library(
|
|
self._library_id,
|
|
self._library_path,
|
|
self._db_path,
|
|
overwrite_bpm=self._overwrite_bpm,
|
|
progress_callback=on_progress,
|
|
)
|
|
if not self._cancelled:
|
|
self.finished.emit(count, self._library_path)
|
|
except InterruptedError:
|
|
pass
|
|
except Exception as e:
|
|
self.error.emit(str(e)) |