Federation: read-only browsing of a peer instance's library (3.5)
Configure peers as [[remote]] entries (name, url, optional password) and browse their libraries from this instance, read-only. - remote.rs: RemoteClient (blocking reqwest + rustls + cookie jar). Fetches the peer's /api/library, logging in first if the peer has a password and retrying on a 401. Media is not proxied: the library JSON's media URLs (/files/, /music-files/, /api/transcode/, /api/sub-vtt/) are rewritten to absolute peer URLs with the peer's read-only feed token appended, so video streams straight from the peer to the browser/mpv while only the small JSON passes through us. - web.rs: auth_middleware now also accepts the feed token for GET /api/transcode/ and /api/sub-vtt/ (read-only media, same class as /files/), so a transcoded peer streams remotely. New GET /api/remotes and /api/remotes/:id/library (the RemoteClient runs under spawn_blocking). - web UI: a 🌐 Remotes sidebar switcher; remote mode is read-only (hides the download bar + per-card mutating actions, keeps Play). - desktop: a 🌐 Remotes screen that fetches a peer's library off-thread and plays via mpv on the tokenized URL. - config.rs: [[remote]] section list; reqwest dep added (rustls/blocking/ cookies, no system OpenSSL). Verified end-to-end against a second local instance, including a transcoded stream returning HTTP 200 via the token. ROADMAP 3.5 + CLAUDE.md updated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
d797f2a698
commit
033572d3bd
10 changed files with 899 additions and 13 deletions
21
ROADMAP.md
21
ROADMAP.md
|
|
@ -167,11 +167,24 @@ folder and assigns), desktop shows "Move all → group". Pure arithmetic
|
|||
over the in-memory library, so it's recomputed on demand with no job.
|
||||
Never moves anything until you apply.
|
||||
|
||||
### 3.5 Federation / multi-host
|
||||
### 3.5 Federation / multi-host — DONE
|
||||
|
||||
A "remote library" mode where one yt-offline instance can browse
|
||||
another's library (read-only) over the same axum API. Useful for a
|
||||
"home archive + travel laptop" setup.
|
||||
A read-only "remote library" mode: configure peers as `[[remote]]` entries
|
||||
(name, url, optional password) and browse their libraries from this
|
||||
instance. `remote.rs`'s `RemoteClient` (blocking reqwest, rustls, cookie
|
||||
jar) fetches the peer's `/api/library`, logging in first if the peer has a
|
||||
password. Media is **not** proxied — the library JSON's media URLs
|
||||
(`/files/`, `/music-files/`, `/api/transcode/`, `/api/sub-vtt/`) are
|
||||
rewritten to absolute peer URLs with the peer's read-only **feed token**
|
||||
appended, which the peer's auth middleware now accepts for those GET paths.
|
||||
So only the small library JSON travels through us; video streams straight
|
||||
from the peer to the browser/mpv. Surfaced in both UIs: the web sidebar
|
||||
gets a 🌐 Remotes switcher (read-only mode hides the download bar + per-card
|
||||
mutating actions); desktop gets a 🌐 Remotes screen that fetches off-thread
|
||||
and plays via mpv on the tokenized URL. Verified end-to-end against a second
|
||||
local instance (incl. a transcoded stream returning HTTP 200 with the token).
|
||||
Follow-ups: an in-UI "add remote" editor (today it's config-file only) and a
|
||||
desktop thumbnail/grid view to match the web fidelity.
|
||||
|
||||
### 3.6 Comment viewer enhancements — DONE
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue