From 99c8d8c07f45fdb1f38b0a8f0663b9251d6906ed Mon Sep 17 00:00:00 2001 From: Sho Date: Sun, 2 Aug 2026 14:11:19 +0900 Subject: [PATCH] fix: eliminate duplicate wallpaper entries using realpath and file signature deduplication engine --- .../services/python/wallpaper_scanner.py | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/quickshell/services/python/wallpaper_scanner.py b/quickshell/services/python/wallpaper_scanner.py index 8d0b367..61e646d 100755 --- a/quickshell/services/python/wallpaper_scanner.py +++ b/quickshell/services/python/wallpaper_scanner.py @@ -11,7 +11,8 @@ def scan_wallpapers(): '/usr/share/backgrounds' ] res = [] - seen = set() + seen_realpaths = set() + seen_file_signatures = set() for base_dir in search_dirs: if not os.path.exists(base_dir): @@ -20,11 +21,34 @@ def scan_wallpapers(): for filename in files: if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.webp', '.svg')): full_path = os.path.join(root, filename) - if full_path in seen: - continue - seen.add(full_path) + real_path = os.path.realpath(full_path) - variant_name = os.path.basename(root) if root != base_dir else os.path.splitext(filename)[0] + if real_path in seen_realpaths: + continue + + try: + file_size = os.path.getsize(full_path) + except Exception: + file_size = 0 + + # Determine parent variant name + folder_name = os.path.basename(root) + if folder_name.lower() in ("contents", "screenshots", "images"): + parent_folder = os.path.basename(os.path.dirname(root)) + variant_name = parent_folder if parent_folder and parent_folder != os.path.basename(base_dir) else os.path.splitext(filename)[0] + elif root != base_dir: + variant_name = folder_name + else: + variant_name = os.path.splitext(filename)[0] + + sig = (variant_name.lower(), filename.lower(), file_size) + + if sig in seen_file_signatures: + continue + + seen_realpaths.add(real_path) + seen_file_signatures.add(sig) + res.append({ 'variant': variant_name, 'name': filename,