Commit Graph
29 Commits
Author SHA1 Message Date
zarzet 4b07607884 test(progress): keep batch tests after production helpers 2026-10-08 17:53:55 +07:00
zarzet 2ded1cff68 perf(downloads): batch queue cancellation and progress cleanup 2026-10-08 08:47:47 +07:00
zarzet c67d2a2dd2 perf(downloads): batch cancellation resets for retry 2026-10-08 06:55:26 +07:00
zarzet dc1e7c1273 fix(lyrics): treat placeholder zero timestamps as unsynced 2026-10-08 00:49:42 +07:00
zarzet fb21c5c390 perf(audio): analyze AutoMix grids and spectral cutoffs natively
Move PCM beat analysis and spectrum cutoff estimation to cancellable Rust workers with the existing algorithms and isolated Dart fallbacks. Keep visual rendering and playback behavior unchanged.
2026-10-06 23:28:01 +07:00
zarzet d693e1a479 perf(theme): extract cover palettes with native quantization
Port the pinned Material quantizer and Dart RNG compatibility to Rust while keeping Material Score and final color schemes in Dart. Include exact palette fixtures, licenses, and Kotlin worker ABI coverage.
2026-10-06 23:27:38 +07:00
zarzet 5019851903 perf(hires): analyze every channel in one audio decode pass 2026-10-04 01:41:00 +07:00
zarzet 3b553b38a3 perf(cover): avoid copying originals rejected by cache budget 2026-10-04 01:41:00 +07:00
zarzet 644d035661 perf(isrc): bound retained indexes and stream FLAC comments 2026-10-04 01:40:58 +07:00
zarzet 4eef5542be fix(metadata): recognize featured artist credits consistently
Handle feature and featured separators across display, Android finalization and Rust tag writing. Split conjunction credits only when separate artist IDs confirm them, and offer a picker for multi-artist navigation.
2026-10-02 18:10:00 +07:00
zarzet 41340a4a21 feat(metadata): write primary-artist tags in native writers
Native tag writers accept artist_tag_mode=primary and keep only the first credited artist in ARTIST and ALBUMARTIST for every format: FLAC download embedding, FLAC/Opus edits, and the ID3, MP4, APE and RIFF writers. The Android finalizer's FFmpeg fallback applies the same rule.

Rust and Kotlin share one separator set (comma, semicolon, ampersand, a spaced x, feat/ft/featuring/with) and test the same fixtures. The Go-parity split_vorbis pattern is unchanged. Refs #618.
2026-10-01 16:12:44 +07:00
zarzet 9051f37cf5 perf(library): reduce scan allocations and keep SAF workers busy 2026-09-30 23:39:22 +07:00
zarzet fe88048db2 refactor(backend): retire unused native bridge entry points 2026-09-30 21:47:15 +07:00
zarzet 88508c806a perf(library): reuse bounded artwork thumbnails during scans 2026-09-30 20:57:59 +07:00
zarzet 6decce0f8b fix(lyrics): keep V3 collaborations on the primary side 2026-09-27 15:26:11 +07:00
zarzet 7e32951eac fix(lyrics): preserve group alignment in eLRC fallback 2026-09-27 11:39:33 +07:00
zarzet 34cda0a802 fix(lyrics): preserve Apple vocal sides for group parts 2026-09-27 04:06:15 +07:00
zarzet 95e0e3197d feat(lyrics): support multiple vocalists and aligned lyrics 2026-09-26 14:50:05 +07:00
zarzet 1bae8156bb fix: avoid inferring Hi-Res upsampling from bandwidth alone 2026-09-25 19:57:44 +07:00
zarzet 9d530cea9e feat(metadata): remove ReplayGain from individual and selected tracks 2026-09-25 17:12:21 +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
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 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 31ef7c7c88 perf(rust): stream discarded FLAC artwork during replacement
Consume superseded picture blocks with a bounded 64 KiB buffer instead of retaining them in memory. Preserve other blocks, audio, EOF behavior and metadata limits while checking cancellation between reads.

Cover rewrite/enrichment output parity, retained artwork, truncated input, cancellation before writes and block-count limits.
2026-09-20 17:21:11 +07:00
zarzet 3b662cc114 perf(rust): reduce peak allocations when resizing cover artwork
Write JPEG resize output directly into RGB and release the original decoded image before encoding. Preserve PNG alpha handling and existing image quality.

Verified byte-identical output for 336 image fixtures and lower isolated peak heap allocation.
2026-09-20 17:20:52 +07:00
zarzet 96b037bb34 perf(rust): skip audio rewrites for identical FLAC metadata 2026-09-17 02:59:14 +07:00
zarzet e063e6d5da feat(metadata): display saved ReplayGain values and refresh after analysis 2026-09-15 21:44:59 +07:00
zarzet 097af1532f fix(metadata): read tags and covers from MP4 files named opus 2026-09-15 21:44:45 +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