Releases need more than eyeballs: scripts/e2e-api-check.sh now runs 18 assertions over the live instance (login/refresh, listings, private rows, subscriptions incl. remote channels, watching + stored position, file token, playlist reachability) and TESTS.md defines the manual D-pad checkout that a script cannot do. Also switch the channels screen to the user's own channels (the search-based local listing rejects empty queries) and resolve the real account name at login since logins accept email addresses.
3.4 KiB
3.4 KiB
Backlog
Status vocabulary: todo · doing · done.
v0.1 — MVP (this release)
| # | Item | Status | Notes |
|---|---|---|---|
| 0 | Ask for credentials + instance URL, store safely | todo | Login screen → users/token; store tokens + OAuth client creds in EncryptedSharedPreferences, never the password; refresh-token single-flight on 401 |
| 1 | List local videos (public) + user's own videos incl. private/internal | todo | Sidebar entries "Videos" (public, videos?isLocal=true) and "My videos" (users/me/videos); privacy badge on non-public items |
| 2 | List local channels | todo | video-channels?search=&searchTarget=local; tap → channel videos |
| 3 | Search local videos | todo | videos?search=…&isLocal=true |
| 4 | Subscription videos | todo | users/me/subscriptions/videos |
| 5 | Watch history (server) | todo | users/me/history/videos read-only |
| 6 | Playback + report to server history | todo | ExoPlayer HLS (mp4 fallback); POST videos/{shortUuid}/watching every ~20 s |
Next up (v0.2+)
- Unified "accessible videos" feed: merge public-local + own private into one paged, deduplicated list (v0.1 keeps them as two sidebar entries).
- Logout / "switch account" button on the Home screen.
- Playback polish: resume from server-recorded position via
GET videos/{shortUuid}?userHistory=true(verified working, returnsuserHistory.currentTime), next/previous video from list, focus current item in history screen. - Thumbnails of private/internal videos may 404 — verified on tube.jeena.net: instance thumbnail paths are publicly readable (HTTP 200 without auth); add a fallback poster only if other instances behave differently.
- Security note for tube.jeena.net: object-storage (R2) media for private test videos is publicly readable without token ("private" only via URL obscurity). Flag to the instance admin; the app must not rely on this laxness.
- Verify
searchTarget=localchannel search behaves well for instances without federation; considersearch/video-channelsendpoint as an alternative. - Release build: enable
minifyEnabled+ R8 rules, decide on signing, versioning scheme. - Verify
searchTarget=localchannel search behaves well for instances without federation; considersearch/video-channelsendpoint as an alternative. - (Verified 2026-10-10 via the test account account) history subscriptions + watching endpoints
behave as documented; upload seeding uses flat multipart form fields on
/api/v1/videos/upload(legacy), not a metadata JSON part — only relevant for seeding test data, the app itself doesn't upload. - Error UX: friendlier messages (offline, instance down, wrong credentials vs. expired token → re-login screen), retry buttons.
- i18n: move user-facing strings to
strings.xml, consider German + English. - Video detail screen (description, tags, views, duration, channel page link).
Longer term
- Multiple saved instances / switching between them.
- Live streams playback (HLS live), premieres.
- Subtitles/captions selection.
- Downloads for offline watching (probably limited to public videos).
- Comments viewing (read-only) — needs moderation-safe UI thinking.
BACKLOGtriage rhythm: keep "Next up" ≤ 8 items.- Out of scope by user request (do not implement without asking): uploading, editing, subscribing/unsubscribing, deleting, creating channels/users/playlists.