Note: This release introduces a persistent thumbnail pipeline for instant cover art, real-time ROM status tracking, and an About section in Settings. Upgrading from
<= 0.9.3still requires a fresh install.
Highlights
- Thumbnail Pipeline — Persistent isolate-based thumbnail generator produces 400px JPEG covers with background migration on startup and proactive preloading during library scans. Game cards display thumbnails instantly with no network round-trip.
- ROM Status Providers — Real-time ROM installation tracking via filesystem watchers and download-completion listeners. No more manual polling — cards update the moment a download finishes or a ROM is deleted.
- Smart Cover Loading — Thumbnail-first display with magic-byte validation, JPEG re-encoding for corrupt cache entries, and scroll-suppressed loading to reduce jank during fast scrolling.
- About Section — New Settings section showing app version, GitHub/Issues links, and an Easter Egg tagline.
Change Log
Added:
- Thumbnail pipeline — persistent isolate-based thumbnail generator (400px JPEG) with background migration and proactive cover preloading during library scans.
- ROM status providers — real-time ROM installation tracking via filesystem watchers and download-completion listeners.
- Installed files provider — central isolate-scanned index of all installed ROM files across every system.
- Cover preload — new Settings entry to batch-generate thumbnails for all games.
- About section — app version, GitHub/Issues links, and Easter Egg tagline in Settings.
- Zip extraction limit — increased from 2 GB to 8 GB.
Improved:
- Smart cover loading — thumbnail-first display with magic-byte validation, JPEG re-encoding for corrupt entries, and scroll-suppressed loading.
- Controller button styling — pill-shaped shoulder/trigger buttons, per-layout face button colors (Xbox green/red/blue/yellow, PlayStation palette), and shape painters for Nintendo +/− buttons.
- Quick menu hints — face button hints now show layout-correct color palettes.
- Game card performance — replaced
AnimatedScale/AnimatedContainerwith staticTransform.scale/Container;SelectionAwareItemusesValueNotifierto rebuild only affected cards. - Search overlay — extracted
SearchableScreenMixinand movedSearchOverlaytowidgets/for cross-screen reuse. FocusSyncManagermoved tocore/input/for use by Library and Scan screens.- Library screen — now uses
SearchableScreenMixin,SelectionAwareItem,FocusSyncManager, and scroll suppression. - Image cache rate limiter — cancellable pending requests, increased concurrent fetch limit (50), and host-level rate-limit detection.
- Database schema v4 — adds
thumb_hashandhas_thumbnailcolumns; thumbnail flags preserved across refreshes. OverlayGuardedAction— generic reusable guarded action replaces per-screen private action classes.
Bug Fixes:
- Zip bomb protection — extracted archive size capped at 8 GB; extraction aborts with clear error if limit exceeded.
- Web provider path traversal — directory listing parser rejects absolute URLs and
../href values. - Overlay priority teardown —
OverlayFocusScope,DialogFocusScope, andSearchFocusScopeuseaddPostFrameCallbackwith try/catch, preventing "disposed notifier" crashes on fast screen transitions. - Android backup disabled —
android:allowBackup="false"prevents unintended data restore. - Grid navigation guard —
_GridNavigateActionnow checksoverlayPriorityProviderinisEnabled. - Focus restoration —
mainFocusRequestProvidernow set centrally inConsoleScreenMixin.initState.
Technical Internal:
- New dependencies:
image: ^4.3.0,crypto: ^3.0.6,package_info_plus,url_launcher,url_launcher_linux. GameItem.hasThumbnailfield added;copyWithextended accordingly.adjustColumnCount()helper extracted toConsoleScreenMixin.- Deleted 4 obsolete files:
animated_background.dart,radial_glow.dart,folder_analysis_view.dart,search_overlay.dart(game_list copy).