diff --git a/core/app.py b/core/app.py index 3f4c3266..fc36787b 100644 --- a/core/app.py +++ b/core/app.py @@ -595,6 +595,12 @@ class DupeGuru(Broadcaster): self.exclude_list.load_from_xml(p) self.exclude_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``. @@ -794,6 +800,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 82f2896d..351ee377 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) @@ -328,9 +333,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")