Commit graph

401 commits

Author SHA1 Message Date
Murilo Scolari
11d9aa5c6b fix(sync): exclude device-local UI preferences from cloud settings sync 2026-10-24 23:49:46 -03:00
Murilo Scolari
e3ce0b331e fix(simpconnect): stabilize P2P discovery, state sync, playback handoff and multicast lock 2026-10-24 17:59:27 -03:00
Murilo Scolari
d28478c2ad feat(sync): add reactive real-time library observer and reactive UI flows 2026-10-24 04:23:43 -03:00
Murilo Scolari
a5b687628b feat(sync): implement zero-knowledge E2EE sync engine, keyring, and payload store 2026-10-24 03:26:18 -03:00
Murilo Scolari
561bd98bad fix(media-jvm): balanced volume scaling curve for desktop (pow 1.45) 2026-10-24 01:28:10 -03:00
Murilo Scolari
e730b23364 feat(sync): expose recovery in client repository
Add recovery credential rotation to the KMP client and domain/data contracts.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-21 20:51:43 -03:00
Murilo Scolari
951fb4c9ba feat(sync): add repository integration
Expose persisted sync configuration and a domain/data repository for authenticated synchronization.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-21 20:50:31 -03:00
Murilo Scolari
ea2f4f98a3 feat(sync): persist client configuration
Add sync enablement, server URL, and session storage to the shared DataStore contract.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-21 20:49:30 -03:00
Murilo Scolari
c1ece4b3a9 feat(sync): add websocket notifications
Expose authenticated WebSocket notification sessions and client shutdown for sync invalidations.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-21 20:47:50 -03:00
Murilo Scolari
855e91b821 feat(sync): extend authenticated client lifecycle
Add session device metadata and logout/device APIs to the KMP sync client.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-21 20:46:47 -03:00
Murilo Scolari
b9a238a1c1 feat(sync): add encrypted sync client module
Add the Android and JVM KMP protocol client with AES-GCM envelopes and Ktor REST synchronization.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-21 20:38:47 -03:00
Murilo Scolari
1e7b925469 fix(simpconnect): preserve local playback across remote sessions
Only suspend an existing local session and keep its in-memory queue when remote control is active. Avoid restoring unrelated persisted queues after disconnect and rethrow coroutine cancellation.
2026-10-21 20:13:10 -03:00
Murilo Scolari
d19aab5d6e fix(simpconnect): suspend local player on controller, seal session player transport, and restore dynamic island 2026-10-21 19:16:23 -03:00
Murilo Scolari
e913fa0db5 fix(simpconnect): run listener calls on player thread and isolate command failures 2026-10-21 18:15:01 -03:00
Murilo Scolari
81fc20e051 fix(volume): keep mirrored control state in sync for SimpConnect
PlayerEvent.UpdateVolume applied the level to the player but left controlState.volume at its stale value, so the controller's slider bounced back on the next state sync. Update the state on both Android and JVM, and expose repeat/shuffle/volume/seek commands to the remote-aware MediaSession player.
2026-10-21 17:40:12 -03:00
Murilo Scolari
fe6ffa0099 fix(simpconnect): make cross-device control reliable
Server/client hardening:
- ordered, conflated state broadcasts plus a single ordered command channel (no dropped handoff PlayTrack, no timeline jumping)
- connect/handshake timeouts, heartbeat, stale-session replacement, approval timeout and persisted auth keys
- cancellable local-network discovery that retries after bind failures

Control and handoff:
- preserve pause state and playback position across handoff, and keep the queue that is actually playing
- add transferToDevice() to move an active session instead of attaching to a second target
- serialize remote PlayTrack handling, clamp seeks and cycle repeat to the requested mode

