From 616dc8fb4c6c971bc80312e36b6f6be914176161 Mon Sep 17 00:00:00 2001 From: BasioMeusPuga Date: Mon, 29 Jan 2018 06:17:25 +0530 Subject: [PATCH] Toggle cover culling --- __main__.py | 44 +++++++++++++++++++++++++++++-------- library.py | 3 +++ resources/raw/settings.ui | 37 +++++++++++++++++++++++++++++++ resources/settingswindow.py | 13 ++++++++++- settings.py | 3 +++ settingsdialog.py | 8 ++++++- 6 files changed, 97 insertions(+), 11 deletions(-) diff --git a/__main__.py b/__main__.py index 1c9fbc9..9ef2fd7 100755 --- a/__main__.py +++ b/__main__.py @@ -274,17 +274,43 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): 'EQUALS', True) - img_pixmap = QtGui.QPixmap() - if cover: - img_pixmap.loadFromData(cover) - else: - img_pixmap.load(':/images/NotFound.png') - img_pixmap = img_pixmap.scaled(420, 600, QtCore.Qt.IgnoreAspectRatio) - this_item.setIcon(QtGui.QIcon(img_pixmap)) - this_item.setData(True, QtCore.Qt.UserRole + 8) + self.cover_loader(this_item, cover) def start_culling_timer(self): - self.culling_timer.start(30) + if self.settings['perform_culling']: + self.culling_timer.start(30) + + def load_all_covers(self): + all_covers_db = database.DatabaseFunctions( + self.database_path).fetch_data( + ('Hash', 'CoverImage',), + 'books', + {'Hash': ''}, + 'LIKE') + + all_covers = { + i[0]: i[1] for i in all_covers_db} + + for i in range(self.lib_ref.view_model.rowCount()): + this_item = self.lib_ref.view_model.item(i, 0) + + is_cover_already_displayed = this_item.data(QtCore.Qt.UserRole + 8) + if is_cover_already_displayed: + continue + + book_hash = this_item.data(QtCore.Qt.UserRole + 6) + cover = all_covers[book_hash] + self.cover_loader(this_item, cover) + + def cover_loader(self, item, cover): + img_pixmap = QtGui.QPixmap() + if cover: + img_pixmap.loadFromData(cover) + else: + img_pixmap.load(':/images/NotFound.png') + img_pixmap = img_pixmap.scaled(420, 600, QtCore.Qt.IgnoreAspectRatio) + item.setIcon(QtGui.QIcon(img_pixmap)) + item.setData(True, QtCore.Qt.UserRole + 8) def test_function(self): print('Caesar si viveret, ad remum dareris') diff --git a/library.py b/library.py index 1dbf538..50931ab 100644 --- a/library.py +++ b/library.py @@ -137,6 +137,9 @@ class Library: self.table_rows.append( [title, author, None, year, tags, all_metadata, i[8]]) + if not self.parent.settings['perform_culling']: + self.parent.load_all_covers() + def create_table_model(self): table_header = ['Title', 'Author', 'Status', 'Year', 'Tags'] self.table_model = MostExcellentTableModel( diff --git a/resources/raw/settings.ui b/resources/raw/settings.ui index bccc677..6d7e5cf 100644 --- a/resources/raw/settings.ui +++ b/resources/raw/settings.ui @@ -80,6 +80,43 @@ + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Load covers only when needed + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + diff --git a/resources/settingswindow.py b/resources/settingswindow.py index 2e04872..c2ee1fc 100644 --- a/resources/settingswindow.py +++ b/resources/settingswindow.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'raw/settings.ui' # -# Created by: PyQt5 UI code generator 5.9.2 +# Created by: PyQt5 UI code generator 5.10 # # WARNING! All changes made in this file will be lost! @@ -51,6 +51,16 @@ class Ui_Dialog(object): self.horizontalLayout_4.addWidget(self.autoTags) self.verticalLayout.addLayout(self.horizontalLayout_4) self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1) + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem) + self.performCulling = QtWidgets.QCheckBox(self.groupBox) + self.performCulling.setObjectName("performCulling") + self.horizontalLayout.addWidget(self.performCulling) + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem1) + self.gridLayout.addLayout(self.horizontalLayout, 1, 0, 1, 1) self.verticalLayout_2.addWidget(self.groupBox) self.gridLayout_3.addLayout(self.verticalLayout_2, 0, 0, 1, 1) self.horizontalLayout_2 = QtWidgets.QHBoxLayout() @@ -78,6 +88,7 @@ class Ui_Dialog(object): self.fileRemember.setText(_translate("Dialog", "Remember open files")) self.coverShadows.setText(_translate("Dialog", "Cover shadows")) self.autoTags.setText(_translate("Dialog", "Generate tags from files")) + self.performCulling.setText(_translate("Dialog", "Load covers only when needed")) self.okButton.setText(_translate("Dialog", "OK")) self.cancelButton.setText(_translate("Dialog", "Cancel")) self.aboutButton.setText(_translate("Dialog", "About")) diff --git a/settings.py b/settings.py index 684db96..30ff2c9 100644 --- a/settings.py +++ b/settings.py @@ -89,6 +89,8 @@ class Settings: 'scanLibraryAtStart', 'False').capitalize()) self.parent.settings['remember_files'] = literal_eval(self.settings.value( 'rememberFiles', 'False').capitalize()) + self.parent.settings['perform_culling'] = literal_eval(self.settings.value( + 'performCulling', 'True').capitalize()) self.settings.endGroup() def save_settings(self): @@ -147,4 +149,5 @@ class Settings: self.settings.setValue('coverShadows', current_settings['cover_shadows']) self.settings.setValue('autoTags', current_settings['auto_tags']) self.settings.setValue('scanLibraryAtStart', current_settings['scan_library']) + self.settings.setValue('performCulling', current_settings['perform_culling']) self.settings.endGroup() diff --git a/settingsdialog.py b/settingsdialog.py index ea2343a..eec84e4 100644 --- a/settingsdialog.py +++ b/settingsdialog.py @@ -59,11 +59,13 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): self.coverShadows.setChecked(self.parent.settings['cover_shadows']) self.refreshLibrary.setChecked(self.parent.settings['scan_library']) self.fileRemember.setChecked(self.parent.settings['remember_files']) + self.performCulling.setChecked(self.parent.settings['perform_culling']) self.autoTags.clicked.connect(self.manage_checkboxes) self.coverShadows.clicked.connect(self.manage_checkboxes) self.refreshLibrary.clicked.connect(self.manage_checkboxes) self.fileRemember.clicked.connect(self.manage_checkboxes) + self.performCulling.clicked.connect(self.manage_checkboxes) # Generate the filesystem treeView self.generate_tree() @@ -234,10 +236,14 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): 'coverShadows': 'cover_shadows', 'autoTags': 'auto_tags', 'refreshLibrary': 'scan_library', - 'fileRemember': 'remember_files'} + 'fileRemember': 'remember_files', + 'performCulling': 'perform_culling'} self.parent.settings[sender_dict[sender]] = not self.parent.settings[sender_dict[sender]] + if not self.performCulling.isChecked(): + self.parent.load_all_covers() + def about_pressed(self): self.treeView.setVisible(not self.treeView.isVisible()) self.aboutBox.setVisible(not self.aboutBox.isVisible())