Commit Graph
268 Commits
Author SHA1 Message Date
zarzet 5259c86365 feat(player): add Mornye media notification controls
Sync notification favorites with Library, add Mornye transport icons and an output action on legacy Android, and expose the iOS favorite command. Preserve playback position when controls refresh.

Vendor audio_service 0.18.19 with a small Android patch for custom notification actions. Modern Android keeps its system output switcher and transport layout.
2026-09-26 03:07:38 +07:00
zarzet 728d179d69 refactor(discord): remove rich presence and bundled SDK
Remove the presence setting, platform bridge, SDK archive, and SDK preparation from local and CI builds. Reject leftover Discord native libraries in release APK audits.
2026-09-26 03:07:04 +07:00
zarzet 863d1536dd fix(lyrics): smooth highlight lift and keep romanization still
Ease the lift before each highlight and let it settle more gradually for held words. Keep timed pronunciation and translation lines stationary while preserving their color sweep.
2026-09-26 03:05:34 +07:00
zarzet 8e7e71827c feat(lyrics): animate live previews while scrubbing playback 2026-09-26 01:31:31 +07:00
zarzet 55a390d679 fix(ui): correct glass shader coordinates on scaled tablets
Use native window metrics for glass shaders while preserving scaled layout metrics for their content. Cover fullscreen tablet orientations and resizing to a compact window.

Fixes #597
2026-09-25 21:11:30 +07:00
zarzet b40ba27cd6 feat(lyrics): add countdown dots for instrumental breaks 2026-09-25 21:09:38 +07:00
zarzet 801ab13938 fix(lyrics): keep focus fixed when player controls hide 2026-09-25 21:09:38 +07:00
zarzet 3be9f40380 fix: adapt Hi-Res analysis card to Mornye and clarify results 2026-09-25 19:57:46 +07:00
zarzet 4aad7f03c1 feat(lyrics): add subtle lift to sustained word highlights 2026-09-25 19:31:09 +07:00
zarzet 6598a360b5 fix(lyrics): align pronunciation phrases and improve readability 2026-09-25 18:34:35 +07:00
zarzet 2ab4aaa8dc fix(ui): allow landscape only in the full player
Keep application pages in portrait and let player sheets inherit rotation from the full player. Restore portrait on navigation, replacement, removal, and completed dismissal; discard stale minimization geometry when the screen rotates on close.

Validated with 12 Flutter tests and targeted analysis. iOS simulator build confirms portrait startup from a landscape device. Platform orientation restrictions still apply on large Android displays and multitasking iPads.
2026-09-25 18:05:40 +07:00
zarzet 9d530cea9e feat(metadata): remove ReplayGain from individual and selected tracks 2026-09-25 17:12:21 +07:00
zarzet 71031fd5ed style(player): reduce paused play glyph without shifting controls 2026-09-25 16:33:06 +07:00
zarzet ca7665d805 fix(lyrics): soften landscape footer and use neutral tab colors 2026-09-25 16:30:44 +07:00
zarzet e09d0c1609 fix(lyrics): hide controls after five seconds only during playback 2026-09-25 16:26:25 +07:00
zarzet fc13a6c7c0 fix(player): move track header with the cover between panels 2026-09-25 16:05:37 +07:00
zarzet 8b85f65874 style(lyrics): use compact liquid glass language menu 2026-09-25 12:02:48 +07:00
zarzet 8103c313d7 feat(lyrics): show songwriter and provider credits after lyrics 2026-09-25 12:01:43 +07:00
zarzet abb8dc4a42 feat(concerts): show artwork-themed event details in app 2026-09-25 12:00:28 +07:00
zarzet 1d6ff18d06 feat(player): add native audio output controls 2026-09-25 11:27:49 +07:00
zarzet a9898e8b30 feat(artists): show provider-neutral upcoming concerts 2026-09-25 10:58:19 +07:00
zarzet 3ca881b169 feat(lyrics): animate pronunciation and translation visibility
Add a contextual language menu for available lyric supplements in portrait and landscape. Remember independent visibility choices across tracks and player sessions without changing embedded lyrics or download options.

