From 21ad04f478d6c9ef4f7aaf579a7482650f992ffc Mon Sep 17 00:00:00 2001 From: xenofem Date: Mon, 1 Apr 2024 22:27:28 -0400 Subject: [PATCH] detect when directory names are just image resolutions --- dlibrary/dlibrary.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/dlibrary/dlibrary.py b/dlibrary/dlibrary.py index e6dd1f5..08288a1 100755 --- a/dlibrary/dlibrary.py +++ b/dlibrary/dlibrary.py @@ -42,6 +42,7 @@ IMAGE_QUALITY_REGEXES = [ { 'better': NO_TONE_REGEX, 'worse': TONE_REGEX }, { 'better': COLOR_REGEX, 'worse': MONOCHROME_REGEX }, ] +IMAGE_RESOLUTION_REGEX = re.compile('^(?P[0-9]+)x(?P[0-9]+)$') LANGUAGE_REGEXES = { 'en_US': re.compile('english|英語', re.I), @@ -442,21 +443,24 @@ class Collator: return select_language dirs = [src for src in srcs if src.is_dir()] - if len(dirs) == 2: + non_dirs = [src for src in srcs if not src.is_dir()] + if len(dirs) == 2 and len(descendant_files_ignore(dirs[0], self.exclude)) == len(descendant_files_ignore(dirs[1], self.exclude)): + resolution_matches = [IMAGE_RESOLUTION_REGEX.match(nname(src)) for src in dirs] + if all(resolution_matches): + pairs = [(int(m.group('x')), int(m.group('y'))) for m in resolution_matches] + for i in range(2): + if pairs[i][0] > pairs[1-i][0] and pairs[i][1] > pairs[1-i][1]: + return self.collate_from_paths([dirs[i]] + non_dirs) for quality in IMAGE_QUALITY_REGEXES: def a_not_b(a, b, src): if a in quality: return quality[a].search(nname(src)) else: return not quality[b].search(nname(src)) - better_srcs = [src for src in dirs if a_not_b('better', 'worse', src)] - worse_srcs = [src for src in dirs if a_not_b('worse', 'better', src)] - if len(better_srcs) == 1 and len(worse_srcs) == 1 and better_srcs[0] != worse_srcs[0]: - better = better_srcs[0] - worse = worse_srcs[0] - if len(descendant_files_ignore(better, self.exclude)) == len(descendant_files_ignore(worse, self.exclude)): - non_dirs = [src for src in srcs if not src.is_dir()] - return self.collate_from_paths([better] + non_dirs) + better_dirs = [src for src in dirs if a_not_b('better', 'worse', src)] + worse_dirs = [src for src in dirs if a_not_b('worse', 'better', src)] + if len(better_dirs) == 1 and len(worse_dirs) == 1 and better_dirs[0] != worse_dirs[0]: + return self.collate_from_paths(better_dirs + non_dirs) images_vs_pdf = self.try_collate_images_vs_pdf(srcs) if images_vs_pdf is not False: