diff --git a/core/app.py b/core/app.py index da0618e7..5f2a8f94 100644 --- a/core/app.py +++ b/core/app.py @@ -167,6 +167,8 @@ class DupeGuru(Broadcaster): if not op.exists(self.appdata): os.makedirs(self.appdata) self.discarded_file_count = 0 + self.fileclasses = [fs.File] + self.folderclass = fs.Folder self.directories = directories.Directories() self.results = results.Results(self) self.ignore_list = IgnoreList() @@ -257,7 +259,7 @@ class DupeGuru(Broadcaster): def _create_file(self, path): # We add fs.Folder to fileclasses in case the file we're loading contains folder paths. - return fs.get_file(path, self.directories.fileclasses + [fs.Folder]) + return fs.get_file(path, self.fileclasses + [fs.Folder]) def _get_file(self, str_path): path = Path(str_path) @@ -749,9 +751,9 @@ class DupeGuru(Broadcaster): def do(j): j.set_progress(0, tr("Collecting files to scan")) if scanner.scan_type == ScanType.Folders: - files = list(self.directories.get_folders(j)) + files = list(self.directories.get_folders(folderclass=self.folderclass, j=j)) else: - files = list(self.directories.get_files(j)) + files = list(self.directories.get_files(fileclasses=self.fileclasses, j=j)) if self.options['ignore_hardlink_matches']: files = self._remove_hardlink_dupes(files) logging.info('Scanning %d files' % len(files)) diff --git a/core/directories.py b/core/directories.py index c1e624de..4a1415dd 100644 --- a/core/directories.py +++ b/core/directories.py @@ -49,12 +49,10 @@ class Directories: in :mod:`core.fs`) that have to be scanned according to the chosen folders/states. """ #---Override - def __init__(self, fileclasses=[fs.File]): + def __init__(self): self._dirs = [] # {path: state} self.states = {} - self.fileclasses = fileclasses - self.folderclass = fs.Folder def __contains__(self, path): for p in self._dirs: @@ -77,7 +75,7 @@ class Directories: if path.name.startswith('.'): # hidden return DirectoryState.Excluded - def _get_files(self, from_path, j): + def _get_files(self, from_path, fileclasses, j): j.check_if_cancelled() state = self.get_state(from_path) if state == DirectoryState.Excluded: @@ -89,7 +87,7 @@ class Directories: try: filepaths = set() if state != DirectoryState.Excluded: - found_files = fs.get_files(from_path, fileclasses=self.fileclasses) + found_files = fs.get_files(from_path, fileclasses=fileclasses) logging.debug("Collected %d files in folder %s", len(found_files), str(from_path)) for file in found_files: file.is_ref = state == DirectoryState.Reference @@ -99,7 +97,7 @@ class Directories: # want to recurse into it subfolders = [p for p in from_path.listdir() if not p.islink() and p.isdir() and p not in filepaths] for subfolder in subfolders: - for file in self._get_files(subfolder, j): + for file in self._get_files(subfolder, fileclasses=fileclasses, j=j): yield file except (EnvironmentError, fs.InvalidPath): pass @@ -150,22 +148,26 @@ class Directories: except EnvironmentError: return [] - def get_files(self, j=job.nulljob): + def get_files(self, fileclasses=None, j=job.nulljob): """Returns a list of all files that are not excluded. Returned files also have their ``is_ref`` attr set if applicable. """ + if fileclasses is None: + fileclasses = [fs.File] for path in self._dirs: - for file in self._get_files(path, j): + for file in self._get_files(path, fileclasses=fileclasses, j=j): yield file - def get_folders(self, j=job.nulljob): + def get_folders(self, folderclass=None, j=job.nulljob): """Returns a list of all folders that are not excluded. Returned folders also have their ``is_ref`` attr set if applicable. """ + if folderclass is None: + folderclass = fs.Folder for path in self._dirs: - from_folder = self.folderclass(path) + from_folder = folderclass(path) for folder in self._get_folders(from_folder, j): yield folder diff --git a/core_me/app.py b/core_me/app.py index 4ae78f04..09128ea6 100644 --- a/core_me/app.py +++ b/core_me/app.py @@ -21,7 +21,7 @@ class DupeGuru(DupeGuruBase): def __init__(self, view): DupeGuruBase.__init__(self, view) self.scanner = scanner.ScannerME() - self.directories.fileclasses = [fs.MusicFile] + self.fileclasses = [fs.MusicFile] def _get_dupe_sort_key(self, dupe, get_group, key, delta): if key == 'folder_path': diff --git a/core_se/app.py b/core_se/app.py index e90cad60..a764bb52 100644 --- a/core_se/app.py +++ b/core_se/app.py @@ -16,8 +16,8 @@ class DupeGuru(DupeGuruBase): def __init__(self, view): DupeGuruBase.__init__(self, view) - self.directories.fileclasses = [fs.File] - self.directories.folderclass = fs.Folder + self.fileclasses = [fs.File] + self.folderclass = fs.Folder def _prioritization_categories(self): return prioritize.all_categories() diff --git a/qt/pe/app.py b/qt/pe/app.py index 2f02f8f7..cb733c1d 100644 --- a/qt/pe/app.py +++ b/qt/pe/app.py @@ -76,7 +76,7 @@ class DupeGuru(DupeGuruBase): PREFERENCES_DIALOG_CLASS = PreferencesDialog def _setup(self): - self.model.directories.fileclasses = [File] + self.model.fileclasses = [File] DupeGuruBase._setup(self) self.directories_dialog.menuFile.insertAction( self.directories_dialog.actionLoadResults, self.resultWindow.actionClearPictureCache