mirror of
https://github.com/arsenetar/dupeguru.git
synced 2025-03-10 05:34:36 +00:00
refactoring: move fileclasses and folderclass options in app class
Previously, it was in `Directory`. This will make our job easier for an upcoming SE/ME/PE merge.
This commit is contained in:
parent
abd2f3a9d6
commit
0056f696df
@ -167,6 +167,8 @@ class DupeGuru(Broadcaster):
|
|||||||
if not op.exists(self.appdata):
|
if not op.exists(self.appdata):
|
||||||
os.makedirs(self.appdata)
|
os.makedirs(self.appdata)
|
||||||
self.discarded_file_count = 0
|
self.discarded_file_count = 0
|
||||||
|
self.fileclasses = [fs.File]
|
||||||
|
self.folderclass = fs.Folder
|
||||||
self.directories = directories.Directories()
|
self.directories = directories.Directories()
|
||||||
self.results = results.Results(self)
|
self.results = results.Results(self)
|
||||||
self.ignore_list = IgnoreList()
|
self.ignore_list = IgnoreList()
|
||||||
@ -257,7 +259,7 @@ class DupeGuru(Broadcaster):
|
|||||||
|
|
||||||
def _create_file(self, path):
|
def _create_file(self, path):
|
||||||
# We add fs.Folder to fileclasses in case the file we're loading contains folder paths.
|
# 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):
|
def _get_file(self, str_path):
|
||||||
path = Path(str_path)
|
path = Path(str_path)
|
||||||
@ -749,9 +751,9 @@ class DupeGuru(Broadcaster):
|
|||||||
def do(j):
|
def do(j):
|
||||||
j.set_progress(0, tr("Collecting files to scan"))
|
j.set_progress(0, tr("Collecting files to scan"))
|
||||||
if scanner.scan_type == ScanType.Folders:
|
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:
|
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']:
|
if self.options['ignore_hardlink_matches']:
|
||||||
files = self._remove_hardlink_dupes(files)
|
files = self._remove_hardlink_dupes(files)
|
||||||
logging.info('Scanning %d files' % len(files))
|
logging.info('Scanning %d files' % len(files))
|
||||||
|
@ -49,12 +49,10 @@ class Directories:
|
|||||||
in :mod:`core.fs`) that have to be scanned according to the chosen folders/states.
|
in :mod:`core.fs`) that have to be scanned according to the chosen folders/states.
|
||||||
"""
|
"""
|
||||||
#---Override
|
#---Override
|
||||||
def __init__(self, fileclasses=[fs.File]):
|
def __init__(self):
|
||||||
self._dirs = []
|
self._dirs = []
|
||||||
# {path: state}
|
# {path: state}
|
||||||
self.states = {}
|
self.states = {}
|
||||||
self.fileclasses = fileclasses
|
|
||||||
self.folderclass = fs.Folder
|
|
||||||
|
|
||||||
def __contains__(self, path):
|
def __contains__(self, path):
|
||||||
for p in self._dirs:
|
for p in self._dirs:
|
||||||
@ -77,7 +75,7 @@ class Directories:
|
|||||||
if path.name.startswith('.'): # hidden
|
if path.name.startswith('.'): # hidden
|
||||||
return DirectoryState.Excluded
|
return DirectoryState.Excluded
|
||||||
|
|
||||||
def _get_files(self, from_path, j):
|
def _get_files(self, from_path, fileclasses, j):
|
||||||
j.check_if_cancelled()
|
j.check_if_cancelled()
|
||||||
state = self.get_state(from_path)
|
state = self.get_state(from_path)
|
||||||
if state == DirectoryState.Excluded:
|
if state == DirectoryState.Excluded:
|
||||||
@ -89,7 +87,7 @@ class Directories:
|
|||||||
try:
|
try:
|
||||||
filepaths = set()
|
filepaths = set()
|
||||||
if state != DirectoryState.Excluded:
|
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))
|
logging.debug("Collected %d files in folder %s", len(found_files), str(from_path))
|
||||||
for file in found_files:
|
for file in found_files:
|
||||||
file.is_ref = state == DirectoryState.Reference
|
file.is_ref = state == DirectoryState.Reference
|
||||||
@ -99,7 +97,7 @@ class Directories:
|
|||||||
# want to recurse into it
|
# 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]
|
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 subfolder in subfolders:
|
||||||
for file in self._get_files(subfolder, j):
|
for file in self._get_files(subfolder, fileclasses=fileclasses, j=j):
|
||||||
yield file
|
yield file
|
||||||
except (EnvironmentError, fs.InvalidPath):
|
except (EnvironmentError, fs.InvalidPath):
|
||||||
pass
|
pass
|
||||||
@ -150,22 +148,26 @@ class Directories:
|
|||||||
except EnvironmentError:
|
except EnvironmentError:
|
||||||
return []
|
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.
|
"""Returns a list of all files that are not excluded.
|
||||||
|
|
||||||
Returned files also have their ``is_ref`` attr set if applicable.
|
Returned files also have their ``is_ref`` attr set if applicable.
|
||||||
"""
|
"""
|
||||||
|
if fileclasses is None:
|
||||||
|
fileclasses = [fs.File]
|
||||||
for path in self._dirs:
|
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
|
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.
|
"""Returns a list of all folders that are not excluded.
|
||||||
|
|
||||||
Returned folders also have their ``is_ref`` attr set if applicable.
|
Returned folders also have their ``is_ref`` attr set if applicable.
|
||||||
"""
|
"""
|
||||||
|
if folderclass is None:
|
||||||
|
folderclass = fs.Folder
|
||||||
for path in self._dirs:
|
for path in self._dirs:
|
||||||
from_folder = self.folderclass(path)
|
from_folder = folderclass(path)
|
||||||
for folder in self._get_folders(from_folder, j):
|
for folder in self._get_folders(from_folder, j):
|
||||||
yield folder
|
yield folder
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ class DupeGuru(DupeGuruBase):
|
|||||||
def __init__(self, view):
|
def __init__(self, view):
|
||||||
DupeGuruBase.__init__(self, view)
|
DupeGuruBase.__init__(self, view)
|
||||||
self.scanner = scanner.ScannerME()
|
self.scanner = scanner.ScannerME()
|
||||||
self.directories.fileclasses = [fs.MusicFile]
|
self.fileclasses = [fs.MusicFile]
|
||||||
|
|
||||||
def _get_dupe_sort_key(self, dupe, get_group, key, delta):
|
def _get_dupe_sort_key(self, dupe, get_group, key, delta):
|
||||||
if key == 'folder_path':
|
if key == 'folder_path':
|
||||||
|
@ -16,8 +16,8 @@ class DupeGuru(DupeGuruBase):
|
|||||||
|
|
||||||
def __init__(self, view):
|
def __init__(self, view):
|
||||||
DupeGuruBase.__init__(self, view)
|
DupeGuruBase.__init__(self, view)
|
||||||
self.directories.fileclasses = [fs.File]
|
self.fileclasses = [fs.File]
|
||||||
self.directories.folderclass = fs.Folder
|
self.folderclass = fs.Folder
|
||||||
|
|
||||||
def _prioritization_categories(self):
|
def _prioritization_categories(self):
|
||||||
return prioritize.all_categories()
|
return prioritize.all_categories()
|
||||||
|
@ -76,7 +76,7 @@ class DupeGuru(DupeGuruBase):
|
|||||||
PREFERENCES_DIALOG_CLASS = PreferencesDialog
|
PREFERENCES_DIALOG_CLASS = PreferencesDialog
|
||||||
|
|
||||||
def _setup(self):
|
def _setup(self):
|
||||||
self.model.directories.fileclasses = [File]
|
self.model.fileclasses = [File]
|
||||||
DupeGuruBase._setup(self)
|
DupeGuruBase._setup(self)
|
||||||
self.directories_dialog.menuFile.insertAction(
|
self.directories_dialog.menuFile.insertAction(
|
||||||
self.directories_dialog.actionLoadResults, self.resultWindow.actionClearPictureCache
|
self.directories_dialog.actionLoadResults, self.resultWindow.actionClearPictureCache
|
||||||
|
Loading…
x
Reference in New Issue
Block a user