Overhaul channel page: search, pagination, fetch all history

- Search bar filters indexed videos server-side; "Search YouTube" button
  triggers a deep channel search and indexes matching results
- Server-side sort (newest/oldest/A-Z/unwatched) + infinite scroll (60/page)
- "Fetch recent" indexes last 30, "Fetch all" indexes full history
- Auto-reindex on page visit if stale (>1h), refetches at 8s
- Add /channels/{id}/index-full endpoint (max_videos=0)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-26 22:15:09 +02:00
parent 50d61b5774
commit 0b482b5d49
3 changed files with 277 additions and 62 deletions

View File

@@ -41,10 +41,13 @@ export const getChannels = () => api.get("/channels");
export const getChannelFeed = (offset = 0) => api.get("/channels/feed", { params: { offset, limit: 24 } });
export const getChannel = (id) => api.get(`/channels/${id}`);
export const syncAllChannels = () => api.post("/channels/sync-all");
export const getChannelVideos = (id) => api.get(`/channels/${id}/videos`);
export const getChannelVideos = (id, sort = "newest", offset = 0, limit = 60, q = "") =>
api.get(`/channels/${id}/videos`, { params: { sort, offset, limit, ...(q ? { q } : {}) } });
export const searchChannelYoutube = (id, q) => api.post(`/channels/${id}/search`, null, { params: { q } });
export const followChannel = (id) => api.post(`/channels/${id}/follow`);
export const unfollowChannel = (id) => api.delete(`/channels/${id}/follow`);
export const indexChannel = (id) => api.post(`/channels/${id}/index`);
export const indexChannelFull = (id) => api.post(`/channels/${id}/index-full`);
export const followChannelByUrl = (data) => api.post("/channels/follow-by-url", data);
export const setChannelAutoDownload = (id, value) => api.patch(`/channels/${id}/auto-download`, { auto_download: value });
export const markChannelsSeen = () => api.post("/channels/mark-seen");