feat: media search, choices, library management (Phase 6)
This commit is contained in:
1 parent
c10ea72cd6
commit
cbf18306ff
4 files changed
+343
-4
No files matched your search
@@ -25,7 +25,7 @@ Goal: full-parity native iOS app per UPDATE_PATH.md, verified in simulator via X
|
||||
- [x] Phase 3: state machine, audio levels, wake lock, history (commit 5483e6e)
|
||||
- [x] Phase 4: voice/model pickers with sync-on-join (commit ca2d26f)
|
||||
- [x] Phase 5: media player — commit 0af944e (webm playback blocked by iOS AVPlayer; see status below)
|
||||
- [ ] Phase 6: media search, choices, library panel
|
||||
- [x] Phase 6: media search, choices, library panel (commit pending)
|
||||
- [ ] Phase 7: background tasks panel (task_event fold-in)
|
||||
- [ ] Phase 8: polish/hardening/parity pass
|
||||
- [ ] Phase 9: docs & handoff
|
||||
@@ -114,6 +114,22 @@ BLOCKED — webm playback (platform limitation, NOT app bug):
|
||||
Needs server change to verify audible playback:
|
||||
- [ ] Server: provide an iOS-decodable audio format (m4a/aac/mp3) for library tracks, then re-test playback in sim.
|
||||
|
||||
## Phase 6 status (2026-08-30 ~13:00)
|
||||
Done:
|
||||
- `MediaPanelView` expanded: search section (query + Find button, results with "in library" tag), choices section (agent-offered suggestions from state), library section (list with Play/Remove per track, refresh button), add-stream section (name + URL form).
|
||||
- `MediaPlayerController.playVideo` / `playTrack`: send POST /play to the scoped room or "default" when no session is active.
|
||||
- `startDefaultPolling()`: Media Panel starts 1.5s state polling on appear so Now Playing card reflects server state without a voice session.
|
||||
- `pollState` now logs failures instead of silently swallowing them.
|
||||
- `absolute()` helper prefixes server base URL for relative art paths.
|
||||
- Stream URL field: `.textInputAutocapitalization(.never)` to prevent "Https://" capitalization.
|
||||
|
||||
Verified in simulator (log + UI + server evidence):
|
||||
- Search: typed "toes", tapped Find → POST /media/api/search 200 → results rendered with "in library" tag on matching track.
|
||||
- Play (library): tapped Play on "Toes" → POST /media/api/play 200 → state `desired: playing` confirmed via curl. AVPlayer attempted to decode webm and failed (-11828, expected platform limitation from Phase 5).
|
||||
- Delete: tapped Remove on "Toes" → confirmation alert "Remove from library?" → tapped Remove → DELETE /media/api/tracks/XMh9vU4g0jc 200 → library refreshed to show only Sheryl Crow.
|
||||
- Add Stream: entered name + URL, tapped Add → POST /media/api/streams 400 (server rejected test URL) → error message "Could not add stream: Media API request failed with HTTP 400. url must be http(s)" displayed in red.
|
||||
- Polling without session: confirmed via AVPlayer webm decode error in logs (state was fetched and reconciled even though no voice session was active).
|
||||
|
||||
## Subagent notes
|
||||
- Small context model: keep prompts self-contained, point at this file + UPDATE_PATH.md
|
||||
- Watch for loops (repeated identical commands) — kill and redirect if seen
|
||||
|
||||
Reference in new issue
Block a user