π v0.9.7 Beta β The "Thumbnail" Update
Pre-release
Pre-release
·
100 commits
to main
since this release
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).