From 76cc2000abafedea4761af7becb11e9a89b84f39 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Tue, 22 Nov 2016 02:41:43 +0000 Subject: [PATCH] Add UI preference to picture cache type under Qt --- core/app.py | 10 ++++++++-- qt/app.py | 1 + qt/pe/preferences_dialog.py | 7 +++++++ qt/preferences.py | 3 +++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/core/app.py b/core/app.py index 32eef418..767f5fa4 100644 --- a/core/app.py +++ b/core/app.py @@ -135,13 +135,12 @@ class DupeGuru(Broadcaster): # In addition to "app-level" options, this dictionary also holds options that will be # sent to the scanner. They don't have default values because those defaults values are # defined in the scanner class. - picture_cache_name = 'cached_pictures.shelve' if self.PICTURE_CACHE_TYPE == 'shelve' else 'cached_pictures.db' self.options = { 'escape_filter_regexp': True, 'clean_empty_dirs': False, 'ignore_hardlink_matches': False, 'copymove_dest_type': DestType.Relative, - 'cache_path': op.join(self.appdata, picture_cache_name), + 'picture_cache_type': self.PICTURE_CACHE_TYPE } self.selected_dupes = [] self.details_panel = DetailsPanel(self) @@ -169,6 +168,11 @@ class DupeGuru(Broadcaster): self.result_table.connect() self.view.create_results_window() + def _get_picture_cache_path(self): + cache_type = self.options['picture_cache_type'] + cache_name = 'cached_pictures.shelve' if cache_type == 'shelve' else 'cached_pictures.db' + return op.join(self.appdata, cache_name) + def _get_dupe_sort_key(self, dupe, get_group, key, delta): if self.app_mode in (AppMode.Music, AppMode.Picture): if key == 'folder_path': @@ -758,6 +762,8 @@ class DupeGuru(Broadcaster): for k, v in self.options.items(): if hasattr(scanner, k): setattr(scanner, k, v) + if self.app_mode == AppMode.Picture: + scanner.cache_path = self._get_picture_cache_path() self.results.groups = [] self._recreate_result_table() self._results_changed() diff --git a/qt/app.py b/qt/app.py index c452af72..93d45de9 100644 --- a/qt/app.py +++ b/qt/app.py @@ -115,6 +115,7 @@ class DupeGuru(QObject): scanned_tags.add('year') self.model.options['scanned_tags'] = scanned_tags self.model.options['match_scaled'] = self.prefs.match_scaled + self.model.options['picture_cache_type'] = self.prefs.picture_cache_type #--- Private def _get_details_dialog_class(self): diff --git a/qt/pe/preferences_dialog.py b/qt/pe/preferences_dialog.py index 047c4948..057b529f 100644 --- a/qt/pe/preferences_dialog.py +++ b/qt/pe/preferences_dialog.py @@ -4,7 +4,9 @@ # which should be included with this package. The terms are also available at # http://www.gnu.org/licenses/gpl-3.0.html +from PyQt5.QtWidgets import QLabel from hscommon.trans import trget +from qtlib.radio_box import RadioBox from core.scanner import ScanType from core.app import AppMode @@ -28,10 +30,14 @@ class PreferencesDialog(PreferencesDialogBase): self.widgetsVLayout.addWidget(self.ignoreHardlinkMatches) self._setupAddCheckbox('debugModeBox', tr("Debug mode (restart required)")) self.widgetsVLayout.addWidget(self.debugModeBox) + self.widgetsVLayout.addWidget(QLabel(tr("Picture cache mode:"))) + self.cacheTypeRadio = RadioBox(self, items=["Sqlite", "Shelve"], spread=False) + self.widgetsVLayout.addWidget(self.cacheTypeRadio) self._setupBottomPart() def _load(self, prefs, setchecked): setchecked(self.matchScaledBox, prefs.match_scaled) + self.cacheTypeRadio.selected_index = 1 if prefs.picture_cache_type == 'shelve' else 0 # Update UI state based on selected scan type scan_type = prefs.get_scan_type(AppMode.Picture) @@ -40,4 +46,5 @@ class PreferencesDialog(PreferencesDialogBase): def _save(self, prefs, ischecked): prefs.match_scaled = ischecked(self.matchScaledBox) + prefs.picture_cache_type = 'shelve' if self.cacheTypeRadio.selected_index == 1 else 'sqlite' diff --git a/qt/preferences.py b/qt/preferences.py index 78357597..5a7784d1 100644 --- a/qt/preferences.py +++ b/qt/preferences.py @@ -44,6 +44,7 @@ class Preferences(PreferencesBase): self.scan_tag_genre = get('ScanTagGenre', self.scan_tag_genre) self.scan_tag_year = get('ScanTagYear', self.scan_tag_year) self.match_scaled = get('MatchScaled', self.match_scaled) + self.picture_cache_type = get('PictureCacheType', self.picture_cache_type) def reset(self): self.filter_hardness = 95 @@ -74,6 +75,7 @@ class Preferences(PreferencesBase): self.scan_tag_genre = False self.scan_tag_year = False self.match_scaled = False + self.picture_cache_type = 'sqlite' def _save_values(self, settings): set_ = self.set_value @@ -105,6 +107,7 @@ class Preferences(PreferencesBase): set_('ScanTagGenre', self.scan_tag_genre) set_('ScanTagYear', self.scan_tag_year) set_('MatchScaled', self.match_scaled) + set_('PictureCacheType', self.picture_cache_type) # scan_type is special because we save it immediately when we set it. def get_scan_type(self, app_mode):