From e305ea098c97bdbe2f2839730a78fa150d2a597c Mon Sep 17 00:00:00 2001 From: holden093 Date: Fri, 11 Jul 2025 02:20:52 +0200 Subject: [PATCH] Consolidated in media class --- main.py | 38 ++++++++++---------------------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/main.py b/main.py index 4baa25c..0048f61 100755 --- a/main.py +++ b/main.py @@ -1,12 +1,15 @@ import os, re, shutil, calendar, datetime import exifread -class Photos(): - def __init__(self, path, name): +class Media(): + def __init__(self, path, name, kind): self.path = path self.name = name + self.kind = kind def order_by_tag(self, export_dir): + if self.kind != 'photo': + raise NotImplementedError("order_by_tag is only for photos.") with open(self.path, 'rb') as ph: tags = exifread.process_file(ph) if 'Image DateTime' in tags: @@ -42,26 +45,6 @@ class Photos(): shutil.move(self.path, os.path.join(month_dir, self.name)) os.utime(os.path.join(month_dir, self.name), (date_obj.timestamp(), date_obj.timestamp())) -class Videos(): - def __init__(self, path, name): - self.path = path - self.name = name - - def order_by_match(self, matches, export_dir): - m = next((re.search(pattern, self.path) for pattern in matches if re.search(pattern, self.path)), None) - if not m: - return - year = int(m.group(1)) - if year < 2000 or year > 2030: - return - month = int(m.group(2)) - day = int(m.group(3)) - date_obj = datetime.datetime(year, month, day) - month_dir = os.path.join(export_dir, str(year), calendar.month_name[month]) - os.makedirs(month_dir, exist_ok=True) - shutil.move(self.path, os.path.join(month_dir, self.name)) - os.utime(os.path.join(month_dir, self.name), (date_obj.timestamp(), date_obj.timestamp())) - root_dir = './' export_dir = './Export/' @@ -74,15 +57,14 @@ for root, dirs, files in os.walk(root_dir): path = os.path.join(root, file) ext = os.path.splitext(path)[1].lower() if ext in ('.jpg', '.jpeg', '.png', '.webp', '.heic'): - media.append(Photos(path, file)) + media.append(Media(path, file, 'photo')) elif ext in ('.mov', '.mp4', '.3gp'): - media.append(Videos(path, file)) + media.append(Media(path, file, 'video')) for element in media: try: - if hasattr(element, 'order_by_tag'): - element.order_by_tag(export_dir) - else: - element.order_by_match(matches, export_dir) + element.order_by_tag(export_dir) + except (ValueError, NotImplementedError): + element.order_by_match(matches, export_dir) except Exception as e: print(f'Error processing {element.name}: {e}')