Commit Graph
30 Commits
Author SHA1 Message Date
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 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 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 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 c48406f5d0 fix(download): resolve missing album folders before publishing 2026-09-07 16:13:41 +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 1b0c28b91a fix(download): route verification notifications to pending challenges 2026-09-06 16:03:46 +07:00
zarzet 49c3c66f15 fix(metadata): preserve Track fields during enrichment
Apply resolved metadata with copyWith and retain the existing field precedence. Keep UPC, preview URLs, and source-only fields when enrichment updates other tags.

Extract the pure merge helpers and add regression tests for field preservation.
2026-09-06 14:03:49 +07:00
zarzet 099e211f5a fix(conversion): reserve FLAC outputs without overwriting files
Reuse the conversion output lifecycle for M4A conversion and native FLAC suffix correction. Reserve destination names atomically, reject empty output, and clean partial files while preserving the input on failure.

Add regressions for existing outputs, concurrent conversions, staging, and cleanup.
2026-09-06 14:03:49 +07:00
zarzet a1ee346f2f chore(logging): sanitize diagnostics and reduce noise 2026-08-31 01:49:49 +07:00
zarzet 5dac33dfa4 fix(download): preserve finalization metadata and library labels 2026-08-29 00:31:25 +07:00
zarzet 1a7c20111a feat(library): add lyrics filtering and metadata actions 2026-08-27 01:44:06 +07:00
zarzet e149ee5358 fix(storage): publish finalized SAF output once 2026-08-26 18:37:15 +07:00
zarzet 290923e88f feat(tagging): write release identity tags 2026-08-18 19:04:26 +07:00
zarzet 48883d51d4 feat(extensions): preserve provider metadata 2026-08-18 12:28:35 +07:00
zarzet 5237aed25e feat(download): add automatic lossy conversion 2026-08-11 15:19:45 +07:00
zarzet a59c749089 fix(download): preserve SAF and defer background starts 2026-08-09 05:23:47 +07:00
zarzet e7fbaf7b75 fix(download): suffix only colliding quality variants 2026-07-29 02:43:35 +07:00
zarzet 8dcf7fa998 fix(storage): recover from unwritable download folders 2026-07-29 02:03:09 +07:00
zarzet 26570792a9 fix(library): persist lossless bitrate metadata 2026-07-28 00:50:20 +07:00
zarzet bfd44738e2 refactor(queue): fold duplicated final-embed blocks into one helper 2026-07-27 00:09:50 +07:00
zarzet 0b053d59b1 refactor(queue): decompose single-item god-method into _DownloadRun pipeline class 2026-07-27 00:06:35 +07:00
zarzet 21bc31e0b6 refactor(queue): move single-item download pipeline into a part file 2026-07-26 23:45:22 +07:00