mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Debounce book details popup refresh on metadata change
Also explicitly disconnected changed signal rather than relying on Qt
This commit is contained in:
parent
6dac69aa1b
commit
16255d011d
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
|
|
||||||
import textwrap
|
import textwrap
|
||||||
|
from contextlib import suppress
|
||||||
from enum import IntEnum
|
from enum import IntEnum
|
||||||
|
|
||||||
from qt.core import (
|
from qt.core import (
|
||||||
@ -280,6 +281,10 @@ class BookInfo(QDialog, DropMixin):
|
|||||||
t.setInterval(BOOK_DETAILS_DISPLAY_DEBOUNCE_DELAY)
|
t.setInterval(BOOK_DETAILS_DISPLAY_DEBOUNCE_DELAY)
|
||||||
t.setSingleShot(True)
|
t.setSingleShot(True)
|
||||||
t.timeout.connect(self._debounce_refresh)
|
t.timeout.connect(self._debounce_refresh)
|
||||||
|
self.update_debounce_timer = t = QTimer(self)
|
||||||
|
t.setInterval(BOOK_DETAILS_DISPLAY_DEBOUNCE_DELAY)
|
||||||
|
t.setSingleShot(True)
|
||||||
|
t.timeout.connect(self.do_update_book_details)
|
||||||
if library_path is not None:
|
if library_path is not None:
|
||||||
self.view = None
|
self.view = None
|
||||||
db = get_gui().library_broker.get_library(library_path)
|
db = get_gui().library_broker.get_library(library_path)
|
||||||
@ -330,13 +335,16 @@ class BookInfo(QDialog, DropMixin):
|
|||||||
self.fit_cover.stateChanged.connect(self.toggle_cover_fit)
|
self.fit_cover.stateChanged.connect(self.toggle_cover_fit)
|
||||||
if dialog_number == DialogNumbers.Locked:
|
if dialog_number == DialogNumbers.Locked:
|
||||||
get_gui().current_db.new_api.add_listener(book_metatada_changed, check_already_added=True)
|
get_gui().current_db.new_api.add_listener(book_metatada_changed, check_already_added=True)
|
||||||
listener_object.metadata_changed.connect(self.do_update_book_details, type=Qt.ConnectionType.QueuedConnection)
|
listener_object.metadata_changed.connect(self.do_update_book_details_debounce, type=Qt.ConnectionType.QueuedConnection)
|
||||||
self.restore_geometry(gprefs, self.geometry_string('book_info_dialog_geometry'))
|
self.restore_geometry(gprefs, self.geometry_string('book_info_dialog_geometry'))
|
||||||
try:
|
try:
|
||||||
self.splitter.restoreState(gprefs.get(self.geometry_string('book_info_dialog_splitter_state')))
|
self.splitter.restoreState(gprefs.get(self.geometry_string('book_info_dialog_splitter_state')))
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def do_update_book_details_debounce(self):
|
||||||
|
self.update_debounce_timer.start()
|
||||||
|
|
||||||
def do_update_book_details(self):
|
def do_update_book_details(self):
|
||||||
if self.current_row is not None:
|
if self.current_row is not None:
|
||||||
mi = self.view.model().get_book_display_info(self.current_row)
|
mi = self.view.model().get_book_display_info(self.current_row)
|
||||||
@ -396,8 +404,11 @@ class BookInfo(QDialog, DropMixin):
|
|||||||
if self.slave_connected:
|
if self.slave_connected:
|
||||||
self.view.model().new_bookdisplay_data.disconnect(self.slave)
|
self.view.model().new_bookdisplay_data.disconnect(self.slave)
|
||||||
self.slave_debounce_timer.stop() # OK if it isn't running
|
self.slave_debounce_timer.stop() # OK if it isn't running
|
||||||
|
self.update_debounce_timer.stop()
|
||||||
self.view = self.link_delegate = self.gui = None
|
self.view = self.link_delegate = self.gui = None
|
||||||
self.closed.emit(self)
|
self.closed.emit(self)
|
||||||
|
with suppress(Exception):
|
||||||
|
listener_object.metadata_changed.disconnect(self.do_update_book_details_debounce)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def cover_changed(self, data):
|
def cover_changed(self, data):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user