From 883f5dc801f5b0f13f6c845c962282a6ecefe191 Mon Sep 17 00:00:00 2001 From: n8detar Date: Sat, 23 Apr 2022 09:40:51 -0700 Subject: [PATCH 1/5] Added rescan subs and start download functionality --- src/lib/getDownloads.ts | 22 +++++++++++++++++++++- src/pages/download.tsx | 19 +++++++++++++++---- src/types/download.ts | 5 +++++ 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/lib/getDownloads.ts b/src/lib/getDownloads.ts index 02f9ead..3483416 100755 --- a/src/lib/getDownloads.ts +++ b/src/lib/getDownloads.ts @@ -1,4 +1,4 @@ -import { Download } from "../types/download"; +import { Download, Task } from "../types/download"; import { getTAUrl } from "./constants"; const TA_BASE_URL = getTAUrl(); @@ -106,4 +106,24 @@ export const sendMoveVideoQueuedIgnored = async (token: string, videoId: string, throw new Error("Error moving video to" + status + "."); } return response.json(); +}; + +export const sendTasks = async (token: string, task: string): Promise => { + var data = { + "run": task + }; + const response = await fetch(`${TA_BASE_URL.server}/api/task/`, { + body: JSON.stringify(data), + headers: { + Accept: "application/json", + "Content-Type": "application/json", + Authorization: `Token ${token}`, + mode: "no-cors", + }, + method: "POST" + }); + if (!response.ok) { + throw new Error("Error running task: " + task + "."); + } + return response.json(); }; \ No newline at end of file diff --git a/src/pages/download.tsx b/src/pages/download.tsx index 3682de5..eff38e3 100755 --- a/src/pages/download.tsx +++ b/src/pages/download.tsx @@ -5,8 +5,7 @@ import { dehydrate, QueryClient, useQuery } from "react-query"; import { CustomHead } from "../components/CustomHead"; import { Layout } from "../components/Layout"; import NextImage from "next/image"; -import { getDownloads, sendDeleteAllQueuedIgnored, sendDeleteVideoQueuedIgnored, sendMoveVideoQueuedIgnored } from "../lib/getDownloads"; -import { sendDownloads } from "../lib/getDownloads"; +import { getDownloads, sendDownloads, sendDeleteAllQueuedIgnored, sendDeleteVideoQueuedIgnored, sendMoveVideoQueuedIgnored, sendTasks } from "../lib/getDownloads"; import RescanIcon from "../images/icon-rescan.svg"; import DownloadIcon from "../images/icon-download.svg"; import AddIcon from "../images/icon-add.svg"; @@ -124,6 +123,18 @@ const Download: NextPage = () => { .catch(error => handleSetErrorMessage(error.message)); } + const handleSendTask = (session: string, task: string) => { + sendTasks(session, task).then((response) => { + if (response.success) { + handleSetErrorMessage(null); + } else { + handleSetErrorMessage("Error running task: " + response.task + "."); + } + + }) + .catch(error => handleSetErrorMessage(error.message)); + } + return ( <> @@ -202,7 +213,7 @@ const Download: NextPage = () => { alt="rescan-icon" title="Rescan subscriptions" // className="rotate-img" // Set when rescanning - onClick={() => console.log("rescanPending()")} + onClick={() => handleSendTask(session.ta_token.token, "rescan_pending")} /> {/* rescan-icon */}

Rescan subscriptions

@@ -215,7 +226,7 @@ const Download: NextPage = () => { alt="download-icon" title="Start download" // className="bounce-img" // Set when video is downloading - onClick={() => console.log("dlPending()")} + onClick={() => handleSendTask(session.ta_token.token, "download_pending")} /> {/* download-icon */}

Start download

diff --git a/src/types/download.ts b/src/types/download.ts index c14eadb..e0fb714 100755 --- a/src/types/download.ts +++ b/src/types/download.ts @@ -5,6 +5,11 @@ export interface Download { message: string; } +export interface Task { + success: boolean; + task: string; +} + export interface Paginate { page_size: number; page_from: number; From 0ea19defcc26c1b9a093dec2ffe735a9b102e159 Mon Sep 17 00:00:00 2001 From: n8detar Date: Sat, 23 Apr 2022 11:36:55 -0700 Subject: [PATCH 2/5] Added type `Tasks` --- src/types/download.ts | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/src/types/download.ts b/src/types/download.ts index e0fb714..2f4beb6 100755 --- a/src/types/download.ts +++ b/src/types/download.ts @@ -10,6 +10,8 @@ export interface Task { task: string; } +export type Tasks = "download_pending" | "rescan_pending"; + export interface Paginate { page_size: number; page_from: number; @@ -21,11 +23,6 @@ export interface Paginate { total_hits: number; } -// export interface DownloadResponse { -// data: Datum[]; -// message: string; -// } - export interface Config { archive: Archive; default_view: DefaultView; @@ -111,19 +108,6 @@ export interface Datum { title: string; vid_thumb_url: string; youtube_id: string; - - // active: boolean; - // category: Category[]; - // channel: Channel; - // date_downloaded: number; - // description: string; - // media_url: string; - // player: Player; - // playlist: Playlist[]; - // stats: Stats; - // tags: string[]; - // vid_last_refresh: LastRefresh; - // vid_thumb_base64: string; } export enum Category { From e41ac9276b26a880801530e3accb0db2942479a6 Mon Sep 17 00:00:00 2001 From: n8detar Date: Sat, 23 Apr 2022 11:37:46 -0700 Subject: [PATCH 3/5] Switched to type `Tasks` & message cleanup --- src/lib/getDownloads.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lib/getDownloads.ts b/src/lib/getDownloads.ts index 3483416..492d6bd 100755 --- a/src/lib/getDownloads.ts +++ b/src/lib/getDownloads.ts @@ -1,6 +1,8 @@ -import { Download, Task } from "../types/download"; +import { Download, Task, Tasks } from "../types/download"; import { getTAUrl } from "./constants"; + + const TA_BASE_URL = getTAUrl(); export const getDownloads = async (token: string, filter: boolean, pageNumber: number): Promise => { @@ -108,7 +110,7 @@ export const sendMoveVideoQueuedIgnored = async (token: string, videoId: string, return response.json(); }; -export const sendTasks = async (token: string, task: string): Promise => { +export const sendTasks = async (token: string, task: Tasks): Promise => { var data = { "run": task }; @@ -123,7 +125,7 @@ export const sendTasks = async (token: string, task: string): Promise => { method: "POST" }); if (!response.ok) { - throw new Error("Error running task: " + task + "."); + throw new Error(`Error running task: ${task}.`); } return response.json(); }; \ No newline at end of file From 30f0dbb81aaa62cc94c687806ade1c005da8b69b Mon Sep 17 00:00:00 2001 From: n8detar Date: Sat, 23 Apr 2022 11:38:16 -0700 Subject: [PATCH 4/5] Switched to type `Tasks` & message cleanup --- src/pages/download.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pages/download.tsx b/src/pages/download.tsx index eff38e3..2de63fd 100755 --- a/src/pages/download.tsx +++ b/src/pages/download.tsx @@ -14,6 +14,7 @@ import ListViewIcon from "../images/icon-listview.svg"; import StopIcon from "../images/icon-stop.svg"; import CloseIcon from "../images/icon-close.svg"; import { getTAUrl } from "../lib/constants"; +import { Tasks } from "../types/download"; const TA_BASE_URL = getTAUrl(); @@ -123,12 +124,12 @@ const Download: NextPage = () => { .catch(error => handleSetErrorMessage(error.message)); } - const handleSendTask = (session: string, task: string) => { + const handleSendTask = (session: string, task: Tasks) => { sendTasks(session, task).then((response) => { if (response.success) { handleSetErrorMessage(null); } else { - handleSetErrorMessage("Error running task: " + response.task + "."); + handleSetErrorMessage(`Error running task: ${response.task}.`); } }) From b5b076793d271a826ce5de58ddc4ec9ab57e1e04 Mon Sep 17 00:00:00 2001 From: n8detar Date: Sat, 30 Apr 2022 11:24:45 -0700 Subject: [PATCH 5/5] Added no token message. --- src/lib/getDownloads.ts | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/lib/getDownloads.ts b/src/lib/getDownloads.ts index 492d6bd..c317481 100755 --- a/src/lib/getDownloads.ts +++ b/src/lib/getDownloads.ts @@ -6,6 +6,9 @@ import { getTAUrl } from "./constants"; const TA_BASE_URL = getTAUrl(); export const getDownloads = async (token: string, filter: boolean, pageNumber: number): Promise => { + if (!token) { + throw new Error(`Unable to fetch downloads, no token provided.`); + } const response = await fetch(`${TA_BASE_URL.server}/api/download/?filter=${filter ? 'ignore' : 'pending'}&page=${pageNumber}`, { headers: { Accept: "application/json", @@ -30,6 +33,9 @@ export const getDownloads = async (token: string, filter: boolean, pageNumber: n }; export const sendDownloads = async (token: string, input: string): Promise => { + if (!token) { + throw new Error(`Unable to send downloads, no token provided.`); + } var data = { "data": [{ "youtube_id": input, @@ -44,7 +50,7 @@ export const sendDownloads = async (token: string, input: string): Promise => { + if (!token) { + throw new Error(`Unable to delete downloads, no token provided.`); + } const response = await fetch(`${TA_BASE_URL.server}/api/download/?filter=${filter}`, { headers: { Accept: "application/json", @@ -64,7 +73,7 @@ export const sendDeleteAllQueuedIgnored = async (token: string, filter: string): Authorization: `Token ${token}`, mode: "no-cors", }, - method: "DELETE" + method: "DELETE", }); if (!response.ok) { throw new Error("Error removing all videos."); @@ -74,6 +83,9 @@ export const sendDeleteAllQueuedIgnored = async (token: string, filter: string): }; export const sendDeleteVideoQueuedIgnored = async (token: string, videoId: string): Promise => { + if (!token) { + throw new Error(`Unable to delete downloads, no token provided.`); + } const response = await fetch(`${TA_BASE_URL.server}/api/download/${videoId}/`, { headers: { Accept: "application/json", @@ -81,7 +93,7 @@ export const sendDeleteVideoQueuedIgnored = async (token: string, videoId: strin Authorization: `Token ${token}`, mode: "no-cors", }, - method: "DELETE" + method: "DELETE", }); if (!response.ok) { throw new Error("Error removing video."); @@ -91,6 +103,9 @@ export const sendDeleteVideoQueuedIgnored = async (token: string, videoId: strin }; export const sendMoveVideoQueuedIgnored = async (token: string, videoId: string, status: string): Promise => { + if (!token) { + throw new Error(`Unable to move downloads, no token provided.`); + } var data = { "status": status }; @@ -102,7 +117,7 @@ export const sendMoveVideoQueuedIgnored = async (token: string, videoId: string, Authorization: `Token ${token}`, mode: "no-cors", }, - method: "POST" + method: "POST", }); if (!response.ok) { throw new Error("Error moving video to" + status + "."); @@ -111,6 +126,9 @@ export const sendMoveVideoQueuedIgnored = async (token: string, videoId: string, }; export const sendTasks = async (token: string, task: Tasks): Promise => { + if (!token) { + throw new Error(`Unable to start task, no token provided.`); + } var data = { "run": task }; @@ -122,7 +140,7 @@ export const sendTasks = async (token: string, task: Tasks): Promise => { Authorization: `Token ${token}`, mode: "no-cors", }, - method: "POST" + method: "POST", }); if (!response.ok) { throw new Error(`Error running task: ${task}.`);