DEV Community

Lumibear Studio
Lumibear Studio

Posted on

SPAN Finder 1.2.2

Hi, I'm the developer behind SPAN Finder at LumiBear Studio.

After shipping v1.1.2.0 with "30 essential features for Explorer replacement," I spent the past week analyzing user feedback and crash logs. Quite a lot happened — here's a
recap.


New Features

Workspaces — Save & Restore Tab Layouts

If you use a file explorer seriously, you probably have a "work" set of tabs and a "personal" set. Opening them every time is tedious. Now you can save your current tab
configuration with a name and restore it in one click.

  • Ctrl+Shift+S — Save current tabs as a workspace
  • Ctrl+Shift+W — Open the workspace palette
  • Also accessible from the 📚 button in the sidebar
  • Remembers paths, view modes, and tab count

Switch between "Development," "Photo Editing," and "Documents" contexts instantly. Personally my favorite addition.

File Hash (SHA256)

Enable "File hash" in Settings > Advanced, and the preview panel shows the SHA256 hash at the bottom with a copy button. Useful for verifying downloads. Streams in 64KB chunks
so even large files don't freeze the UI. Default OFF — most people won't need it.

Virtual File Paste — RDP & Outlook

A GitHub issue reported that files copied from Remote Desktop sessions couldn't be pasted. Turns out RDP uses a virtual file format (FileGroupDescriptorW + FileContents) instead
of regular CF_HDROP. We added OLE clipboard parsing, so now you can Ctrl+V files from RDP sessions and even Outlook email attachments.

Syntax Highlighting in Preview

Code files now render with syntax highlighting in the preview panel, powered by ColorCode.WinUI. Supports 30+ programming languages.

In-App Donations

Coffee / Hamburger / Steak donation tiers via Microsoft Store, localized in 9 languages.


Crash Hunting

We use Sentry for crash reporting and take every report seriously. Here's what we caught and fixed this week:

COM Context Menu Race Condition

A user in Japan triggered repeated InvalidComObjectException crashes. Root cause: rapid right-clicking caused the previous menu's COM object to be released while a command was
still executing. Fixed with a lock on the Session class and [ThreadStatic] for multi-window safety.

Thumbnail Crash (0x80070057)

Fast scrolling caused ArgumentException with empty stack traces — a WinUI XAML rendering pipeline issue. The MemoryStream backing BitmapImage.SetSourceAsync was being disposed
before the rendering pipeline finished with it. Fixed stream lifetime management and added CancellationToken so recycled containers properly cancel in-flight thumbnail loads.

Async Safety Audit

We ran an agent team across the entire codebase to review exception handling. Found 15 DispatcherQueue.TryEnqueue calls where internal exceptions would bypass the global handler
and crash the app. Converted all to SafeEnqueue. Added missing try-catch to async void event handlers. Unified COM cleanup with try-finally across all services.

Theme Not Updating

A GitHub issue reported the Shortcuts tab staying in dark colors after switching to light theme. GetThemeBrush() was resolving against Application.RequestedTheme (system theme)
instead of the window's ActualTheme (user-selected theme). One-line root cause, but finding it required tracing through the entire theme application sequence.

Default File Manager Path Bug

After registering SPAN as the default file manager, clicking the Explorer icon in the taskbar navigated to an MSIX package folder instead of Home. Now filters out WindowsApps
paths from startup arguments.


Transparency

SPAN Finder uses https://sentry.io for crash reporting only.


By the Numbers

  • 5 new features (Workspaces, File Hash, Virtual File Paste, Syntax Highlighting, In-App Donations)
  • 8 crash fixes (COM race condition, thumbnail, PDF preview, MediaSource leak, and more)
  • 20+ sites hardened for async safety
  • 3 GitHub issues resolved
  • +2,500 lines changed across 30+ files
  • 9 languages × 3 README updates

If any of this sounds interesting, come take a look.

Top comments (0)