Repository navigation
Release of the v3.3.1
The biggest new feature since the rules engine. The Duplicates tab now lets you act on duplicates — not just view them.
After a scan, select any duplicate file rows using click, Ctrl+click, or Shift+click. Then click 🗑 Move Selected to Trash to send them to the system Trash or Recycle Bin.
How it works:
- Multi-select is fully supported — click, Ctrl+click, Shift+click
- A live label shows how many files are selected
- The Move to Trash button is disabled until you make a valid selection
- A confirmation dialog shows exactly which files will be moved before anything happens
- Every trashed file is logged in the Log tab
Safety rules — always enforced:
- At least one file per duplicate group must remain — you can never trash an entire group accidentally. The button stays disabled and shows
"keep at least 1 per group"if the selection is invalid. - Files go to the system Trash / Recycle Bin only — nothing is ever permanently deleted
- App files are excluded from duplicate results entirely
Cross-platform implementation — no external packages:
Platform | Method -- | -- Windows | ctypes → SHFileOperation with FOF_ALLOWUNDO (native Recycle Bin) Linux | gio trash → trash-put → manual XDG Trash fallbackNo send2trash or any other pip dependency required.
save_rules() silently swallowed write errors — rules.py · Low save_rules() caught all exceptions with pass, making a failed rules write invisible. Fixed: now returns bool and the caller logs a warning in the Log tab if saving fails.
_adjust_colour() only lightened colours — main.py · Low The hover colour helper always added to RGB channels, making colours lighter regardless of the theme. In light mode the hover was barely visible. Fixed: the function now supports negative amounts to darken, and the light theme hover correctly darkens the accent.