From be8efea081b4f12c3ec63ca9c7e8a53ab2e2e9f0 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sun, 18 Aug 2013 20:50:31 -0400 Subject: [PATCH] Fixed folder scanning in SE, which was completely broken Oops --- cocoa/inter/app_se.py | 5 ++-- core/directories.py | 3 ++- core/fs.py | 4 +--- core_se/app.py | 1 + core_se/fs.py | 54 +++++++++++++++++++++++++------------------ 5 files changed, 37 insertions(+), 30 deletions(-) diff --git a/cocoa/inter/app_se.py b/cocoa/inter/app_se.py index 4c97d58f..1e13ed85 100644 --- a/cocoa/inter/app_se.py +++ b/cocoa/inter/app_se.py @@ -14,10 +14,9 @@ from hscommon.path import Path from cocoa import proxy from core.scanner import ScanType -from core import fs from core.directories import Directories as DirectoriesBase, DirectoryState from core_se.app import DupeGuru as DupeGuruBase -from core_se.fs import File +from core_se import fs from .app import PyDupeGuruBase def is_bundle(str_path): @@ -36,7 +35,7 @@ class Directories(DirectoriesBase): ROOT_PATH_TO_EXCLUDE = list(map(Path, ['/Library', '/Volumes', '/System', '/bin', '/sbin', '/opt', '/private', '/dev'])) HOME_PATH_TO_EXCLUDE = [Path('Library')] def __init__(self): - DirectoriesBase.__init__(self, fileclasses=[Bundle, File]) + DirectoriesBase.__init__(self, fileclasses=[Bundle, fs.File]) def _default_state_for_path(self, path): result = DirectoriesBase._default_state_for_path(self, path) diff --git a/core/directories.py b/core/directories.py index 46ace3f8..fa605dec 100644 --- a/core/directories.py +++ b/core/directories.py @@ -53,6 +53,7 @@ class Directories: self._dirs = [] self.states = {} self.fileclasses = fileclasses + self.folderclass = fs.Folder def __contains__(self, path): for p in self._dirs: @@ -163,7 +164,7 @@ class Directories: Returned folders also have their ``is_ref`` attr set if applicable. """ for path in self._dirs: - from_folder = fs.Folder(path) + from_folder = self.folderclass(path) for folder in self._get_folders(from_folder, j): yield folder diff --git a/core/fs.py b/core/fs.py index e18d2220..a0330e32 100644 --- a/core/fs.py +++ b/core/fs.py @@ -221,7 +221,7 @@ class Folder(File): if self._subfolders is None: subpaths = [self.path + name for name in self.path.listdir()] subfolders = [p for p in subpaths if not p.islink() and p.isdir()] - self._subfolders = [Folder(p) for p in subfolders] + self._subfolders = [self.__class__(p) for p in subfolders] return self._subfolders @classmethod @@ -244,8 +244,6 @@ def get_file(path, fileclasses=[File]): def get_files(path, fileclasses=[File]): """Returns a list of :class:`File` for each file contained in ``path``. - Subfolders are recursively scanned. - :param Path path: path to scan :param fileclasses: List of candidate :class:`File` classes """ diff --git a/core_se/app.py b/core_se/app.py index 880a4b45..42d80d9b 100644 --- a/core_se/app.py +++ b/core_se/app.py @@ -17,6 +17,7 @@ class DupeGuru(DupeGuruBase): def __init__(self, view, appdata): DupeGuruBase.__init__(self, view, appdata) self.directories.fileclasses = [fs.File] + self.directories.folderclass = fs.Folder def _prioritization_categories(self): return prioritize.all_categories() diff --git a/core_se/fs.py b/core_se/fs.py index 78d0946b..6e867a4b 100644 --- a/core_se/fs.py +++ b/core_se/fs.py @@ -11,29 +11,37 @@ from hscommon.util import format_size from core import fs from core.app import format_timestamp, format_perc, format_words, format_dupe_count +def get_display_info(dupe, group, delta): + size = dupe.size + mtime = dupe.mtime + m = group.get_match_of(dupe) + if m: + percentage = m.percentage + dupe_count = 0 + if delta: + r = group.ref + size -= r.size + mtime -= r.mtime + else: + percentage = group.percentage + dupe_count = len(group.dupes) + return { + 'name': dupe.name, + 'folder_path': str(dupe.folder_path), + 'size': format_size(size, 0, 1, False), + 'extension': dupe.extension, + 'mtime': format_timestamp(mtime, delta and m), + 'percentage': format_perc(percentage), + 'words': format_words(dupe.words) if hasattr(dupe, 'words') else '', + 'dupe_count': format_dupe_count(dupe_count), + } + class File(fs.File): def get_display_info(self, group, delta): - size = self.size - mtime = self.mtime - m = group.get_match_of(self) - if m: - percentage = m.percentage - dupe_count = 0 - if delta: - r = group.ref - size -= r.size - mtime -= r.mtime - else: - percentage = group.percentage - dupe_count = len(group.dupes) - return { - 'name': self.name, - 'folder_path': str(self.folder_path), - 'size': format_size(size, 0, 1, False), - 'extension': self.extension, - 'mtime': format_timestamp(mtime, delta and m), - 'percentage': format_perc(percentage), - 'words': format_words(self.words) if hasattr(self, 'words') else '', - 'dupe_count': format_dupe_count(dupe_count), - } + return get_display_info(self, group, delta) + + +class Folder(fs.Folder): + def get_display_info(self, group, delta): + return get_display_info(self, group, delta)