opencode
55244b5027
fix: resolve 35 open issues across backend, Android, frontend, Docker
...
Backend (src/main.py):
- Add shared httpx.Client singleton for connection reuse (#24 )
- Add cache eviction for expired entries (#23 )
- Expand CORS to allow POST and OPTIONS (#25 )
- Preserve HLS tags (EXT-X-TARGETDURATION, EXT-X-MAP, etc) in rewrite (#12 )
- Replace urllib with httpx.stream for direct streaming
Backend (src/modules/stream_extractor.py):
- Use extract_flat='in_playlist' for reduced latency (#35 )
Tests (tests/integration/test_api.py):
- Parameterize channel count assertion against CHANNELS (#20 )
Android (Channel.kt):
- Change mutable vars to immutable vals, use copy() pattern (#19 )
Android (ServerApi.kt):
- Fix JSON parsing for bare array response (#21 )
- Close response body on error path (#29 )
Android (YouTubeExtractor.kt):
- Add ConnectionPool config (10 idle, 30s keepalive) (#28 )
- Tighten findHlsUrl to require audio codec (#26 )
Android (AudioPlayer.kt):
- Remove false error on STATE_READY + !isPlaying (#33 )
Android (MainActivity.kt):
- Reuse fragments via findFragmentByTag + show/hide (#18 )
- Move AudioPlayer.release() to Activity.onDestroy (#17 )
Android (LofiViewModel.kt):
- Wrap YouTubeExtractor calls in withContext(Dispatchers.IO) (#16 )
- Use immutable channel copies in discoverAllChannels (#19 )
- Remove audioPlayer.release() from onCleared (#17 )
Android (ChannelListFragment.kt):
- Tie swipe refresh to isDiscovering LiveData (#32 )
Android (AndroidManifest.xml):
- Set allowBackup=false (#15 )
Android (Preferences.kt):
- Remove hardcoded IP, default to empty string (#14 )
Android (proguard-rules.pro):
- Add ExoPlayer media3 HLS ProGuard rules (#34 )
Frontend (useAudioPlayer.ts):
- Add retry limit (3) with exponential backoff for NETWORK_ERROR (#27 )
Docker (Dockerfile.backend):
- Add playwright install chromium step (#22 )
2026-07-05 12:33:26 +00:00