Skip to content

Release of the v3.4.2

Choose a tag to compare

@FreakySneaky787 FreakySneaky787 released this 06 Oct 08:09
· 13 commits to main since this release

What's New in v3.4.2

Safety & Reliability Release

v3.4.2 is the result of a full code review of v3.4.1. The UI looks the same — this release closes every bug found in that review, several of which could move the wrong files or lose undo records. Updating is recommended for everyone.

Data safety

  • Closing the app during a task lost the undo record — the worker thread was killed mid-run and the history was only written at the end. Closing now waits until the running task has finished.
  • Crash or power cut left no undo record — the history (and the staging manifest) is now written every 2 seconds while files are moving, and every settings, rules, history and manifest file is written atomically (never half-written).
  • Undo threw away files it could not restore — a run was marked "undone" even when some files failed (e.g. locked). Failed files now stay in the history entry, so you can fix the cause and undo the same run again.
  • A briefly locked rules.json deleted your rules — any read error (sync client, virus scanner) was treated like a corrupt file and the rules were moved away. Read errors now stop the scan with a message instead; only real JSON corruption is backed up, to rules_corrupt_<time>.json, without overwriting older backups.
  • The app could organise its own data — the settings, history and staging folders are now protected like the program folder.

Never move what shouldn't be moved

  • System files were moved on Windows — desktop.ini, Thumbs.db and files with the Windows System attribute are never touched now. "Include hidden files" also respects the Windows Hidden attribute, not only dot-files.
  • Running downloads could be moved — .crdownload, .part, .tmp and similar files, and Office lock files (~$…), are left alone.
  • Git repositories inside a recursive scan were taken apart — sub-folders that are Git repositories are now skipped as a whole.
  • Warning for unusual folders — scanning a drive root, your home folder, a system/program folder or a Git repository asks for confirmation first. Scheduled runs skip such folders unless you confirmed them in the current session.
  • Windows junctions were followed — they are now treated like symlinks and never followed, so files are not found twice.

Concurrency fixes

  • Two tasks could run at once — keyboard shortcuts and several buttons (Undo, History, Commit, Revert, Organize, Trash) still worked while another task was moving files. Everything is now blocked while a task runs or a dialog is open.
  • Scheduled run could overrun a confirmation dialog — a run that comes due while a dialog or another task is open now waits until it is finished. Organize also re-checks after confirming that the scan was not replaced in the meantime.
  • Scheduler could end up with two timers — and after standby it fired once per missed slot. Now there is always exactly one timer, and missed slots are skipped.

Scanning fixes

  • Folders named like categories were skipped everywhere — a folder such as Projects/Images, Code/Python or one called proc/sys was silently ignored in recursive scans. Category folders are now only skipped directly inside the scanned folder.
  • Organise after "Move to Trash" tried to move trashed files — trashed files are now removed from the preview and the plan; remaining duplicate groups stay visible.
  • Empty files were reported as duplicates — they are ignored now (trashing empty __init__.py files would break projects).
  • Large scans froze the window — progress updates are throttled and event handling has a time budget.
  • Duplicate check had no time limit — it now stops after a generous limit and says so in the log; files over 500 MB that were skipped are reported too.

Rules

  • Multi-part extensions never matched — an extension rule like tar.gz now works.
  • Invalid target folders failed file by file — names with < > : " | ? *, reserved names like CON/NUL and trailing dots or spaces are rejected in the dialog and ignored with a warning during scans.
  • inf/nan are no longer accepted as size or age values.

Usability

  • Number fields are clamped to their allowed range; an empty field falls back to the last valid value; −/+ snap to sensible steps (1 → 15 → 30 …); the mouse wheel only changes a focused field; leaving the schedule field no longer restarts the timer.
  • History shows local time instead of UTC.
  • Undo removes empty category folders that the undone run had created.
  • Drag-and-drop actually works when tkinterdnd2 is installed; without it, the tooltip no longer promises it.
  • Window icon is drawn automatically when icon.png is missing.
  • Damaged settings ("max_depth": "x", "dark_mode": "false") no longer crash the start — wrong values fall back to defaults.
  • Fewer log lines: depth limits and skipped repositories are summarised; [SCHEDULE ERROR] lines are coloured.

Linux

  • Dialogs no longer crash with "grab failed: window not viewable" on slow X11 setups.
  • The built-in Trash fallback now follows the freedesktop.org spec (percent-encoded paths, info file created first), so file managers can restore files with spaces or umlauts.

No new dependencies — still Python standard library only.