Skip to content

πŸš€ v0.9.7 Beta β€” The "Thumbnail" Update

Pre-release
Pre-release

Choose a tag to compare

@AverageConsumer AverageConsumer released this 22 Feb 21:48
· 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.3 still 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/AnimatedContainer with static Transform.scale/Container; SelectionAwareItem uses ValueNotifier to rebuild only affected cards.
  • Search overlay β€” extracted SearchableScreenMixin and moved SearchOverlay to widgets/ for cross-screen reuse.
  • FocusSyncManager moved to core/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_hash and has_thumbnail columns; 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, and SearchFocusScope use addPostFrameCallback with try/catch, preventing "disposed notifier" crashes on fast screen transitions.
  • Android backup disabled β€” android:allowBackup="false" prevents unintended data restore.
  • Grid navigation guard β€” _GridNavigateAction now checks overlayPriorityProvider in isEnabled.
  • Focus restoration β€” mainFocusRequestProvider now set centrally in ConsoleScreenMixin.initState.

Technical Internal:

  • New dependencies: image: ^4.3.0, crypto: ^3.0.6, package_info_plus, url_launcher, url_launcher_linux.
  • GameItem.hasThumbnail field added; copyWith extended accordingly.
  • adjustColumnCount() helper extracted to ConsoleScreenMixin.
  • Deleted 4 obsolete files: animated_background.dart, radial_glow.dart, folder_analysis_view.dart, search_overlay.dart (game_list copy).