feat: File Duplicate Bulk Actions (fixes #92) #102

Merged
ValleyGeek merged 3 commits from 0.1.34/issue-92-bulk-dupe-delete into main 2026-06-19 07:29:12 +00:00
Member

Summary

  • Adds pick_keep_path_by_strategy / bulk_keep_delete_paths to core/dupe_detector.py, implementing the six keep rules from #92 (Newest Files default, Oldest Files, Shortest/Longest File Name, Shortest/Longest Path).
  • Adds a File Duplicate Bulk Actions button to the bottom of the Duplicates toolbox that opens BulkDupeActionsDialog (radio list + Cancel/Delete), per the proposed UI in the issue.
  • On Delete, applies the chosen strategy across every F-DUPE_# group at once, staging losers with the existing non-destructive DELETE tag (same mechanism as Keep Best) as a single undoable batch.
  • Version bump to 0.1.35 (patch), CHANGELOG entry, and USER_GUIDE.md update for the new button.

Threading notes: all new code (dialog, handler, core helpers) runs on the main thread / is pure-data; no worker or signal changes.

Fixes #92.

Test plan

  • ruff check . && ruff format --check .
  • pytest — 354 passed, 1 skipped (one unrelated transient segfault reproduced and cleared on rerun — not tied to this branch's changes, confirmed by isolating tests/test_pr13_config.py)
  • ./scripts/check-version-bump.sh — VERSION updated 0.1.34 → 0.1.35
  • Fresh editable install + scripts/get-version.py --canonical confirms PEP 440 normalization
  • Manual click-through of the new dialog in a running app (not done in this session)
## Summary - Adds `pick_keep_path_by_strategy` / `bulk_keep_delete_paths` to `core/dupe_detector.py`, implementing the six keep rules from #92 (Newest Files default, Oldest Files, Shortest/Longest File Name, Shortest/Longest Path). - Adds a **File Duplicate Bulk Actions** button to the bottom of the Duplicates toolbox that opens `BulkDupeActionsDialog` (radio list + Cancel/Delete), per the proposed UI in the issue. - On Delete, applies the chosen strategy across every `F-DUPE_#` group at once, staging losers with the existing non-destructive `DELETE` tag (same mechanism as Keep Best) as a single undoable batch. - Version bump to `0.1.35` (patch), CHANGELOG entry, and USER_GUIDE.md update for the new button. Threading notes: all new code (dialog, handler, core helpers) runs on the main thread / is pure-data; no worker or signal changes. Fixes #92. ## Test plan - [x] `ruff check . && ruff format --check .` - [x] `pytest` — 354 passed, 1 skipped (one unrelated transient segfault reproduced and cleared on rerun — not tied to this branch's changes, confirmed by isolating `tests/test_pr13_config.py`) - [x] `./scripts/check-version-bump.sh` — VERSION updated 0.1.34 → 0.1.35 - [x] Fresh editable install + `scripts/get-version.py --canonical` confirms PEP 440 normalization - [ ] Manual click-through of the new dialog in a running app (not done in this session)
Adds pick_keep_path_by_strategy/bulk_keep_delete_paths to core/dupe_detector.py
covering the six keep rules from issue #92 (newest/oldest file, shortest/longest
filename, shortest/longest path), with unit test coverage.

Threading notes: pure functions on plain dicts, no Qt imports, no worker changes.
feat(ui): add File Duplicate Bulk Actions dialog and button
All checks were successful
CI / lint (push) Successful in 6s
Linux AppImage / build-release (push) Successful in 9m17s
Windows Release / build-release (push) Successful in 9m33s
CI / build-release (push) Successful in 10m9s
CI / release-linux (push) Successful in 0s
CI / test (push) Successful in 2m8s
CI / build-release-1 (push) Successful in 13s
CI / release-windows (push) Successful in 0s
47b69fe88b
Adds a "File Duplicate Bulk Actions" button to the bottom of the Duplicates
toolbox (DupeContainer) that opens a dialog to pick one of the six keep
strategies and apply it across every F-DUPE_# group at once, staging losers
with the existing non-destructive DELETE tag (same mechanism as Keep Best).

Threading notes: dialog and handler run entirely on the main thread; no new
worker code, no QWidget/model access from off-thread code.
docs: PR-prep for issue 92 — bump to 0.1.35
All checks were successful
CI / lint (push) Successful in 7s
CI / test (push) Successful in 2m14s
CI / lint (pull_request) Successful in 12s
CI / test (pull_request) Successful in 2m18s
Windows Release / build-release (push) Successful in 9m40s
Linux AppImage / build-release (push) Successful in 9m42s
CI / build-release-1 (push) Successful in 13s
CI / release-windows (push) Successful in 0s
CI / build-release (push) Successful in 13m45s
CI / release-linux (push) Successful in 0s
CI / build-release (pull_request) Successful in 13m39s
CI / release-linux (pull_request) Successful in 0s
CI / build-release-1 (pull_request) Successful in 8m37s
CI / release-windows (pull_request) Successful in 0s
0348a538c6
Releases File Duplicate Bulk Actions: bump VERSION to the next canonical
release, add the dated CHANGELOG entry, and document the new toolbox button
in the bundled USER_GUIDE.md.
ValleyGeek deleted branch 0.1.34/issue-92-bulk-dupe-delete 2026-06-19 07:29:13 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ai-collab/bulk-image-organizer!102
No description provided.