API changes

This commit is contained in:
n8detar 2022-04-17 12:47:18 -07:00
parent 374229d61d
commit 93822fc43c
2 changed files with 28 additions and 45 deletions

10
tubearchivist/www/src/lib/getDownloads.ts Normal file → Executable file
View File

@ -1,9 +1,11 @@
import { Download } from "../types/download"; import { Download } from "../types/download";
import { DownloadResponse } from "../types/download"; import { DownloadResponse } from "../types/download";
import { TA_BASE_URL } from "./constants"; import { getTAUrl } from "./constants";
export const getDownloads = async (token: string): Promise<Download> => { const TA_BASE_URL = getTAUrl();
const response = await fetch(`${TA_BASE_URL}/api/download/`, {
export const getDownloads = async (token: string, ignoredStatus: boolean): Promise<Download> => {
const response = await fetch(`${TA_BASE_URL.server}/api/download/?filter=${ignoredStatus ? 'ignore' : 'pending'}`, {
headers: { headers: {
Accept: "application/json", Accept: "application/json",
"Content-Type": "application/json", "Content-Type": "application/json",
@ -24,7 +26,7 @@ export const sendDownloads = async (token: string, input: string): Promise<Downl
"status": "pending" "status": "pending"
}] }]
}; };
const response = await fetch(`${TA_BASE_URL}/api/download/`, { const response = await fetch(`${TA_BASE_URL.server}/api/download/`, {
body: JSON.stringify(data), body: JSON.stringify(data),
headers: { headers: {
Accept: "application/json", Accept: "application/json",

View File

@ -5,7 +5,6 @@ import { dehydrate, QueryClient, useQuery } from "react-query";
import { CustomHead } from "../components/CustomHead"; import { CustomHead } from "../components/CustomHead";
import { Layout } from "../components/Layout"; import { Layout } from "../components/Layout";
import NextImage from "next/image"; import NextImage from "next/image";
import { TA_BASE_URL } from "../lib/constants";
import { getDownloads } from "../lib/getDownloads"; import { getDownloads } from "../lib/getDownloads";
import { sendDownloads } from "../lib/getDownloads"; import { sendDownloads } from "../lib/getDownloads";
import RescanIcon from "../images/icon-rescan.svg"; import RescanIcon from "../images/icon-rescan.svg";
@ -13,7 +12,9 @@ import DownloadIcon from "../images/icon-download.svg";
import AddIcon from "../images/icon-add.svg"; import AddIcon from "../images/icon-add.svg";
import GridViewIcon from "../images/icon-gridview.svg"; import GridViewIcon from "../images/icon-gridview.svg";
import ListViewIcon from "../images/icon-listview.svg"; import ListViewIcon from "../images/icon-listview.svg";
import { getTAUrl } from "../lib/constants";
const TA_BASE_URL = getTAUrl();
type ViewStyle = "grid" | "list"; type ViewStyle = "grid" | "list";
type IgnoredStatus = boolean; type IgnoredStatus = boolean;
@ -34,7 +35,7 @@ export const getServerSideProps: GetServerSideProps = async (context) => {
} }
await queryClient.prefetchQuery(["downloads", session.ta_token.token], () => await queryClient.prefetchQuery(["downloads", session.ta_token.token], () =>
getDownloads(session.ta_token.token) getDownloads(session.ta_token.token, false)
); );
return { return {
@ -51,16 +52,17 @@ const Download: NextPage = () => {
data: downloads, data: downloads,
error, error,
isLoading, isLoading,
refetch,
} = useQuery( } = useQuery(
["downloads", session.ta_token.token], ["downloads", session.ta_token.token],
() => getDownloads(session.ta_token.token), () => getDownloads(session.ta_token.token, ignoredStatus),
{ {
enabled: !!session?.ta_token?.token, enabled: !!session?.ta_token?.token,
refetchInterval: 1500,
refetchIntervalInBackground: false,
} }
); );
var count = 0;
const [viewStyle, setViewStyle] = useState<ViewStyle>(downloads?.config?.default_view?.downloads); const [viewStyle, setViewStyle] = useState<ViewStyle>(downloads?.config?.default_view?.downloads);
const [ignoredStatus, setIgnoredStatus] = useState<IgnoredStatus>(false); const [ignoredStatus, setIgnoredStatus] = useState<IgnoredStatus>(false);
const [formHidden, setFormHidden] = useState<FormHidden>(true); const [formHidden, setFormHidden] = useState<FormHidden>(true);
@ -71,6 +73,7 @@ const Download: NextPage = () => {
const handleSetIgnoredStatus = (selectedIgnoredStatus: IgnoredStatus) => { const handleSetIgnoredStatus = (selectedIgnoredStatus: IgnoredStatus) => {
setIgnoredStatus(selectedIgnoredStatus); setIgnoredStatus(selectedIgnoredStatus);
refetch();
}; };
const handleSetFormHidden = (selectedFormHidden: FormHidden) => { const handleSetFormHidden = (selectedFormHidden: FormHidden) => {
@ -142,31 +145,17 @@ const Download: NextPage = () => {
<div className="view-controls"> <div className="view-controls">
<div className="toggle"> <div className="toggle">
<span>Show only ignored videos:</span> <span>Show only ignored videos:</span>
{ignoredStatus && <div className="toggleBox">
<div className="toggleBox"> <input
<input id="show_ignored_only"
id="show_ignored_only" onChange={() => handleSetIgnoredStatus(!ignoredStatus)}
onChange={() => handleSetIgnoredStatus(false)} type="checkbox"
type="checkbox" checked={ignoredStatus}
checked />
/> <label htmlFor="" className={ignoredStatus ? "onbtn" : "ofbtn"}>
<label htmlFor="" className="onbtn"> {ignoredStatus ? "On" : "Off"}
On </label>
</label> </div>
</div>
}
{!ignoredStatus &&
<div className="toggleBox">
<input
id="show_ignored_only"
onChange={() => handleSetIgnoredStatus(true)}
type="checkbox"
/>
<label htmlFor="" className="ofbtn">
Off
</label>
</div>
}
</div> </div>
<div className="view-icons"> <div className="view-icons">
<NextImage <NextImage
@ -201,21 +190,14 @@ const Download: NextPage = () => {
<button onClick={() => console.log("deleteQueue(this)")} data-id="pending" title="Delete all pending videos from the queue">Delete all queued</button> <button onClick={() => console.log("deleteQueue(this)")} data-id="pending" title="Delete all pending videos from the queue">Delete all queued</button>
</div> </div>
} }
{downloads?.data?.forEach((video) => { <h3>Total videos: {downloads?.data?.length} {!downloads?.data?.length && <p>No videos queued for download. Press rescan subscriptions to check if there are any new videos.</p>}</h3>
if ((video?.status == "ignore" && ignoredStatus) || (video?.status == "pending" && !ignoredStatus)) {
count++;
}
})}
<h3>Total videos: {count} {!count && <p>No videos queued for download. Press rescan subscriptions to check if there are any new videos.</p>}</h3>
<div className={`dl-list ${viewStyle}`}> <div className={`dl-list ${viewStyle}`}>
{downloads.data && {downloads?.data &&
downloads?.data?.map((video) => { downloads?.data?.map((video) => {
count++;
if ((video?.status == "ignore" && ignoredStatus) || (video?.status == "pending" && !ignoredStatus)) {
return ( return (
<div key={video?.youtube_id} className={`dl-item ${viewStyle}`}> <div key={video?.youtube_id} className={`dl-item ${viewStyle}`}>
<div className={`dl-thumb ${viewStyle}`}> <div className={`dl-thumb ${viewStyle}`}>
<img src={`${TA_BASE_URL}${video?.vid_thumb_url}`} alt="video_thumb"></img> <img src={`${TA_BASE_URL.server}${video?.vid_thumb_url}`} alt="video_thumb"></img>
{ignoredStatus && <span>ignored</span>} {ignoredStatus && <span>ignored</span>}
{/* {% if show_ignored_only %} */} {/* {% if show_ignored_only %} */}
{/* <span>ignored</span> */} {/* <span>ignored</span> */}
@ -257,7 +239,6 @@ const Download: NextPage = () => {
</div> </div>
</div> </div>
); );
}
}) })
} }
{/* {% if results %} */} {/* {% if results %} */}