Use a signal for indexing progress

This commit is contained in:
Kovid Goyal 2022-06-10 15:16:15 +05:30
parent 1fc4dc5604
commit 5321c544f0
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -5,7 +5,7 @@
import os import os
from qt.core import ( from qt.core import (
QCheckBox, QDialog, QDialogButtonBox, QHBoxLayout, QIcon, QLabel, QRadioButton, QCheckBox, QDialog, QDialogButtonBox, QHBoxLayout, QIcon, QLabel, QRadioButton,
QTimer, QVBoxLayout, QWidget QTimer, QVBoxLayout, QWidget, pyqtSignal
) )
from calibre import detect_ncpus from calibre import detect_ncpus
@ -17,7 +17,12 @@ from calibre.gui2.fts.utils import get_db
class IndexingProgress: class IndexingProgress:
def __init__(self): def __init__(self):
self.left = self.total = 0 self.left = self.total = -1
def update(self, left, total):
changed = (left, total) != (self.left, self.total)
self.left, self.total = left, total
return changed
@property @property
def complete(self): def complete(self):
@ -73,20 +78,22 @@ class ScanProgress(QWidget):
db.fts_indexing_sleep_time = Cache.fts_indexing_sleep_time db.fts_indexing_sleep_time = Cache.fts_indexing_sleep_time
db.set_fts_num_of_workers(1) db.set_fts_num_of_workers(1)
def update(self, indexing_progress): def update(self, complete, left, total):
if indexing_progress.complete: if complete:
t = _('All book files indexed') t = _('All book files indexed')
self.warn_label.setVisible(False) self.warn_label.setVisible(False)
else: else:
done = indexing_progress.total - indexing_progress.left done = total - left
t = _('{0} of {1} book files ({2:.0%}) have been indexed').format( t = _('{0} of {1} book files ({2:.0%}) have been indexed').format(
done, indexing_progress.total, done / indexing_progress.total) done, total, done / (total or 1))
self.warn_label.setVisible(True) self.warn_label.setVisible(True)
self.status_label.setText(t) self.status_label.setText(t)
class ScanStatus(QWidget): class ScanStatus(QWidget):
indexing_progress_changed = pyqtSignal(bool, int, int)
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
if isinstance(parent, QDialog): if isinstance(parent, QDialog):
@ -105,6 +112,7 @@ class ScanStatus(QWidget):
la.setWordWrap(True) la.setWordWrap(True)
l.addWidget(la) l.addWidget(la)
self.scan_progress = sc = ScanProgress(self) self.scan_progress = sc = ScanProgress(self)
self.indexing_progress_changed.connect(self.scan_progress.update)
l.addWidget(sc) l.addWidget(sc)
l.addStretch(10) l.addStretch(10)
@ -116,8 +124,9 @@ class ScanStatus(QWidget):
self.update_stats() self.update_stats()
def update_stats(self): def update_stats(self):
self.indexing_progress.left, self.indexing_progress.total = self.db.fts_indexing_progress() changed = self.indexing_progress.update(*self.db.fts_indexing_progress())
self.scan_progress.update(self.indexing_progress) if changed:
self.indexing_progress_changed.emit(self.indexing_progress.complete, self.indexing_progress.left, self.indexing_progress.total)
def change_fts_state(self): def change_fts_state(self):
if not self.enable_fts.isChecked() and not confirm(_( if not self.enable_fts.isChecked() and not confirm(_(