v1.11.0
This release adds HowLongToBeat completion-time estimates to the game detail view and hardens Holo card effects for big libraries: a deadlock in the mask cache is fixed, all holo caches are LRU-bounded, and the WebKit teardown is debounced so it no longer freezes the grid mid-hover. Scrolling a 50+ card holo collection is now smooth. The setup wizard gains a live native Holo preview that matches the in-app effect, multi-folder library management with removal reconciliation, and a sharper region selector.
Note: The Holo effects are still in beta testing. They are experimental and may change or be refined in future releases.
Highlights
- HowLongToBeat completion times: The game detail view shows Main, Main + Extra, and Completionist estimates from HowLongToBeat, with automatic matching for titled ROMs and a search sheet for manual selection.
- Holo performance pass: Holo mask decomposition only runs on actual hover, HoloSaliencyService is now protected by a single lock (fixes a scroll-time deadlock), and all holo caches are LRU-bounded.
- Smoother scroll in the holo grid: The library's scroll state only republishes on real change, cards no longer observe the global saliency service, and WebKit teardown is debounced and async so it never interrupts a scroll gesture.
- Setup wizard v2: A live native HoloPreviewCard in the region selector, multi-folder library management with DB reconciliation, bezel moved into Optional Features, and a sharper Zelda OoT-based region selector.
Detailed Changes
- HowLongToBeat integration —
ROMMetadataEntrygains HLTB fields (game ID, matched title, completion time estimates),HLTBWebSearchSheetfor manual selection,HowLongToBeatCardwith auto and manual matching, and integration into the game detail view's overview. - Holo saliency deadlock fix —
HoloSaliencyServicenow uses a singleOSAllocatedUnfairLockfor both entries and LRU order; the previous two-lock design could deadlock during scroll. - Holo LRU caches —
HoloFoilTileCache(32),HoloPatternStore(64/32/32),HoloSaliencyService(100),HoloBumpRenderer(16);DetailBoxArtComponentsquantizes render sizes to 0.5pt buckets to prevent fragmentation. - Holo scroll lag fixes —
LibraryScrollState.isScrollingonly republishes on real change;HoloGameCardViewno longer observesHoloSaliencyService(each card uses local@Statefor its own progress); mask decomposition is gated on a hover-trigger so it does not run for all visible cards. - HoloWebCardView —
WKWebViewis only created whenisActiveis true; teardown uses a debouncedscheduleUnmount(0.35s, cancel-on-rehover) plus fully asyncdeinit; all card webviews share oneWKProcessPool;loadKeyuses quantized 0.5pt frame buckets to stop reload thrashing. - HoloFoilLayers — luminance masking for a more accurate metallic effect.
- Wizard —
HoloPreviewCardnow uses the nativeHoloFoilLayers+HoloSheenEffect+HoloScratchLayerpipeline, ratio-aware, hover-aware; pre-bundled hero masks for the region selector; multi-folder library list with DB reconciliation; bezel moved to Optional Features. - BoxArt —
BoxArtLayersno longer pre-subtracts the title from the hero blob (the title hint was removing a title-shaped notch at full resolution); the wizard region selector uses Zelda OoT US/EU/JP samples to exercise aspect-ratio variation. - Localization — total playtime, plays, last played, and achievements translated across en/es/pt/ja; bezel feature entries localized; new Holo translations.
- GameListRowView —
onPlayaction added for launching games. - GameCardView — image scaling changed from
scaledToFittoscaledToFillwith clipping for a tighter cover-art presentation. - Bump marketing version to 1.11.0 and build number to 34 across
project.yml, bothInfo.plists, anddocs/_config.yml.