Skip to content

Releases: Percius04/omafiles

v1.2.0

Choose a tag to compare

@Percius04 Percius04 released this 21 Aug 09:38

Omafiles v1.2.0 — Centered Grid/Icon View, Native Duplicate Finder, Git Status Badges, Native Properties & Performance Optimizations.

Grid & List view modes

  • Centered Grid/Icon View (Ctrl+G): Seamlessly switch between the classic list and a centered grid view mode, with smooth 160ms crossfade animation. View preference is saved in ~/.local/state/omafiles/ui-prefs.json.
  • Dynamic Grid Zoom: Ctrl + mouse wheel scales cell, icon, and thumbnail sizes dynamically without extra backend overhead.
  • 2D Grid Navigation & Selection: Full keyboard navigation across columns and rows, plus 2D rectangular marquee selection in grid mode.

Duplicate file finder

  • Native DuplicateFinder: High-performance background duplicate detector using a two-stage fdupes-style pruning pipeline (exact byte size -> 64 KB SHA-256 pre-hash -> full SHA-256 validation).
  • Duplicate Cleanup Dialog: Interactive modal with live progress, "Select all but first per group" (retaining oldest copy by creation/mtime), and direct deletion to trash with full Ctrl+Z Undo support.
  • Menu Integration: Accessible from the command palette (:) and folder context menus ("Find duplicates here...").

Git status integration

  • Asynchronous Git Badges: Non-blocking background detection via git rev-parse and git status --porcelain=v1 -z.
  • File & Directory Badges: Color-coded badges for modified (M, amber), added (A, green), deleted (D, red), conflict (U, red), and untracked (?, muted) files, with aggregate status propagation on folder items in both List and Grid views.

Properties & sidebar polish

  • Native statInfo() & requestDirSize(): Eliminated shell subprocess invocations (stat/du) in the Properties panel in favor of native C++ implementations in FileOperations.
  • Sidebar Disk Usage Bars: Live storage usage bars for mounted drives powered by native LocalMounts (QStorageInfo usedFraction).
  • Sidebar UI Polish: Slightly widened sidebar, improved font sizes and icon hierarchy.

Performance & architectural improvements

  • Instant Startup via Lazy Loading: Deferred instantiation of video/audio playback loaders in PreviewPanel.
  • Burst Coalescing in FolderCountState: 16ms timer debounce for folder item counts, avoiding O(N) cascading binding re-evaluations.
  • Native Mount Enumeration (LocalMounts): Replaced list-mounts.sh shell pipeline with native C++ enumeration and 4-tier device sorting.
  • Bounded Video Thumbnail Pool: 3 concurrent thumbnailer slots to prevent CPU/IO saturation on video-heavy folders.

Bug fixes

  • Search Bar Auto-Collapse: Fixed search bar remaining open when clicking away with an empty search query.
  • Preview Panel Layout Fix: Fixed overlap between "No preview available" status text and the filename heading.
  • Torrent Files: Added dedicated magnet-glyph icon for .torrent files.
  • Background Panel Deduping: Avoided redundant rescans on already current paths.

Regression coverage

  • Headless --selfcheck suite expanded from 146 to 160 automated checks, covering duplicate discovery, cancellation, git status, grid navigation, and performance paths.

Full details in CHANGELOG.md.

v1.1.0

Choose a tag to compare

@Percius04 Percius04 released this 19 Aug 10:47

Undo/redo, transfer queue, bulk rename regex/preview, drag-and-drop coverage, and several new integrations on top of v1.0.1's stability work.

File transfers & archives

  • Transfers queue instead of rejecting. A second copy/move/compress/extract issued while one is already running used to be flatly rejected ("still busy — try again"). It's now queued (FIFO) and starts automatically once its turn comes, shown as a dimmed "Pending" row (with its own Cancel) above the active operation. Quick, effectively-instant actions (rename, chmod, mkdir, trash, restore…) deliberately keep the old reject-on-busy behavior — queueing wouldn't be noticeable there.
  • Compress to .tar.gz and .7z, alongside the existing .zip — plus live progress bars for archive extract/compress (previously only copy/move had one). .zst/.tar.zst and .tbz/.tbz2 are now consistently recognized as browsable/extractable archives.

Bulk rename

  • Regex Find/Replace, applied to the base name before the {name}/{ext}/{n} pattern — supports capture-group backreferences ($1); an invalid regex while typing is treated as a no-op instead of breaking the dialog.
  • Zero-padded sequence numbers: {n:3} → 001, 002… ({n} alone stays unpadded, unchanged).
  • Live preview: every resulting name is shown, row by row, before confirming — driven by the exact same function the real rename uses, so the preview can never diverge from what actually happens.

Preview

  • Inline video/audio playback (Qt Multimedia) in Quick Look — play/pause, auto-stops when you move to another item — instead of a thumbnail/metadata-only view.

Network locations

  • Reactive GVfs mount watcher: a network drive mounted or unmounted from another app is now picked up live, the same gap UDisksWatcher already closed for local devices.
  • Saved connection profiles (URI only, never a password) for one-click reconnecting to previously used servers.

Notifications

  • Migrated from notify-send to real desktop notifications (org.freedesktop.Notifications over D-Bus), plus an Alt+N recent-notifications panel (session-only history) in case you missed one.

