36 lines
2.9 KiB
Markdown
36 lines
2.9 KiB
Markdown
# Todo / scratch
|
|
|
|
## What works now
|
|
|
|
- Login → server hits `/Users/AuthenticateByName`, token+user_id persisted to `~/.config/player/config.json`
|
|
- Subsequent launches skip login, jump straight to library
|
|
- Library view: 3 columns (artists / albums / tracks), scrollable, click-to-drill
|
|
- **All HTTP is async** — `http_submit` queues a worker thread; `http_pump()` runs once per frame and fires callbacks on the main thread. UI no longer freezes during fetches or downloads.
|
|
- **MP3 + FLAC playback** via vendored `dr_mp3.h` / `dr_flac.h` (compiled to `modules/audio_decoders/linux/decoders.a` — `build.jai` auto-rebuilds when the .c source is newer). Decoded to s16 PCM and handed to Sound_Player as `Sound_Data.LINEAR_SAMPLE_ARRAY`.
|
|
- OGG + WAV continue through `Sound.load_audio_data` (Sound_Player's native path).
|
|
- Click a track → downloads (async) → decodes → plays. Auto-advance via Sound_Player's `release_asset` callback firing `track_finished`.
|
|
- Pause/resume via `user_volume_scale` mute trick (still not a real pause)
|
|
- Now-playing screen with title/artist/album, transport buttons, scrub bar
|
|
- Logout button on library top-right clears `config.json`
|
|
|
|
## Known stubs / rough edges
|
|
|
|
- **Memory leak**: each played track leaks its decoded PCM buffer (~50 MB for a 5-min FLAC). The `release_asset` callback should call `decoder_free` for MP3/FLAC paths and `free` for OGG/WAV — currently it only flips `track_finished`. Track allocation type per-Sound_Data so the release knows which allocator to use.
|
|
- `audio_toggle_pause` is volume-mute, not real pause — cursor keeps advancing
|
|
- No real seek (scrub bar is read-only)
|
|
- Image cache never evicts — hold for thousands of items but unbounded over a long session (low priority)
|
|
- Failed image fetches stay marked `failed` forever; no retry. Often that's right (item has no art) but transient network errors should retry once
|
|
- `gfx/shaders.jai` is still `Simp.immediate_quad` (mirrored bars + bass pulse, but no GLSL fragment shader yet)
|
|
- `client.jai` still has the old sync `http_get`/`http_post` and `Http_Response` / `build_auth_header` — async.jai uses `build_auth_header` so the helpers stay, but the sync wrappers are dead code now
|
|
- Stream URL `/Audio/{id}/stream` returns the original file. If the original is something exotic (Opus, AAC, etc.) it'll fail. Could fall back to `/Audio/{id}/universal` with `audioCodec=mp3` or similar to force-transcode for unsupported formats.
|
|
|
|
## Next likely tasks (in rough order)
|
|
|
|
1. Free the decoded buffer when the stream ends (fix the leak)
|
|
2. Fetch primary image per album, decode with stb_image, upload as `Simp.Texture`, render in album rows + as backdrop on now-playing
|
|
3. Real FFT (dr_libs author's work? or kissfft) hooked to Sound_Player's mixed output buffer
|
|
4. Custom GLSL fragment shader for the visualizer (replaces the bar stack)
|
|
5. Album-level "play all" button in the album column
|
|
6. Real per-stream pause + seek
|
|
7. Search bar above artists column
|