Fade and collapse supplements over 320 ms while interpolating lyric row heights and keeping the active line aligned. Honor reduced motion and control auto-hide; cover menu availability, persistence, animation, and word timing in widget tests.
2026-09-25 10:29:22 +07:00
zarzet 87321c7efd fix(player): preserve playlist context when playing a track
Queue the full available Library collection from the selected row instead of replacing playback with one track. Preserve playlist order and map the selected position after skipping unavailable and virtual CUE entries, so Next and Previous retain their context.

Cover both themes, repeated tracks, list boundaries, unavailable audio, and external-player behavior. Refs #592.
2026-09-25 10:12:21 +07:00
zarzet 040c328479 feat(widgets): add native Android and iOS home screen players
Publish artwork, metadata, and transport state through a shared Dart bridge. Add configurable Android RemoteViews and iOS WidgetKit players with controls and links into the full player.

Serialize widget commands and session restoration, and share one headless-capable iOS Flutter engine with the foreground scene. Include native integration tests, Dart bridge tests, and widget setup documentation.
2026-09-25 01:22:58 +07:00
zarzet 64445a09fc feat(navigation): refine translucent bottom bar and search folding
Keep Search inside the expanded tab bar and animate it into a separate control when collapsed. Reduce navigation surface tint while retaining clear icons and accessibility fallbacks.
2026-09-25 01:22:43 +07:00
zarzet 7a8dadf5f9 feat(player): animate artwork transitions and immersive lyrics
Enlarge player artwork and transport controls, morph the cover into the lyrics and queue header, and minimize the player back into the mini player. Keep the larger header actions in lyrics and queue only.

Use larger lyrics with upper focus and progressive blur. Hide idle lyric controls after three seconds, restore them on interaction, and keep the normal player as the landscape entry page.
2026-09-25 01:22:21 +07:00
zarzet 3d05383e00 feat(player): expand compact track action menus
Add favorite, playlist, sharing, and artist navigation actions. Use denser menu typography and prefer placement above the invoking control.
2026-09-25 01:22:03 +07:00
zarzet cec9d5cbce feat(library): show saved animated artwork on local albums
Reuse downloaded motion artwork for local and downloaded album headers, with static fallbacks and reduced-motion support. Opening an album does not trigger an artwork search or download.
2026-09-25 01:21:10 +07:00
zarzet 9a62244263 feat(library): refine album and artist artwork headers
Raise album details and artist actions over the artwork, soften the lower artist banner, and derive action colors from the artist logo. Match loading skeletons to the updated header layouts and preserve scrolling and large text behavior.
2026-09-25 01:20:54 +07:00
zarzet bb057fd210 fix(library): keep album batch actions alive after selection closes
Use the album screen context for ReplayGain and conversion so dismissing the selection overlay does not invalidate the pending operation. Cover local and downloaded albums in both themes.
2026-09-25 01:20:40 +07:00
zarzet 2adcdf0768 fix(artwork): preserve cover colors and readable player contrast 2026-09-25 01:20:11 +07:00
zarzet a470ed8d7c Merge remote-tracking branch 'origin/main' 2026-09-25 01:03:00 +07:00
zarzet b7d4ceb7e1 Merge pull request #589 with lossless replacement safeguards
Keep automatic Hi-Res replacement off by default. Require exact full-duration PCM equivalence across every channel before and after processing. Retain the original through publication and history persistence, restore it on failure or cancellation, and bound WAV format parsing.

Validated with 30 Rust tests, 46 Dart tests, clean analyzer/Clippy checks, Android ARM64 and iOS builds, and iOS simulator startup.
2026-09-25 01:02:39 +07:00
zarzet f639e4cc6b fix(player): loop marquee forward with longer reading pauses 2026-09-24 11:03:09 +07:00
zarzet d56396f90e feat(player): scroll overflowing mini player titles and artists 2026-09-24 00:44:48 +07:00
zarzet 39273edd85 fix: retry verification browser launch and failed searches 2026-09-23 17:26:40 +07:00
zarzet ba44bafa92 fix: sync lyric romanization and clear stale selection menus
Preserve romanization and translation metadata through Rust exports and cache, match rounded line times, and retain word endings. Highlight romanization with the main lyric clock in Material and Mornye.

Clear selection overlay ownership safely when collection screens are disposed. Add parser, rendering, cache and overlay lifecycle regression coverage.
2026-09-23 12:42:08 +07:00
zarzet ebcd1fd877 fix(mornye): show track summary and update welcome branding 2026-09-22 15:37:06 +07:00
zarzet 3eea711ed3 feat(onboarding): add theme-aware 5.0 upgrade introduction 2026-09-22 00:15:29 +07:00
zarzet c87c9ff848 feat(library): add Mornye browsing and contextual compact navigation
Add category browsing, a two-column Recently Added grid, and a dedicated download queue. Keep compact navigation icons and their animations aligned with the active tab.

Keep profile avatars circular and report lyric enrichment outcomes accurately, preserving existing lyrics and supporting instrumental markers.
2026-09-21 23:02:52 +07:00
zarzet 4c5af08cdd fix(ui): resolve album titles and show Home explicit badges
Hide the profile setup hint once a name or photo is saved.
2026-09-21 19:02:13 +07:00
zarzet 5958fe2719 feat(home): add large featured cards for extension feeds 2026-09-21 18:38:04 +07:00
zarzet ed80d3e8bb feat(mornye): separate Search into a circular navigation button
Keep Home, Library, and Repo in the glass capsule while Search remains accessible on the right. Preserve compact transitions and allow returning to Home when Search is active.
2026-09-21 18:15:52 +07:00
zarzet 1c535b493c fix(ui): align local lyrics and refine Mornye selection
Read embedded lyrics through the playback metadata fallback when the lyrics reader misses them. Restore edge icon highlighting during navbar drags, tune selection contrast, and blend the profile name field into its card.
2026-09-21 18:07:15 +07:00
zarzet d8d46108bc feat(profile): add local profiles with backup and restore
Move Mornye Settings to the Home avatar and keep search above the profile card. Center the metadata artwork and actions, and make artist names clickable in the Material player.
2026-09-21 17:28:18 +07:00
zarzet 5b519070a3 feat(player): add beat-matched AutoMix and refine Mornye navigation
Add default-off local beat analysis, pitch-preserving tempo matching, crossfade fallback, and cancellation-safe two-deck playback. Expose AutoMix in settings and the Mornye queue.

Separate Search from Home, remove the Mornye greeting, and keep Home/Search icons moving continuously between full and compact navigation. Restore expansion on upward Library scrolling.

Validate beat analysis, transport handoff and cancellation, settings persistence, and navigation behavior. Flutter analysis and the signed iOS simulator build pass.
2026-09-20 20:36:26 +07:00
zarzet 48ba08976a perf(bridge): reduce metadata copies and decode large JSON off the UI isolate
Keep decoded cache objects private and copy only at public return boundaries. Decode large metadata and persisted JSON in a worker, and read spill files in the decoding isolate with cleanup on failure.

Protect replacement in-flight requests from stale cleanup. Cover nested mutation isolation, coalescing, invalidation, restoration, spill cleanup and retries.
2026-09-20 17:21:11 +07:00
zarzet 7691acecef perf(analysis): reuse sorted spectral percentile windows
Reuse sorted windows for related percentiles and reject unsuitable edges before computing expensive tail statistics. Preserve cutoff results with 31 regression fixtures and 400 exact old/new comparisons.
2026-09-20 17:21:11 +07:00
zarzet de238fd0cd perf(audio): share the Opus artwork metadata buffer
Write picture headers and payload into one backing allocation instead of copying a second complete block. Verify byte parity for JPEG, PNG and extensionless artwork, including a large fixture.
2026-09-20 17:21:01 +07:00
zarzet d91bfae155 perf(library): dispose unused playback row subscriptions
Auto-dispose media-item playback providers after their last listener leaves so scrolling does not retain every visited row subscription. Test disposal of 200 rows, active-row behavior and reattachment.
2026-09-20 17:21:01 +07:00