Android integration:
- expose the remote session to the MediaSession notification via SimpConnectSessionPlayer, so notification/Bluetooth/Android Auto transport, metadata and progress follow the controlled device
- apply PlayerEvent.UpdateVolume to the Android player
2026-10-21 17:35:46 -03:00
Murilo Scolari
3ec25d6b81 fix(media3): restore HyperOS dynamic island and improve SimpConnect real-time state sync 2026-10-21 16:03:43 -03:00
Murilo Scolari
d1934699b5 feat(simpconnect): implement P2P discovery, server, client, domain and data repository 2026-10-21 15:12:42 -03:00
Murilo Scolari
7efa4c9b44 feat(car): expose queue timeline with real durations and isolate SystemUI commands 2026-10-21 13:45:02 -03:00
Murilo Scolari
1c69905f68 Revert "feat(car): expose playback queue to Android Auto"
This reverts commit 04406db782.
2026-10-21 13:26:11 -03:00
Murilo Scolari
04406db782 feat(car): expose playback queue to Android Auto
Publish the adapter's real queue through the MediaSession timeline so the Android Auto player shows its native queue button. Map queue selections back to the adapter index, including shuffle order, and keep the synthetic timeline from being overwritten by the single-item ExoPlayer delegate.
2026-10-21 00:30:29 -03:00
Murilo Scolari
158e7f67e4 feat(car): fall back to built-in artwork when covers are missing 2026-10-20 23:19:11 -03:00
Murilo Scolari
d791464ecf feat(car): bring legacy Android Auto UI closer to the templated layout 2026-10-20 23:12:29 -03:00
Murilo Scolari
a37ad64211 refactor(car): remove Car App Library UI and keep legacy media UI 2026-10-20 23:03:49 -03:00
Murilo Scolari
e85c68bf71 feat(car): use artwork and grid hints on legacy Android Auto home shelves 2026-10-20 22:54:30 -03:00
Murilo Scolari
a4bf94bca1 feat(car): add Android Auto content style hints for grid layouts and album covers 2026-10-20 21:41:01 -03:00
Murilo Scolari
5c260849c8 feat(update): add msix and appinstaller asset URLs to UpdateData 2026-10-19 22:45:00 -03:00
Murilo Scolari
743cd340f9 feat(update): expose appImageUrl and zsyncUrl in UpdateData 2026-10-19 22:22:44 -03:00
Murilo Scolari
fbd4ca4130 fix(car): support Car API levels 1-7 with backward-compatible templates 2026-10-19 21:20:27 -03:00
Murilo Scolari
3244af19ce fix(lyrics): robust word alignment and syllable merging across TTML and rich sync lyrics 2026-10-19 20:49:59 -03:00
Murilo Scolari
b09ea93cd9 feat(sync): support bidirectional settings and accounts sync over QR code 2026-10-19 20:30:53 -03:00
Murilo Scolari
1b07b15f3b fix(android-auto): allow all car hosts unconditionally for sideloaded release builds 2026-10-19 19:53:48 -03:00
Murilo Scolari
486b2d5796 fix(lyrics): properly merge TTML syllable spans into words 2026-10-19 19:21:59 -03:00
Murilo Scolari
d9bd613175 fix(discord-rpc): harden native IPC handshake and support Vesktop Flatpak sockets 2026-10-19 18:30:24 -03:00
Murilo Scolari
85189686cd fix(discord-rpc): set activity type to 0 (PLAYING) for Discord IPC standard compatibility 2026-10-19 18:05:25 -03:00
Murilo Scolari
73d9934978 fix(discord-rpc): remove buttons per user preference, streamline payload, and add info logging 2026-10-19 17:57:54 -03:00
Murilo Scolari
c3ca08bf39 fix(discord-rpc): use official SimpMusic App ID, pass activity name and buttons, and format timestamps in seconds 2026-10-19 17:40:06 -03:00
Murilo Scolari
02e15577b7 feat(discord): implement pure Kotlin/JVM native Discord IPC client with 5-minute pause timeout 2026-10-19 17:10:40 -03:00
Murilo Scolari
99b1ff6ee3 Merge branch 'feat/github-updates-repo' into custom 2026-10-19 16:11:15 -03:00
Murilo Scolari
872187db80 feat(update): point github release check to muriloscolari/SimpMusic 2026-10-19 16:11:15 -03:00
Murilo Scolari
cf946aa2f2 feat(data): add startWithSystem and startMinimizedToTray to DataStoreManager 2026-10-19 02:47:46 -03:00
Murilo Scolari
d39d3ae0dc feat(data): add lastfmCustomApiKey and lastfmCustomSecret to DataStoreManager 2026-10-19 02:28:12 -03:00
Murilo Scolari
f48759d51f feat(media-jvm): implement cubic perceptual volume scaling without overriding OS mixer ao-volume 2026-10-19 02:18:53 -03:00
Murilo Scolari
f395504737 fix(car): filter duplicate Liked Music in playlists and limit home playlists to single row 2026-10-18 18:10:02 -03:00
Murilo Scolari
14dfb56bce feat: show YouTube Music library, liked and local playlists in Android Auto Playlists tab 2026-10-18 17:47:01 -03:00
Murilo Scolari
d001a58043 fix(car): prevent MediaSession from clearing active player on track selection 2026-10-18 17:23:53 -03:00
Murilo Scolari
2ca6f7ba46 Merge branch 'feat/car-home-playlists-and-artwork' into custom 2026-10-18 16:48:44 -03:00
Murilo Scolari
668381686c feat(android-auto): highlight user playlists with artwork directly on home screen 2026-10-18 16:48:08 -03:00
Murilo Scolari
6a55eb12dc feat(player): auto-resume playback on skip (next/previous) when paused 2026-10-18 16:41:50 -03:00
Murilo Scolari
a21e4b50a1 Merge branch 'feat/smart-lyrics-and-back-nav' into custom-release 2026-10-17 01:54:21 -03:00