docs: update README for restyle, Takeout guide, and replacing import
This commit is contained in:
@@ -6,11 +6,20 @@ already downloaded. Built for the flight.
|
|||||||
|
|
||||||
Tauri 2 · Rust · React · Tailwind CSS 4 · SQLite
|
Tauri 2 · Rust · React · Tailwind CSS 4 · SQLite
|
||||||
|
|
||||||
|
Styled to `DESIGN-SYSTEM.md`: slate and sky, a 9–15px type ladder, outline-first
|
||||||
|
controls, borders for separation and shadows only for elevation, with light and dark
|
||||||
|
both designed rather than one derived from the other.
|
||||||
|
|
||||||
## How it works
|
## How it works
|
||||||
|
|
||||||
**Subscriptions come from Google Takeout, not the API.** Export *YouTube subscriptions*
|
**Subscriptions come from Google Takeout, not the API.** Export *YouTube subscriptions*
|
||||||
from [Takeout](https://takeout.google.com/) and import the `subscriptions.csv` in
|
from [Takeout](https://takeout.google.com/) and import the `subscriptions.csv` in
|
||||||
Settings. No OAuth, no API key, no Google Cloud project, nothing secret on disk.
|
Settings — which carries a seven-step walkthrough with the exact URLs. No OAuth, no API
|
||||||
|
key, no Google Cloud project, nothing secret on disk.
|
||||||
|
|
||||||
|
Importing **replaces** your subscription list: the CSV becomes the whole truth. Channels
|
||||||
|
no longer in it are removed along with their videos and downloaded files. A confirmation
|
||||||
|
dialog names exactly what will be deleted before anything happens.
|
||||||
|
|
||||||
**Video metadata comes from YouTube's public Atom feed** — one request per channel to
|
**Video metadata comes from YouTube's public Atom feed** — one request per channel to
|
||||||
`youtube.com/feeds/videos.xml?channel_id=…`, fetched 8 at a time and merged into a single
|
`youtube.com/feeds/videos.xml?channel_id=…`, fetched 8 at a time and merged into a single
|
||||||
@@ -38,15 +47,15 @@ streams that must be merged.
|
|||||||
npm install && npm run tauri dev
|
npm install && npm run tauri dev
|
||||||
```
|
```
|
||||||
|
|
||||||
Build a real app bundle:
|
Build and install a real app bundle:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run tauri build
|
npm run tauri build -- --bundles app && cp -R src-tauri/target/release/bundle/macos/FlightTube.app /Applications/
|
||||||
```
|
```
|
||||||
|
|
||||||
## Using it
|
## Using it
|
||||||
|
|
||||||
1. **Settings → Import subscriptions.csv** — point it at your Takeout export.
|
1. **Settings** — follow the seven-step Takeout guide, then **Import subscriptions.csv**.
|
||||||
2. **Refresh** — pulls the latest videos from every channel.
|
2. **Refresh** — pulls the latest videos from every channel.
|
||||||
3. **Download** on any video — progress shows live on the button; click again to cancel.
|
3. **Download** on any video — progress shows live on the button; click again to cancel.
|
||||||
4. Click a **downloaded** video to play it in the app. Click an undownloaded one to open
|
4. Click a **downloaded** video to play it in the app. Click an undownloaded one to open
|
||||||
@@ -54,7 +63,8 @@ npm run tauri build
|
|||||||
5. **Offline** — the app detects a lost connection and collapses the feed to your
|
5. **Offline** — the app detects a lost connection and collapses the feed to your
|
||||||
downloads. The connectivity pill also toggles a forced offline mode for testing.
|
downloads. The connectivity pill also toggles a forced offline mode for testing.
|
||||||
|
|
||||||
Videos land in `~/Movies/FlightTube` (changeable in Settings).
|
Videos land in `~/Movies/FlightTube` (changeable in Settings). Appearance follows the
|
||||||
|
system by default; Settings offers System / Light / Dark.
|
||||||
|
|
||||||
## Limitations
|
## Limitations
|
||||||
|
|
||||||
@@ -70,9 +80,10 @@ Videos land in `~/Movies/FlightTube` (changeable in Settings).
|
|||||||
cd src-tauri && cargo test
|
cd src-tauri && cargo test
|
||||||
```
|
```
|
||||||
|
|
||||||
37 unit tests cover the three places malformed input actually bites: Takeout CSV parsing,
|
42 unit tests cover the three places malformed input actually bites: Takeout CSV parsing,
|
||||||
Atom feed parsing (against a captured real response), and `yt-dlp` progress-line parsing —
|
Atom feed parsing (against a captured real response), and `yt-dlp` progress-line parsing —
|
||||||
plus the database rule that a refresh must never clobber download state.
|
plus the database rules that a refresh must never clobber download state and that a
|
||||||
|
replacing import drops exactly the right channels.
|
||||||
|
|
||||||
Two network-dependent tests are excluded by default:
|
Two network-dependent tests are excluded by default:
|
||||||
|
|
||||||
@@ -94,7 +105,9 @@ src-tauri/src/
|
|||||||
commands.rs Tauri command surface — delegates only
|
commands.rs Tauri command surface — delegates only
|
||||||
src/
|
src/
|
||||||
components/ Sidebar, TopBar, VideoRow, DownloadButton, Player, Settings
|
components/ Sidebar, TopBar, VideoRow, DownloadButton, Player, Settings
|
||||||
hooks/ useFeed, useDownloads, useConnectivity
|
components/ui.tsx the design system's component vocabulary, in one place
|
||||||
|
components/TakeoutGuide the seven-step export walkthrough
|
||||||
|
hooks/ useFeed, useDownloads, useConnectivity, useAppearance
|
||||||
```
|
```
|
||||||
|
|
||||||
Design notes and the implementation plan are in `docs/superpowers/`.
|
Design notes and the implementation plan are in `docs/superpowers/`.
|
||||||
|
|||||||
Reference in New Issue
Block a user