11 Commits
Author SHA1 Message Date
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 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 d5ac292d36 fix(ios): keep release feed bundle identity in sync
Use com.zarz.spotiflac for the app and matching test targets. Read the bundle identifier from the built IPA when updating apps.json so the release feed matches the distributed application.

Validation: Xcode project plist lint and binary IPA bundle identifier extraction passed.
2026-09-19 12:10:25 +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 857d146c55 fix(ios): isolate download progress subscriptions
Give every subscription its own cursor, payload, and worker queue so an old blocked waiter cannot advance a replacement listener. Serialize lifecycle handling and guard cancellation.

Add a restart regression with an injected waiter; verified with Thread Sanitizer.
2026-09-06 14:03:49 +07:00
zarzet 83beccbb63 build(ios): require iOS 16 and restore local builds 2026-09-04 12:39:03 +07:00
zarzet b956c57652 refactor(ios): isolate and test extension callbacks 2026-07-26 01:15:22 +07:00
zarzet 1ce66b9e03 fix: align ios deployment target for file picker 2026-06-02 01:09:53 +07:00
zarzet 74bc747599 chore: update to v2.1.7 with new icons 2026-01-09 17:54:50 +07:00
zarzet 3fdcf6d5b7 Initial commit: SpotiFLAC Android/iOS app 2026-01-01 19:28:15 +07:00