Skip to content

feat(jam): implement SimpMusic parity Listen Together UI, room mode controls, and reactive sync state - #425

Merged
ajisth69 merged 1 commit into
mainfrom
feat/simpmusic-jam-room-ui
Oct 26, 2026
Merged

ajisth69 merged 1 commit into
mainfrom
feat/simpmusic-jam-room-ui

Conversation

@ajisth69

Copy link
Copy Markdown
Member

Summary

This PR upgrades LastWave's Jam / Listen Together feature to parity with SimpMusic / Metrolist, providing a synchronized in-room experience, room control modes, and live sandbox-verified reliability.

Key Changes

  1. SimpMusic Parity Listen Together UI (LastWaveJamSheet.kt):
    • Pre-connection view: Segmented tabs (\Join Room\ vs \Create Room), persistent display name input with leading icon, 6-character monospace room code field with auto-paste from clipboard, collaborative vs host-only mode selectors, and expandable custom server URL override (\wss://...) with reset-to-default.
    • In-room view: Hero room code card with 1-tap copy and share link, dynamic live mode pill (\● LIVE · Collaborative/Host Only), live host mode switcher, synced Now Playing card with artwork and transport controls (Play/Pause, Skip), horizontal listener badge strip with host crown indicator, live in-room auto-scrolling chat, and leave/end room actions.
  2. TopBar Entry Point (HomeScreen.kt):
    • Added a top bar header action icon for LastWave Jam (\Icons.Filled.Group).
    • Displays an active Lime green indicator badge whenever the app is actively connected to a live Jam room.
  3. Room Mode & Server Settings (SettingsPreferences.kt):
    • Added DataStore keys and setters for \jamDisplayName, \jamServerUrl\ (\wss://jam.clashprojects.qd.je/ws), and \jamRoomMode\ (\collaborative\ vs \host_only).
  4. Protocol & State Machine (JamProtocol.kt, JamRepository.kt, LastWaveJamViewModel.kt):
    • Fixed host room creation state transition by handling \MSG_ROOM_CREATED\ into \JamSessionState.Active.
    • Handled \user_left, \host_changed, and
      oom_mode_changed\ events with resilient default deserialization.
    • Added client-side keepalive ping loop every 25 seconds to maintain active WebSocket connections on mobile networks.
    • Live transport controls (\ ogglePlayback(), \skipNext()) honoring host-only vs collaborative room permissions.

Verification

  • Ran live sandbox tests against production WebSocket server \wss://jam.clashprojects.qd.je/ws\ verifying room creation, multi-client joining, room mode sync, and bidirectional chat.
  • All Go sync tests pass 100% green.

@ajisth69
ajisth69 merged commit ca44f98 into main Oct 26, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant