peter
7b8505af95
feat(reader): a Google Takeout export becomes watch state and Watch later
...
The YouTube API reads neither a user's watch history nor their Watch later list, so the Takeout
export is the only way in. `POST /api/takeout` takes one file of it (watch-history.json or
Watch later-videos.csv, told apart by content), keeps its videos in `takeout_items` and queues the
user's `takeout_import` run, whose outcome reaches their inbox.
The run marks watched the known videos the Shorts probe has cleared, at the Takeout time; a Short
is not marked, and a state the user set here (watched, hidden, or changed after that time) wins, by
the upsert's own condition. A video the catalog does not know yet waits with no outcome. Watch later
videos are fetched if unknown and appended oldest first.
An ad-hoc run can now ask for a completion notice (`run_ad_hoc(..., notify=True)`).
2026-10-23 17:04:54 +02:00
..
2026-10-05 00:19:38 +02:00
2026-10-21 01:05:12 +02:00
2026-10-16 01:13:31 +02:00
2026-10-19 00:53:44 +02:00
2026-10-19 02:03:14 +02:00
2026-10-10 15:35:12 +02:00
2026-09-19 19:19:29 +02:00
2026-10-17 23:08:55 +02:00
2026-10-05 00:19:39 +02:00
2026-10-18 23:45:53 +02:00
2026-10-18 15:38:32 +02:00
2026-10-21 01:05:12 +02:00
2026-10-20 00:45:22 +02:00
2026-09-29 21:21:19 +02:00
2026-10-23 17:04:54 +02:00
2026-10-05 00:19:39 +02:00
2026-10-19 00:19:03 +02:00
2026-10-19 02:36:19 +02:00
2026-10-19 02:32:20 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 02:32:20 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-19 21:42:07 +02:00
2026-10-18 23:45:53 +02:00
2026-10-05 03:16:27 +02:00
2026-10-12 20:54:47 +02:00
2026-10-18 23:45:53 +02:00
2026-10-19 00:19:03 +02:00
2026-10-19 00:19:03 +02:00
2026-10-05 03:16:27 +02:00
2026-10-18 23:45:53 +02:00
2026-10-18 23:45:53 +02:00
2026-10-18 23:45:53 +02:00
2026-10-18 23:45:53 +02:00
2026-10-18 23:45:53 +02:00
2026-09-04 20:29:33 +02:00
2026-10-05 00:19:39 +02:00
2026-09-04 20:29:33 +02:00
2026-10-19 21:42:07 +02:00
2026-10-20 01:56:31 +02:00
2026-10-05 00:19:39 +02:00
2026-10-18 23:45:53 +02:00
2026-10-19 01:28:38 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 02:03:14 +02:00
2026-08-23 07:43:06 +02:00
2026-10-06 21:02:07 +02:00
2026-10-18 23:45:53 +02:00
2026-10-20 00:45:22 +02:00
2026-10-18 23:45:53 +02:00
2026-10-19 00:19:03 +02:00
2026-10-19 02:03:14 +02:00
2026-10-10 21:56:47 +02:00
2026-08-28 02:37:56 +02:00
2026-10-21 02:05:33 +02:00
2026-10-19 21:42:07 +02:00
2026-09-19 07:34:17 +02:00
2026-10-05 00:19:39 +02:00
2026-10-18 23:45:53 +02:00
2026-10-19 02:32:20 +02:00
2026-10-18 23:45:53 +02:00
2026-10-15 04:58:16 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-19 02:03:14 +02:00
2026-09-01 23:31:49 +02:00
2026-10-21 02:05:33 +02:00
2026-10-04 17:53:19 +02:00
2026-10-05 00:19:50 +02:00
2026-10-13 00:14:09 +02:00
2026-10-11 04:42:55 +02:00
2026-10-13 00:14:09 +02:00
2026-10-13 00:14:09 +02:00
2026-10-15 04:58:16 +02:00
2026-10-18 21:21:19 +02:00
2026-10-18 02:23:15 +02:00
2026-10-20 01:56:30 +02:00
2026-10-05 00:19:39 +02:00
2026-08-23 07:43:06 +02:00
2026-10-19 02:03:14 +02:00
2026-08-23 07:43:06 +02:00
2026-10-18 23:45:53 +02:00
2026-08-23 07:43:06 +02:00
2026-08-23 07:43:06 +02:00
2026-10-18 23:45:53 +02:00
2026-10-05 00:19:39 +02:00
2026-10-20 01:56:31 +02:00
2026-10-20 00:45:22 +02:00
2026-10-18 23:45:53 +02:00
2026-10-05 03:16:27 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 00:53:44 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-08 21:18:48 +02:00
2026-10-19 22:11:20 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 22:42:46 +02:00
2026-10-05 00:19:39 +02:00
2026-10-20 04:36:26 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-05 00:19:39 +02:00
2026-10-19 22:11:20 +02:00
2026-10-19 22:11:20 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 22:11:57 +02:00
2026-10-20 01:56:30 +02:00
2026-10-06 22:31:48 +02:00
2026-10-07 23:16:25 +02:00
2026-10-20 04:36:26 +02:00
2026-09-27 13:58:23 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-19 21:42:07 +02:00
2026-10-20 01:56:30 +02:00
2026-10-06 23:55:41 +02:00
2026-10-11 05:34:25 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-04 17:53:19 +02:00
2026-10-05 00:19:38 +02:00
2026-10-20 01:56:30 +02:00
2026-10-06 23:55:41 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:50 +02:00
2026-10-20 01:56:30 +02:00
2026-10-19 22:11:20 +02:00
2026-08-23 07:43:06 +02:00
2026-10-18 15:38:32 +02:00
2026-10-05 00:19:39 +02:00
2026-10-19 02:03:14 +02:00
2026-10-19 02:32:20 +02:00
2026-10-05 00:19:39 +02:00
2026-08-23 07:43:06 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-11 05:34:25 +02:00
2026-10-15 04:58:16 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-18 03:45:18 +02:00
2026-10-19 02:03:14 +02:00
2026-10-23 17:04:54 +02:00
2026-08-23 07:43:06 +02:00
2026-08-23 07:43:06 +02:00
2026-10-23 17:04:54 +02:00
2026-10-18 23:45:53 +02:00
2026-10-18 23:45:53 +02:00
2026-09-05 04:02:57 +02:00
2026-10-05 00:19:38 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-18 23:45:53 +02:00
2026-10-13 00:14:09 +02:00
2026-09-18 22:50:37 +02:00
2026-09-19 04:51:31 +02:00
2026-10-19 02:03:14 +02:00
2026-10-05 00:19:39 +02:00