Smooth store source transitions: cancel stale batches and batch grid updates
This commit is contained in:
+22
@@ -2019,9 +2019,27 @@ class StorePage(QWidget):
|
|||||||
if self._items:
|
if self._items:
|
||||||
self._apply_filter()
|
self._apply_filter()
|
||||||
|
|
||||||
|
def _begin_scan(self):
|
||||||
|
"""Clear the stale view and invalidate in-flight cover/date batches."""
|
||||||
|
self._generation += 1
|
||||||
|
self._cover_busy = False
|
||||||
|
self._date_busy = False
|
||||||
|
self._cover_queue = []
|
||||||
|
self._cover_next = 0
|
||||||
|
self._date_queue = []
|
||||||
|
self._date_next = 0
|
||||||
|
self._cover_attempted.clear()
|
||||||
|
for loader in self._loaders:
|
||||||
|
loader.cancel()
|
||||||
|
self._loaders = []
|
||||||
|
self.grid.clear()
|
||||||
|
self.table.setRowCount(0)
|
||||||
|
self.status.setText("Loading…")
|
||||||
|
|
||||||
def refresh(self, force=False):
|
def refresh(self, force=False):
|
||||||
if self._closing:
|
if self._closing:
|
||||||
return
|
return
|
||||||
|
self._begin_scan()
|
||||||
self._scan_gen += 1
|
self._scan_gen += 1
|
||||||
gen = self._scan_gen
|
gen = self._scan_gen
|
||||||
if self.source_combo.currentIndex() == 0: # Server
|
if self.source_combo.currentIndex() == 0: # Server
|
||||||
@@ -2082,6 +2100,8 @@ class StorePage(QWidget):
|
|||||||
self._items = []
|
self._items = []
|
||||||
self._filtered = []
|
self._filtered = []
|
||||||
self._dirty = False
|
self._dirty = False
|
||||||
|
self.grid.clear()
|
||||||
|
self.table.setRowCount(0)
|
||||||
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}")
|
||||||
|
|
||||||
@@ -2193,6 +2213,7 @@ class StorePage(QWidget):
|
|||||||
self._loaders = []
|
self._loaders = []
|
||||||
|
|
||||||
self.grid.clear()
|
self.grid.clear()
|
||||||
|
self.grid.setUpdatesEnabled(False)
|
||||||
self.table.setUpdatesEnabled(False)
|
self.table.setUpdatesEnabled(False)
|
||||||
self.table.setSortingEnabled(False)
|
self.table.setSortingEnabled(False)
|
||||||
self.table.setRowCount(show_count)
|
self.table.setRowCount(show_count)
|
||||||
@@ -2297,6 +2318,7 @@ class StorePage(QWidget):
|
|||||||
def _finish_fill(self):
|
def _finish_fill(self):
|
||||||
if self._fill_timer is not None:
|
if self._fill_timer is not None:
|
||||||
self._fill_timer.stop()
|
self._fill_timer.stop()
|
||||||
|
self.grid.setUpdatesEnabled(True)
|
||||||
self.table.setUpdatesEnabled(True)
|
self.table.setUpdatesEnabled(True)
|
||||||
self.table.setSortingEnabled(True)
|
self.table.setSortingEnabled(True)
|
||||||
total = len(self._filtered)
|
total = len(self._filtered)
|
||||||
|
|||||||
Reference in New Issue
Block a user