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>
74 lines
2.9 KiB
Markdown
74 lines
2.9 KiB
Markdown
# TVAnarchy
|
|
|
|
Native macOS app (SwiftUI) for the home media stack on **plum**, plus an iOS
|
|
companion. Unifies what was previously CLI/MCP-only: pick a **playback device**
|
|
(plum's VLC/QuickTime or the HDMI TV on **black**) and drive transport, browse a
|
|
cached library, search and manage downloads, enrich metadata, and manage the
|
|
device registry — all from one app.
|
|
|
|
**Hybrid architecture:** the control plane is native Swift (HTTP to VLC's Lua
|
|
interface; mpv JSON-IPC over SSH to black — zero new runtime deps); the
|
|
data-heavy plane reuses the vendored helper projects (`mcp/`, `recommender/`,
|
|
`search/`) as subprocesses. See [docs/](docs/README.md) for the full picture and
|
|
[docs/roadmap.md](docs/roadmap.md) for built-vs-designed status.
|
|
|
|
## Build & dev loop
|
|
|
|
The easiest way is the `./run` wrapper (see its `usage` and comments for all targets):
|
|
|
|
```sh
|
|
./run # (or ./run dev) — stamp + xcodegen + Debug build + install + relaunch
|
|
./run test
|
|
./run clean
|
|
./run governor fleet status
|
|
./run mcp
|
|
./run bridge
|
|
./run typecheck
|
|
./run test:all
|
|
./run deploy
|
|
...
|
|
```
|
|
|
|
For manual / Xcode:
|
|
|
|
```sh
|
|
brew install xcodegen # if not already present
|
|
xcodegen generate # project.yml -> TVAnarchy.xcodeproj
|
|
xcodebuild -scheme TVAnarchy -destination 'platform=macOS' build
|
|
# or open TVAnarchy.xcodeproj in Xcode and Run
|
|
```
|
|
|
|
See [docs/operations.md](docs/operations.md) for full build/install/deploy flows, release cuts, and per-platform update.
|
|
|
|
`TVAnarchy.xcodeproj` is generated and git-ignored — `project.yml` is the source of truth.
|
|
|
|
## Pillars (v2)
|
|
|
|
**Watch · Download · Net** — product organization and full repo correlation:
|
|
[`v2/README.md`](v2/README.md).
|
|
|
|
## Layout
|
|
|
|
- `Sources/TVAnarchyCore/` — framework: models, `PlayerTarget` protocol + impls,
|
|
library/metadata/torrents/VPN subsystems, device registry.
|
|
- `Sources/TVAnarchy/` — SwiftUI macOS app (App, RootView, feature views:
|
|
Home/Player/Library/Search/Downloads/Metadata/Adult/Devices/Logs/Settings).
|
|
- `Sources/TVAnarchyiOS/` — iOS companion (VLCKit player, library, downloads,
|
|
remote control over an HTTP bridge).
|
|
- `Tests/TVAnarchyCoreTests/`, `Tests/TVAnarchyiOSUITests/` — unit + UI tests.
|
|
- `governor/`, `mcp/`, `recommender/`, `search/` — helper subsystems (own READMEs).
|
|
- `fleet/` — designed-only mesh layer; `tools/` — release/update/stamping scripts;
|
|
`docs/` — cross-cutting documentation.
|
|
|
|
## Playback devices
|
|
|
|
- **Plum VLC** — HTTP to `http://127.0.0.1:8080/requests/…` (password from
|
|
`~/.config/portable-net-tv/config.json` or `$VLC_HTTP_PASSWORD`).
|
|
- **Black (mpv)** — mpv JSON-IPC over SSH, endpoints LAN `10.0.0.11` →
|
|
WG overlay `10.9.0.4` fallback (the LAN address flaps). Launch/library/stats
|
|
are delegated to per-device command templates wrapping `/usr/local/bin/black-tv`
|
|
(the legacy `blacktv` kind auto-migrates to this).
|
|
- **QuickTime** — local, zero-install, AppleScript-driven.
|
|
|
|
Devices live in `~/.config/tv-anarchy/devices.json` and are editable in the
|
|
Devices tab.
|