Commit Graph
2516 Commits
Author SHA1 Message Date
zarzet c868aac2cc perf(android): batch SAF lookups during download publication 2026-09-17 03:30:30 +07:00
zarzet 3eb44dc892 perf(downloads): log finalization stage durations 2026-09-17 02:59:29 +07:00
zarzet 0dd1a9ac82 perf(audio): validate FLAC remuxes before encoder fallback 2026-09-17 02:59:29 +07:00
zarzet 622a457c13 perf(downloads): reuse lyrics supplied by the backend 2026-09-17 02:59:28 +07:00
zarzet dab5f770ab perf(downloads): reuse HTTP connections between tracks 2026-09-17 02:59:28 +07:00
zarzet 1a4b90db43 fix(android): validate native metadata editor results 2026-09-17 02:59:28 +07:00
zarzet 39a3e680a4 perf(lyrics): stream MP3 audio when updating ID3 lyrics 2026-09-17 02:59:22 +07:00
zarzet cd4b8ead90 perf(analysis): serialize and cancel owned FFmpeg sessions 2026-09-17 02:59:22 +07:00
zarzet 92089d5fcc perf(backup): move archive processing off the UI isolate 2026-09-17 02:59:21 +07:00
zarzet fd777c34d9 perf(player): commit seek gestures once after scrubbing 2026-09-17 02:59:21 +07:00
zarzet a064e96c37 perf(ui): pause motion headers when collapsed 2026-09-17 02:59:21 +07:00
zarzet 7064f1a53a perf(theme): bound cover palette decoding and coalesce requests 2026-09-17 02:59:14 +07:00
zarzet 96b037bb34 perf(rust): skip audio rewrites for identical FLAC metadata 2026-09-17 02:59:14 +07:00
zarzet 3e50dd75d6 chore(rust): update crypto, network and UniFFI dependencies 2026-09-17 02:59:14 +07:00
zarzet 6cd2c82790 chore(android): update native dependencies and build tooling 2026-09-17 02:59:14 +07:00
zarzet e7cf7e6335 chore(deps): update Flutter and iOS plugin dependencies 2026-09-17 02:59:14 +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 b2ea07c41e fix: preserve source artist credits when downloading
Keep full source artist credits in download responses and embedded tags, falling back to provider credits only when the source is empty. Add regression coverage for new and existing files.
2026-09-17 02:12:10 +07:00
zarzet a5530dc5bd chore(analyzer): exclude archived internal sources 2026-09-15 22:23:37 +07:00
zarzet 9317306897 chore(release): set app version to 5.0.0+152 2026-09-15 21:45:11 +07:00
zarzet e063e6d5da feat(metadata): display saved ReplayGain values and refresh after analysis 2026-09-15 21:44:59 +07:00
zarzet 0ad17f0caa fix(library): reset checkpoints and artwork on forced full scans 2026-09-15 21:44:53 +07:00
zarzet 097af1532f fix(metadata): read tags and covers from MP4 files named opus 2026-09-15 21:44:45 +07:00
zarzet 347208b3d9 fix(library): preserve cached covers across directory aliases 2026-09-15 21:44:36 +07:00
zarzet ae78519490 fix(download): log provider failures before fallback 2026-09-15 21:44:22 +07:00
zarzet eb717a6e7b fix(extensions): restore URL globals for provider link resolution 2026-09-15 21:44:11 +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 8c7d2aad5c fix(download): preserve filenames after automatic SAF conversion 2026-09-08 19:51:25 +07:00
zarzet a34e293544 Merge remote-tracking branch 'origin/main' 2026-09-07 19:41:16 +07:00
zarzet 259fb5b6c0 fix(backup): allow selecting SFLB archives for restore 2026-09-07 19:38:14 +07:00
github-actions[bot] 934c4af076 chore: update AltStore source to v4.9.6 2026-09-07 12:17:58 +00:00
zarzet c0f6a60706 docs(changelog): document version 4.9.6 v4.9.6 2026-09-07 18:46:05 +07:00
zarzet cadd60ce8d fix(metadata): preserve track tags across collection screens 2026-09-07 18:01:37 +07:00
zarzet c27dc7c1b6 fix(replaygain): report decoder failures and reject incomplete scans 2026-09-07 16:36:50 +07:00
zarzet e3f7817b29 fix(memory): release retired runtimes and idle download heap 2026-09-07 16:28:47 +07:00
zarzet c48406f5d0 fix(download): resolve missing album folders before publishing 2026-09-07 16:13:41 +07:00
zarzet fed88fc3a9 fix(metadata): read quality from Opus in MP4 containers 2026-09-07 12:16:01 +07:00
zarzet 81ce677149 fix(download): remove legacy HIGH quality conversion 2026-09-07 01:20:28 +07:00
zarzet e8bf40ae41 fix(download): preserve native containers before legacy quality conversion 2026-09-07 01:09:30 +07:00
zarzet 660ed9fb60 fix(download): publish converted SAF files with the final extension 2026-09-07 01:06:35 +07:00
zarzet 650af6e59d fix(download): size quality picker to its content 2026-09-07 00:50:05 +07:00
zarzet 40546f48e6 fix(download): allow dragging the quality picker to dismiss 2026-09-07 00:47:15 +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 ba00807786 fix(download): compare size estimates at each quality tier 2026-09-06 21:55:38 +07:00
zarzet c6195bcd10 feat(download): estimate file sizes in quality picker 2026-09-06 21:40:25 +07:00
zarzet bfffb8da11 fix(replaygain): write and verify native Opus gain tags
Preserve audio and artwork while replacing conflicting Opus gain tags with R128 comments. Verify manual, download, and album writes, handle SAF failures, and refresh playback normalization after saving.
2026-09-06 21:03:57 +07:00
zarzet 0acdd6d0b0 fix(metadata): match recording IDs across inconsistent catalogs 2026-09-06 20:28:15 +07:00