Prevent the cover browser from being refreshed and therefore using resources when it is hidden

This commit is contained in:
Kovid Goyal 2015-04-30 12:05:04 +05:30
parent 67948df37f
commit 9a3f901ca4
8 changed files with 42 additions and 36 deletions

View File

@ -272,8 +272,7 @@ class AddAction(InterfaceAction):
fmts = [pt.name]
ids.append(db.import_book(mi, fmts))
self.gui.library_view.model().books_added(num)
if hasattr(self.gui, 'db_images'):
self.gui.db_images.beginResetModel(), self.gui.db_images.endResetModel()
self.gui.refresh_cover_browser()
self.gui.tags_view.recount()
if ids:
ids.reverse()
@ -374,8 +373,7 @@ class AddAction(InterfaceAction):
if current_idx.isValid():
self.gui.library_view.model().current_changed(current_idx, current_idx)
if cover_changed:
if self.gui.cover_flow:
self.gui.cover_flow.dataChanged()
self.gui.refresh_cover_browser()
def __add_filesystem_book(self, paths, allow_device=True):
if isinstance(paths, basestring):
@ -440,8 +438,7 @@ class AddAction(InterfaceAction):
if adder.number_of_books_added > 0:
self.gui.library_view.model().books_added(adder.number_of_books_added)
self.gui.library_view.set_current_row(0)
if hasattr(self.gui, 'db_images'):
self.gui.db_images.beginResetModel(), self.gui.db_images.endResetModel()
self.gui.refresh_cover_browser()
self.gui.tags_view.recount()
if adder.merged_books:

View File

@ -333,8 +333,7 @@ class EditMetadataAction(InterfaceAction):
m = self.gui.library_view.model()
m.refresh_ids(list(book_ids))
current = self.gui.library_view.currentIndex()
if self.gui.cover_flow:
self.gui.cover_flow.dataChanged()
self.gui.refresh_cover_browser()
m.current_changed(current, previous or current)
self.gui.tags_view.recount()
@ -401,8 +400,7 @@ class EditMetadataAction(InterfaceAction):
else:
m.refresh_ids(refresh_books)
self.gui.tags_view.recount()
if self.gui.cover_flow:
self.gui.cover_flow.dataChanged()
self.gui.refresh_cover_browser()
self.gui.library_view.select_rows(book_ids)
# Merge books {{{
@ -755,8 +753,8 @@ class EditMetadataAction(InterfaceAction):
cr = self.gui.library_view.currentIndex().row()
self.gui.library_view.model().refresh_ids(
list(book_ids), cr)
if covers_changed and self.gui.cover_flow:
self.gui.cover_flow.dataChanged()
if covers_changed:
self.gui.refresh_cover_browser()
if tag_browser_changed:
self.gui.tags_view.recount()

View File

@ -260,8 +260,7 @@ class AutoAdder(QObject):
gui.status_bar.show_message(_(
'Added %(num)d book(s) automatically from %(src)s') %
dict(num=count, src=self.worker.path), 2000)
if hasattr(gui, 'db_images'):
gui.db_images.beginResetModel(), gui.db_images.endResetModel()
gui.refresh_cover_browser()
if needs_rescan:
QTimer.singleShot(2000, self.dir_changed)

View File

