Fix store scan signals running on worker thread (bound methods, not lambdas)
This commit is contained in:
+17
-12
@@ -1868,28 +1868,32 @@ class StorePage(QWidget):
|
|||||||
self.status.setText("Scanning local store…")
|
self.status.setText("Scanning local store…")
|
||||||
worker = StoreScanWorker(self._store_dir)
|
worker = StoreScanWorker(self._store_dir)
|
||||||
thread = QThread(self)
|
thread = QThread(self)
|
||||||
|
worker.gen = gen # used by _on_scan_results/_on_scan_failed via sender()
|
||||||
worker.moveToThread(thread)
|
worker.moveToThread(thread)
|
||||||
thread.started.connect(worker.run)
|
thread.started.connect(worker.run)
|
||||||
worker.results.connect(lambda items, g=gen: self._on_scan_results(g, items))
|
worker.results.connect(self._on_scan_results)
|
||||||
worker.failed.connect(lambda msg, g=gen: self._on_scan_failed(g, msg))
|
worker.failed.connect(self._on_scan_failed)
|
||||||
worker.finished.connect(thread.quit)
|
worker.finished.connect(thread.quit)
|
||||||
worker.finished.connect(lambda w=worker: self._on_worker_finished(w))
|
worker.finished.connect(self._on_worker_finished)
|
||||||
thread.finished.connect(lambda t=thread: self._on_thread_finished(t))
|
thread.finished.connect(self._on_thread_finished)
|
||||||
self._threads.append(thread)
|
self._threads.append(thread)
|
||||||
self._workers.append(worker)
|
self._workers.append(worker)
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
def _on_thread_finished(self, thread):
|
def _on_thread_finished(self):
|
||||||
|
thread = self.sender()
|
||||||
if thread in self._threads:
|
if thread in self._threads:
|
||||||
self._threads.remove(thread)
|
self._threads.remove(thread)
|
||||||
thread.deleteLater()
|
thread.deleteLater()
|
||||||
|
|
||||||
def _on_worker_finished(self, worker):
|
def _on_worker_finished(self):
|
||||||
|
worker = self.sender()
|
||||||
if worker in self._workers:
|
if worker in self._workers:
|
||||||
self._workers.remove(worker)
|
self._workers.remove(worker)
|
||||||
worker.deleteLater()
|
worker.deleteLater()
|
||||||
|
|
||||||
def _on_scan_failed(self, gen, message):
|
def _on_scan_failed(self, message):
|
||||||
|
gen = getattr(self.sender(), "gen", self._scan_gen)
|
||||||
if self._closing or gen != self._scan_gen:
|
if self._closing or gen != self._scan_gen:
|
||||||
return
|
return
|
||||||
self._items = []
|
self._items = []
|
||||||
@@ -1898,7 +1902,8 @@ class StorePage(QWidget):
|
|||||||
log.warning("store unavailable: %s", message)
|
log.warning("store unavailable: %s", message)
|
||||||
self.status.setText(f"Store unavailable: {message}")
|
self.status.setText(f"Store unavailable: {message}")
|
||||||
|
|
||||||
def _on_scan_results(self, gen, items):
|
def _on_scan_results(self, items):
|
||||||
|
gen = getattr(self.sender(), "gen", self._scan_gen)
|
||||||
if self._closing or gen != self._scan_gen:
|
if self._closing or gen != self._scan_gen:
|
||||||
return
|
return
|
||||||
self._items = items
|
self._items = items
|
||||||
@@ -2131,7 +2136,7 @@ class StorePage(QWidget):
|
|||||||
thread.started.connect(loader.run)
|
thread.started.connect(loader.run)
|
||||||
loader.loaded.connect(self._on_date_loaded)
|
loader.loaded.connect(self._on_date_loaded)
|
||||||
loader.finished.connect(thread.quit)
|
loader.finished.connect(thread.quit)
|
||||||
thread.finished.connect(lambda t=thread: self._on_thread_finished(t))
|
thread.finished.connect(self._on_thread_finished)
|
||||||
self._threads.append(thread)
|
self._threads.append(thread)
|
||||||
self._loaders.append(loader)
|
self._loaders.append(loader)
|
||||||
thread.start()
|
thread.start()
|
||||||
@@ -2154,7 +2159,7 @@ class StorePage(QWidget):
|
|||||||
thread.started.connect(loader.run)
|
thread.started.connect(loader.run)
|
||||||
loader.loaded.connect(self._on_cover_loaded)
|
loader.loaded.connect(self._on_cover_loaded)
|
||||||
loader.finished.connect(thread.quit)
|
loader.finished.connect(thread.quit)
|
||||||
thread.finished.connect(lambda t=thread: self._on_thread_finished(t))
|
thread.finished.connect(self._on_thread_finished)
|
||||||
self._threads.append(thread)
|
self._threads.append(thread)
|
||||||
self._loaders.append(loader)
|
self._loaders.append(loader)
|
||||||
thread.start()
|
thread.start()
|
||||||
@@ -2211,8 +2216,8 @@ class StorePage(QWidget):
|
|||||||
thread.started.connect(worker.run)
|
thread.started.connect(worker.run)
|
||||||
worker.result.connect(self._on_store_meta)
|
worker.result.connect(self._on_store_meta)
|
||||||
worker.finished.connect(thread.quit)
|
worker.finished.connect(thread.quit)
|
||||||
worker.finished.connect(lambda w=worker: self._on_worker_finished(w))
|
worker.finished.connect(self._on_worker_finished)
|
||||||
thread.finished.connect(lambda t=thread: self._on_thread_finished(t))
|
thread.finished.connect(self._on_thread_finished)
|
||||||
self._threads.append(thread)
|
self._threads.append(thread)
|
||||||
self._workers.append(worker)
|
self._workers.append(worker)
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|||||||
Reference in New Issue
Block a user