From 5f22be6c20850c29b300de1feff8640662bdd398 Mon Sep 17 00:00:00 2001 From: foxyz Date: Fri, 9 Oct 2026 06:54:08 +0300 Subject: [PATCH] Roadmap: wishlist placed (ready gate, quick UI, drop/paste, Files, yt-dlp, AniList, ops) Co-Authored-By: Claude Opus 5.5 --- docs/ROADMAP.md | 55 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 23bbc42..88f4bbc 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -6,13 +6,56 @@ off by deleting it in the same commit as the code. Wire changes also edit ## Backlog -1. **Windows: first real use.** CI builds and publishes +1. **Ready gate and swap (protocol bump).** Bug: three in a server, a file + relayed from one; two readied and it played, the third (not ready) was + dragged along frame by frame. Members present at a swap must all count + for the gate (a joiner after the swap still counts only once ready); + a swap keeps everyone's ready flag, with a per-user "Unready when the + video changes" setting. Shared auto-skip lives here too (below). + +2. **Quick UI** + - Tab no longer moves focus (Tab toggles chat, then Space pressed a + random button); Space is always ready outside text fields. + - Opening chat focuses its field; Esc/Tab hands focus back. + - Unread badge on uosc's chat button; an unread hint in fullscreen. + - Your avatar in the strip the same size as the party's. + - Chat panel: people's messages only, a toggle shows activity. + - Skip OP/ED: no "Skip 1:30" guess when the file has chapters (a + missing OP chapter is on purpose); the pill shows for the first 5 s + of the range and again when the mouse moves (like the controls). + - Auto-skip OP/ED: a server-wide setting in `state` (anyone toggles it, + the feed says who); exactly one client seeks (the media's `swapBy`, + else the lowest fresh member id), only for real ranges (segments or + OP/ED chapters), as a normal user seek. + - Volume above 100% like mpv. + +3. **Drag & drop and paste** (`fox_utils`): drop or Ctrl+V anywhere; a + small card asks how to open it (file: put up / add its folder to Files; + link: put up with the link modes; image: the avatar editor when open). + +4. **Files**: detected series groups start collapsed (big libraries); + next episode from Files (by parsed episode, with the countdown). Later: + tracking for file series. + +5. **yt-dlp** (epic): players that open links themselves use mpv's ytdl + hook (bundled on Windows); then relay of single-file formats; then a + resolver for the Link preview (title, thumbnail, duration). + +6. **AniList account**: sign in (OAuth via a localhost callback), "My list" + filter on the Schedule; today's "Following" (AnimeFlow's monitored + shows) becomes "On the server". + +7. **Ops**: `watch-together-server --upgrade` (a VPS has no GTK for the + app's updater); check shaders on Windows; the relay e2e "source drops + uncleanly and resumes" fails about half the time under the full suite. + +8. **Windows: first real use.** CI builds and publishes `watch-together--windows-x64.zip` (libmpv bundled) and runs the updater tests on NTFS; a friend has joined from it. Still unchecked: fullscreen controls, hosting (firewall prompt), in-app update from one release to the next. The rest of the desktop tests are not in CI. -2. **Relay follow-ups** (see ARCHITECTURE "Relay"). First real use: owner's +9. **Relay follow-ups** (see ARCHITECTURE "Relay"). First real use: owner's PC -> VPS -> friend, Jellyfin and a file. Then: - Source takeover: when the source leaves, another member with an account on that Jellyfin (or the same file: name, size, hash) takes @@ -22,9 +65,9 @@ off by deleting it in the same commit as the code. Wire changes also edit - Show who is relaying and how fast in the member list; warn the source when its upload is below the media's bitrate. -3. **Jellyfin** (epic, below). +10. **Jellyfin** (epic, below). -4. **Smaller items** +11. **Smaller items** - Video output robustness: if media_kit's hardware path regresses to software (see ARCHITECTURE, Media: render mode), vendor a media_kit_video fix that builds the EGL display from GDK's native @@ -39,6 +82,10 @@ off by deleting it in the same commit as the code. Wire changes also edit outage with cache exhaustion (`tool/shaper.dart --kill-after`); assert no OOM, no stuck session, drift recovers. - Chat history pane (today: activity log only). + - Images in chat (paste a screenshot; server memory only): possible, + not wanted yet. + - HTTP: move the app's clients (Jellyfin, AniList, AnimeFlow, updater) + to dio from `fox_utils` when touching them, for retries/interceptors. - The `state` broadcast carries the full media URL, which can include an `api_key` (recognised Jellyfin links become refs; other links do not). - TLS: document a reverse proxy in front of the server.