@ -78,9 +78,10 @@ if pictureflow is not None:
class DatabaseImages(pictureflow.FlowImages):
def __init__(self, model, buffer=20):
def __init__(self, model, is_cover_browser_visible):
pictureflow.FlowImages.__init__(self)
self.model = model
self.is_cover_browser_visible = is_cover_browser_visible
self.model.modelReset.connect(self.reset, type=Qt.QueuedConnection)
def count(self):
@ -108,7 +109,8 @@ if pictureflow is not None:
self.beginResetModel(), self.endResetModel()
def beginResetModel(self):
self.dataChanged.emit()
if self.is_cover_browser_visible():
self.dataChanged.emit()
def endResetModel(self):
pass
@ -244,9 +246,8 @@ class CoverFlowMixin(object):
self.cover_flow = CoverFlow(parent=self)
self.cover_flow.currentChanged.connect(self.sync_listview_to_cf)
self.cover_flow.context_menu_requested.connect(self.cf_context_menu_requested)
self.library_view.selectionModel().currentRowChanged.connect(
self.sync_cf_to_listview)
self.db_images = DatabaseImages(self.library_view.model())
self.library_view.selectionModel().currentRowChanged.connect(self.sync_cf_to_listview)
self.db_images = DatabaseImages(self.library_view.model(), self.is_cover_browser_visible)
self.cover_flow.setImages(self.db_images)
self.cover_flow.itemActivated.connect(self.iactions['View'].view_specific_book)
else:
@ -254,6 +255,7 @@ class CoverFlowMixin(object):
'<br>'+pictureflowerror)
self.cover_flow.setWordWrap(True)
if config['separate_cover_flow']:
self.separate_cover_browser = True
self.cb_splitter.button.clicked.connect(self.toggle_cover_browser)
self.cb_splitter.button.set_state_to_show()
self.cb_splitter.action_toggle.triggered.connect(self.toggle_cover_browser)
@ -261,6 +263,7 @@ class CoverFlowMixin(object):
self.cover_flow.stop.connect(self.hide_cover_browser)
self.cover_flow.setVisible(False)
else:
self.separate_cover_browser = False
self.cb_splitter.insertWidget(self.cb_splitter.side_index, self.cover_flow)
if CoverFlow is not None:
self.cover_flow.stop.connect(self.cb_splitter.hide_side_pane)
@ -321,9 +324,23 @@ class CoverFlowMixin(object):
self.cb_dialog = None
self.cb_splitter.button.set_state_to_show()
def is_cover_browser_visible(self):
try:
if self.separate_cover_browser:
return self.cover_flow.isVisible()
except AttributeError:
return False # called before init_cover_flow_mixin
return not self.cb_splitter.is_side_index_hidden
def refresh_cover_browser(self):
try:
if self.is_cover_browser_visible() and not isinstance(self.cover_flow, QLabel):
self.cover_flow.dataChanged()
except AttributeError:
pass # called before init_cover_flow_mixin
def sync_cf_to_listview(self, current, previous):
if self.cover_flow_sync_flag and self.cover_flow.isVisible() and \
self.cover_flow.currentSlide() != current.row():
if (self.cover_flow_sync_flag and self.is_cover_browser_visible() and self.cover_flow.currentSlide() != current.row()):
self.cover_flow.setCurrentSlide(current.row())
self.cover_flow_sync_flag = True
@ -338,8 +355,7 @@ class CoverFlowMixin(object):
def cover_flow_do_sync(self):
self.cover_flow_sync_flag = True
try:
if self.cover_flow.isVisible() and self.cf_last_updated_at is not None and \
time.time() - self.cf_last_updated_at > 0.5:
if (self.is_cover_browser_visible() and self.cf_last_updated_at is not None and time.time() - self.cf_last_updated_at > 0.5):
self.cf_last_updated_at = None
row = self.cover_flow.currentSlide()
m = self.library_view.model()

View File

@ -130,8 +130,7 @@ class BookInfo(QDialog):
if self.current_row is not None:
id_ = self.view.model().id(self.current_row)
self.view.model().db.set_cover(id_, data)
if self.gui.cover_flow:
self.gui.cover_flow.dataChanged()
self.gui.refresh_cover_browser()
ci = self.view.currentIndex()
if ci.isValid():
self.view.model().current_changed(ci, ci)

View File

@ -528,8 +528,7 @@ class LayoutMixin(object): # {{{
def bd_cover_changed(self, id_, cdata):
self.library_view.model().db.set_cover(id_, cdata)
if self.cover_flow:
self.cover_flow.dataChanged()
self.refresh_cover_browser()
def bd_open_cover_with(self, book_id, entry):
cpath = self.current_db.new_api.format_abspath(book_id, '__COVER_INTERNAL__')
@ -560,8 +559,7 @@ class LayoutMixin(object): # {{{
def bd_cover_removed(self, id_):
self.library_view.model().db.remove_cover(id_, commit=True,
notify=False)
if self.cover_flow:
self.cover_flow.dataChanged()
self.refresh_cover_browser()
def bd_copy_link(self, url):
if url:

View File

@ -470,9 +470,8 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self.update_font_display()
gui.tags_view.reread_collapse_parameters()
gui.library_view.refresh_book_details()
if hasattr(gui.cover_flow, 'setShowReflections'):
gui.cover_flow.setShowReflections(gprefs['cover_browser_reflections'])
gui.cover_flow.setPreserveAspectRatio(gprefs['cb_preserve_aspect_ratio'])
gui.cover_flow.setShowReflections(gprefs['cover_browser_reflections'])
gui.cover_flow.setPreserveAspectRatio(gprefs['cb_preserve_aspect_ratio'])
gui.library_view.refresh_row_sizing()
gui.grid_view.refresh_settings()

View File

@ -87,7 +87,7 @@ _gui = None
def get_gui():
return _gui
def add_quick_start_guide(library_view, db_images):
def add_quick_start_guide(library_view, refresh_cover_browser=None):
from calibre.ebooks.metadata.meta import get_metadata
from calibre.ebooks import calibre_cover
from calibre.utils.zipfile import safe_replace
@ -112,8 +112,8 @@ def add_quick_start_guide(library_view, db_images):
library_view.model().add_books([tmp.name], ['epub'], [mi])
os.remove(tmp.name)
library_view.model().books_added(1)
if hasattr(db_images, 'reset'):
db_images.reset()
if refresh_cover_browser is not None:
refresh_cover_browser()
if library_view.model().rowCount(None) < 3:
library_view.resizeColumnsToContents()
@ -342,7 +342,7 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{
self.iactions['Choose Library'].count_changed)
if not gprefs.get('quick_start_guide_added', False):
try:
add_quick_start_guide(self.library_view, getattr(self, 'db_images', None))
add_quick_start_guide(self.library_view)
except:
import traceback
traceback.print_exc()