From 2a032d24bc206d80561d17320e30432b0527869c Mon Sep 17 00:00:00 2001 From: glubsy Date: Fri, 4 Sep 2020 18:56:25 +0200 Subject: [PATCH] Save/Load directories in Directories * Add the ability to save / load directories as XML, just like the last_directories.xml which get loaded on program start. --- core/app.py | 16 ++++++++++++++++ qt/directories_dialog.py | 29 +++++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/core/app.py b/core/app.py index 0a9301a2..c43763fd 100644 --- a/core/app.py +++ b/core/app.py @@ -588,6 +588,12 @@ class DupeGuru(Broadcaster): self.ignore_list.load_from_xml(p) self.ignore_list_dialog.refresh() + def load_directories(self, filepath): + # Clear out previous entries + self.directories.__init__() + self.directories.load_from_file(filepath) + self.notify("directories_changed") + def load_from(self, filename): """Start an async job to load results from ``filename``. @@ -785,6 +791,16 @@ class DupeGuru(Broadcaster): except OSError as e: self.view.show_message(tr("Couldn't write to file: {}").format(str(e))) + def save_directories_as(self, filename): + """Save directories in ``filename``. + + :param str filename: path of the file to save directories (as XML) to. + """ + try: + self.directories.save_to_file(filename) + except OSError as e: + self.view.show_message(tr("Couldn't write to file: {}").format(str(e))) + def start_scanning(self): """Starts an async job to scan for duplicates. diff --git a/qt/directories_dialog.py b/qt/directories_dialog.py index 45e53be6..ae118852 100644 --- a/qt/directories_dialog.py +++ b/qt/directories_dialog.py @@ -92,12 +92,14 @@ class DirectoriesDialog(QMainWindow): self.app.showResultsWindow, ), ("actionAddFolder", "", "", tr("Add Folder..."), self.addFolderTriggered), + ("actionLoadDirectories", "", "", tr("Load Directories..."), self.loadDirectoriesTriggered), + ("actionSaveDirectories", "", "", tr("Save Directories..."), self.saveDirectoriesTriggered), ] createActions(ACTIONS, self) - # if self.app.use_tabs: - # # Keep track of actions which should only be accessible from this class - # for action, _, _, _, _ in ACTIONS: - # self.specific_actions.add(getattr(self, action)) + if self.app.use_tabs: + # Keep track of actions which should only be accessible from this window + self.specific_actions.add(self.actionLoadDirectories) + self.specific_actions.add(self.actionSaveDirectories) def _setupMenu(self): if not self.app.use_tabs: @@ -127,6 +129,9 @@ class DirectoriesDialog(QMainWindow): self.menuFile.addSeparator() self.menuFile.addAction(self.app.actionClearPictureCache) self.menuFile.addSeparator() + self.menuFile.addAction(self.actionLoadDirectories) + self.menuFile.addAction(self.actionSaveDirectories) + self.menuFile.addSeparator() self.menuFile.addAction(self.app.actionQuit) self.menuView.addAction(self.app.actionDirectoriesWindow) @@ -327,9 +332,25 @@ class DirectoriesDialog(QMainWindow): self.app.model.load_from(destination) self.app.recentResults.insertItem(destination) + def loadDirectoriesTriggered(self): + title = tr("Select a directories file to load") + files = ";;".join([tr("dupeGuru Results (*.dupegurudirs)"), tr("All Files (*.*)")]) + destination = QFileDialog.getOpenFileName(self, title, "", files)[0] + if destination: + self.app.model.load_directories(destination) + def removeFolderButtonClicked(self): self.directoriesModel.model.remove_selected() + def saveDirectoriesTriggered(self): + title = tr("Select a file to save your directories to") + files = tr("dupeGuru Directories (*.dupegurudirs)") + destination, chosen_filter = QFileDialog.getSaveFileName(self, title, "", files) + if destination: + if not destination.endswith(".dupegurudirs"): + destination = "{}.dupegurudirs".format(destination) + self.app.model.save_directories_as(destination) + def scanButtonClicked(self): if self.app.model.results.is_modified: title = tr("Start a new scan")