tv-anarchy/v2/pillars/watch.md
Natalie 4a2ceb9781 feat(offline): inline star-to-keep and trash-to-cull on cache rows
Surface the existing pin (keep-from-cull) and per-file delete actions as
visible inline buttons on each offline cache row instead of context-menu-only:
a star toggles protection from auto-cull (and restore-if-missing), a trash
culls that file early. Aligns wording/icons to the star metaphor.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 00:12:41 -04:00

3.1 KiB

Watch

Job: Play media and surface what to watch next on the device you choose.

One-liner: What am I watching, on which screen, right now?

Split from Library: catalog scan, browse grids, metadata live under library.md. Watch consumes library data for Home rails and Player.


Scope

In Out
Playback control (play/pause/seek/volume/queue) Library scan, index rebuild (Library)
Home presentation (rails, play actions) Metadata enrichment queue (Library)
Player chrome, skip intro, up next Torrent search (Download)
Continue Watching UX Show grouping logic (Library)
Play queue popover Device registry (Devices)
Now Playing, media keys Shared media placement (Devices)
Offline playback path resolution Offline policy editor (Devices)
Adult play / queue UX Adult catalog rotation (Library)

User surfaces

macOS

Tab / area Role
Home Rails, resume, launch play
Player Transport, skip intro, queue rail
Adult Play into queue (catalog from Library)
Play Queue (global) PlaylistController

Library · Metadata · Devices · Search · Downloads · Settings are other pillars (same app shell).

iOS

Tab Role
Remote Control registered devices
Library tab play In-app VLC (Watch + Library data)

Core modules

Playback

Module Role
PlayerController Target routing, poll, commands, skip-intro
PlayerTarget, VLCTarget, MpvTarget, QuickTimeTarget, RokuTarget Backends
PlaylistController User queue
NowPlayingController System media keys
TrackPreferenceStore Per-series track prefs
WatchState In-session progress
VLCLauncher Start local VLC

Watch history

Module Role
WatchHistory Continue Watching data
BlackWatchlog Black resume map

Labels (from Library)

Watch does not parse filenames for display. Player hero, queue chips, and up-next read CachedEpisode.displayName / episodeTitlelibrary-display.md.

Playback paths

Module Role
MediaPaths Resolve play URL — placement-aware (Devices)
DownloadsIndex Local file routing

Appearance

Module Role
AppTheme, Theme/, Winamp skins watch-appearance.md

Settings (Watch pillar)

See settings.md: playback mode, skip intro, Home rails, media keys, adult playback mode, hover previews.


Net touchpoints

Net part Watch consumer
intro-markers PlayerController skip window

Watch produces skip observations.


State

Watch-primary reads: library snapshot, watchlog, placement index (Devices), settings watch section.


Tests

ContinueWatchingTests, WatchStateTests, PlaylistTests, NowPlayingTests, PlayerDisplayTests, SleepTimerTests, TrackPreferenceTests, MpvIPCParserTests, RokuTargetTests, MediaPathsTests.