Commit Graph
748 Commits
Author SHA1 Message Date
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 6b72aed3f6 fix(concerts): follow the selected light or dark theme 2026-09-25 11:19:36 +07:00
zarzet 79aa013795 fix(settings): remove extension row icons and correct online colors 2026-09-25 11:10:36 +07:00
zarzet c494922bf1 style(settings): simplify grouped rows and use green switches 2026-09-25 11:04:31 +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 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
Bartolo 14ce4bc868 Add Hi-Res authenticity check
Introduce a per-file Hi-Res authenticity checker and optional auto re-download for flagged fake Hi-Res downloads. Adds Rust checker modules (fft, evidence, FLAC/WAV decoding, tests) and a mobile API (check_hires_authenticity). Wire platform bindings for Android/iOS and PlatformBridge. Add Dart HiResCheckService, UI HiResCheckCard, settings toggle (redownloadFakeHiRes) and integration in the download pipeline to quarantine and replace suspicious files with LOSSLESS when safe. Adds claxon FLAC dependency.
2026-09-23 22:29:15 +02:00
zarzet 146b2acd4d refactor(ui): unify theme styling and enlarge profile button
Centralize existing Material and Mornye layout metrics in AppTokens and share adaptive icon selection. Enlarge the Home profile avatar to 44 dp with a 56 dp touch target.
2026-09-23 21:53:15 +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 4283126381 fix(mornye): preserve icon meaning and use consistent settings accents 2026-09-21 23:27:42 +07:00
zarzet c712566624 fix(settings): simplify player copy and add glass library info card 2026-09-21 23:15:01 +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 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 043c7bd874 perf(search): release derived caches when track results change
Clear cached buckets, sorted results and history lookups when the source track list changes. This releases the previous search even when empty, loading or error branches skip building results.
2026-09-20 17:21:01 +07:00
zarzet a7717ddfbf perf(player): scope position and contrast rebuilds to controls
Keep playback position updates inside the timeline subtree and notify only artwork foreground controls when contrast changes. Preserve layout and transport state; add regression coverage for stable artwork and transport widgets.
2026-09-20 17:20:52 +07:00
zarzet 0c930c691f fix(player): preserve offline motion artwork and smooth cover changes 2026-09-20 12:20:24 +07:00
zarzet dc25370350 feat(artists): add branded headers and incremental release loading 2026-09-20 11:46:16 +07:00
zarzet e61ff64adc feat(mornye): cache motion covers and refine player and search
Save album motion videos in app storage during downloads and prefer offline playback with an aspect-aware layout. Add cache management for saved videos.

Center active lyrics on opening, expand lyrics during manual scrolling, and adjust landscape header spacing. Group search rows and skeletons with dividers and remove redundant result icons.

Validation: Flutter analysis clean; 723 tests passed, 4 skipped; iOS simulator build installed.
2026-09-19 17:26:26 +07:00
zarzet 63e1a9b9c8 feat(ui): add Mornye glass theme and adaptive music player
Add a selectable Mornye theme with shared glass controls, dialogs, sheets, notifications, and collection headers while retaining Material components.

Update player artwork, lyrics transitions and highlighting, synchronized rolling time labels, volume controls, and compact navigation. Unify metadata, Library, search, and extension surfaces; preserve restored artwork and report extension load failures.

Validation: full Flutter analyzer clean; 713 tests passed and 4 skipped; pinned Dart formatting and diff checks passed; signed ARM64 and ARM32 release APKs built and verified.
2026-09-19 12:10:10 +07:00
zarzet 1ef81b4530 perf(library): batch album deletion and refresh once 2026-09-17 17:32:12 +07:00
zarzet fd777c34d9 perf(player): commit seek gestures once after scrubbing 2026-09-17 02:59:21 +07:00
zarzet f0ed293d48 feat: add opt-in Discord Rich Presence on Android
Use the official Discord Social SDK through JNI to share built-in player activity, clear presence when playback stops, and guard against late callbacks after disabling. Package the SDK optionally through SPOTIFLAC_DISCORD_SDK_DIR with license notices.

Credit: @itsmegaaa for the Rich Presence initiative and contribution in #575 and #576.

Validation: 15 Dart tests, scoped Flutter analysis, and one Android 16 ARM64 SDK/JNI instrumentation test passed. Visible presence on a signed-in Discord profile remains unverified.
2026-09-17 02:12:24 +07:00
zarzet e063e6d5da feat(metadata): display saved ReplayGain values and refresh after analysis 2026-09-15 21:44:59 +07:00
zarzet aa99726439 feat(backend): migrate production backend to Rust
Replace the Go backend with the Rust workspace and route Android/iOS through
UniFFI bindings. Include the migrated extension runtime, network, providers,
media metadata, downloads and library operations, with version 5.0.0+147.

Remove Go sources, adapters, native build selection and CI dependencies.
Build Rust unconditionally and lock the iOS Rust pod using a relative path.
Retain legacy source and migration evidence in a local ignored archive.

Validation: Android Kotlin compile and 53 native tests; Swift Rust-branch
equivalence and syntax; CocoaPods install; workflow, shell, Ruby, plist and
diff checks. Reuse the preceding 100 Rust tests, fmt/Clippy and five-ABI
build checkpoint; no new APK or iOS application build for this cleanup.

Known follow-up: URL/URLSearchParams globals are missing from the Rust JS
runtime. A controlled extension replay confirms a URL-resolution regression;
this commit does not fix that runtime gap.
2026-09-14 22:58:27 +07:00
zarzet 1da0da18a6 feat(backup): allow selecting categories and settings-only backups 2026-09-08 19:51:25 +07:00
zarzet 259fb5b6c0 fix(backup): allow selecting SFLB archives for restore 2026-09-07 19:38:14 +07:00
zarzet cadd60ce8d fix(metadata): preserve track tags across collection screens 2026-09-07 18:01:37 +07:00
zarzet 81ce677149 fix(download): remove legacy HIGH quality conversion 2026-09-07 01:20:28 +07:00
zarzet 7556d64596 fix(library): retain Opus badges when bitrate is missing 2026-09-06 23:59:23 +07:00
zarzet ed51b5d6ea revert: remove download size estimates 2026-09-06 22:17:23 +07:00
zarzet 174852b056 fix(download): estimate sizes from track quality metadata 2026-09-06 22:11:37 +07:00
zarzet c6195bcd10 feat(download): estimate file sizes in quality picker 2026-09-06 21:40:25 +07:00
zarzet 4b7e731474 feat(about): show compiled short Git commit 2026-09-06 14:54:35 +07:00
zarzet 1dc4e77f42 refactor(i18n): share supported language choices
Use one non-generated language catalog in setup and appearance settings. Filter supported locale codes once and retain the resulting immutable picker list.
2026-09-06 14:05:09 +07:00