Undo / Redo

  • Closed a real, previously-documented gap: undoLast()/redoLast() used to move an entry to the opposite stack (and show "Undoing:"/"Redoing:") as soon as the underlying operation started, not once it had genuinely completed — a redo pressed right after an undo could fire while that undo was still in flight. Now deferred until real completion; regression-tested against the exact race.

Bug fixes

  • A real, empirically-reproduced ~10% flake in the .7z compress/extract selfcheck, root-caused to a guessed fixed-duration settle instead of a deterministic check.
  • main.cpp's import-path priority was backwards: a dev build could silently load the stale installed backend instead of its own.
  • A selfcheck testing its own background-panel refresh logic was polling a bounded (8-entry) LRU cache shared by every background panel in the app — real activity from unrelated tabs could evict its entry within milliseconds under a long test run, a genuine ~15-25% flake unrelated to any real bug. Fixed by observing the panel's own listing state directly instead.
  • Dead code removed (Persistence.saveRecent/saveBulkRenameHistory, TabOps.closeTabAt, FileMeta.parseAudioInfo), a 4×-duplicated busy guard in ActionEngine consolidated, two toLowerCase()-in-comparator hot paths hoisted to match an existing C++-side fix.

Regression coverage

  • The headless --selfcheck suite grew from 92 to 146, adding dedicated coverage for the transfer queue (including cross-kind queueing and mid-queue cancellation), bulk rename's regex/padding/preview, drag-and-drop (move+undo/redo, conflict handling, the self-drop guard), and the undo/redo completion-timing fix.

Full details in CHANGELOG.md.

OmaFiles 1.0.0

Choose a tag to compare

@Percius04 Percius04 released this 17 Aug 15:33
f98839b

A forensic-audit-driven hardening release on top of v0.9.0: a full concurrency/security pass verified with AddressSanitizer, an architectural cleanup pass, a new custom-keybindings system, and a much wider automated regression suite. No new user-facing features beyond custom keybindings and alternating row colors — this release is about correctness and stability on the foundation v0.9.0 already built.

Filesystem operations & concurrency safety

  • Fixed use-after-free bugs in FileOperations, SearchWorker, and ThumbnailProvider, reproduced and verified clean with AddressSanitizer (not just code review).
  • Per-operation cancellation tokens for file operations, so two overlapping copy/move/trash actions can no longer interfere with each other's cancellation state.
  • Fixed a missing build dependency (qt6-webengine, required for PDF support) and a symlink-based vulnerability in archive file opening.

Archive handling

  • Archive browsing extracted into its own component for a cleaner, more maintainable codebase.
  • Archive-open path hardened against the symlink vulnerability above, with new regression tests.

Custom keybindings

  • Every keyboard shortcut (except 5 fixed ones: Ctrl+C/X/V/Z, Ctrl+Tab) can now be remapped via ~/.config/omafiles/keybindings.toml — built for alternative keyboard layouts like Colemak and Dvorak.
  • The in-app help overlay and the README's shortcut table now always match what's actually configured.
  • Conflicting or invalid config entries fall back to their defaults with a clear warning, never an ambiguous binding.

UI

  • Alternating row background colors for file lists (opt-in, doesn't change any existing behavior by default).

Bug fixes

  • Bulk rename could produce an invalid empty filename from certain patterns; now rejected upfront with a clear message.
  • A misleading error message ("Couldn't restore from trash") was shown for several unrelated failures; now reports an accurate message.
  • The "set as default file manager" self-registration had been silently broken for several days due to an internal path bug — found and fixed.

Regression coverage

  • The automated test suite grew from 85 to 124 checks, covering archive browsing, alternating rows, custom keybindings, bulk rename, permission changes with undo, and a full compress/extract round-trip, among others.

Packaging

  • zip and unzip added as required dependencies for the Arch package (needed by Compress/Extract, with no fallback).
  • Packaging verified end to end: built and installed exactly as the Arch package would, then the installed binary itself was tested against the full suite.

Full changelog: see CHANGELOG.md in this release for the complete entry.

OmaFiles v0.9.0-rc1 is now available

Pre-release

Choose a tag to compare

@Percius04 Percius04 released this 15 Aug 00:51

This is the first public release candidate of OmaFiles v0.9.0.

RC1 focuses on performance, stability, and native Linux integration after a major architectural cleanup.

What's new

  • Native C++ audio/video metadata extraction (no ffprobe subprocesses)
  • Native multithreaded content search (content: queries)
  • Native filesystem watching (legacy inotifywait fallback removed)
  • Native trash emptying and restore pipeline
  • Fixed Undo/Redo across symlinked directories and multiple mounted drives
  • Automated performance regression gate
  • Expanded self-check suite to 82 automated tests

What I'm looking for

I'm mainly looking for testers on Arch Linux, CachyOS, Hyprland, KDE Plasma, GNOME, and Sway.

Please test:

  • previews (images, PDFs, audio, video, code)
  • content: search
  • Undo/Redo
  • external drives
  • network locations
  • desktop and portal integration

Bug reports and feedback are greatly appreciated before the stable v0.9.0 release.

Thanks to everyone helping test RC1.