From b3a938b53adf0d1bf3edeb8aa04904afbabedfbd Mon Sep 17 00:00:00 2001 From: Fredrik Burmester Date: Sat, 28 Sep 2024 18:32:08 +0200 Subject: [PATCH] wip --- components/downloads/ActiveDownload.tsx | 6 +++- components/settings/SettingToggles.tsx | 47 +++++++++++++++++++++++++ providers/DownloadProvider.tsx | 25 ++++++++++--- utils/atoms/settings.ts | 1 + 4 files changed, 73 insertions(+), 6 deletions(-) diff --git a/components/downloads/ActiveDownload.tsx b/components/downloads/ActiveDownload.tsx index 898feb59..d77c2dc7 100644 --- a/components/downloads/ActiveDownload.tsx +++ b/components/downloads/ActiveDownload.tsx @@ -21,7 +21,11 @@ export const ActiveDownload: React.FC = ({ ...props }) => { mutationFn: async () => { if (!process) throw new Error("No active download"); - await axios.delete(settings?.optimizedVersionsServerUrl + process.id); + await axios.delete(settings?.optimizedVersionsServerUrl + process.id, { + headers: { + Authorization: `Bearer ${settings?.optimizedVersionsAuthHeader}`, + }, + }); const tasks = await checkForExistingDownloads(); for (const task of tasks) task.stop(); clearProcess(); diff --git a/components/settings/SettingToggles.tsx b/components/settings/SettingToggles.tsx index 6eef150c..a256c4fe 100644 --- a/components/settings/SettingToggles.tsx +++ b/components/settings/SettingToggles.tsx @@ -35,6 +35,8 @@ export const SettingToggles: React.FC = ({ ...props }) => { const [marlinUrl, setMarlinUrl] = useState(""); const [optimizedVersionsServerUrl, setOptimizedVersionsServerUrl] = useState(""); + const [optimizedVersionsAuthHeader, setOptimizedVersionsAuthHeader] = + useState(""); const queryClient = useQueryClient(); @@ -500,6 +502,51 @@ export const SettingToggles: React.FC = ({ ...props }) => { )} + + + + Optimized versions auth header + + + The auth header for the optimized versions server. + + + + + setOptimizedVersionsAuthHeader(text)} + /> + + + + + {settings.optimizedVersionsAuthHeader && ( + + Current: {settings.optimizedVersionsAuthHeader} + + )} + diff --git a/providers/DownloadProvider.tsx b/providers/DownloadProvider.tsx index 71f3dccd..c71e9781 100644 --- a/providers/DownloadProvider.tsx +++ b/providers/DownloadProvider.tsx @@ -19,6 +19,7 @@ import React, { useCallback, useContext, useEffect, + useMemo, useState, } from "react"; import { toast } from "sonner-native"; @@ -42,6 +43,10 @@ function useDownloadProvider() { const [process, setProcess] = useState(null); const [settings] = useSettings(); + const authHeader = useMemo(() => { + return `Bearer ${settings?.optimizedVersionsAuthHeader}`; + }, [settings]); + const { data: downloadedFiles, isLoading, @@ -105,8 +110,12 @@ function useDownloadProvider() { id: process.id, url: settings?.optimizedVersionsServerUrl + "download/" + process.id, destination: `${directories.documents}/${process?.item.Id}.mp4`, + headers: { + Authorization: authHeader, + }, }) .begin(() => { + toast.info(`Download started for ${process.item.Name}`); updateProcess((prev) => { if (!prev) return null; return { @@ -167,7 +176,8 @@ function useDownloadProvider() { if (process.state === "optimizing") { const job = await checkJobStatus( process.id, - settings?.optimizedVersionsServerUrl + settings?.optimizedVersionsServerUrl, + authHeader ); if (!job) { @@ -232,6 +242,7 @@ function useDownloadProvider() { { headers: { "Content-Type": "application/json", + Authorization: authHeader, }, } ); @@ -249,7 +260,7 @@ function useDownloadProvider() { state: "optimizing", }); - toast.success(`Optimization job started for ${item.Name}`); + toast.success(`Optimization started for ${item.Name}`); } catch (error) { console.error("Error in startBackgroundDownload:", error); toast.error(`Failed to start download for ${item.Name}`); @@ -428,13 +439,17 @@ export function useDownload() { const checkJobStatus = async ( id: string, - baseUrl: string + baseUrl: string, + authHeader?: string | null ): Promise<{ progress: number; status: "running" | "completed" | "failed" | "cancelled"; }> => { - const statusResponse = await axios.get(`${baseUrl}job-status/${id}`); - + const statusResponse = await axios.get(`${baseUrl}job-status/${id}`, { + headers: { + Authorization: authHeader, + }, + }); if (statusResponse.status !== 200) { throw new Error("Failed to fetch job status"); } diff --git a/utils/atoms/settings.ts b/utils/atoms/settings.ts index 9618efa4..2e8ac5a0 100644 --- a/utils/atoms/settings.ts +++ b/utils/atoms/settings.ts @@ -73,6 +73,7 @@ type Settings = { forwardSkipTime: number; rewindSkipTime: number; optimizedVersionsServerUrl?: string | null; + optimizedVersionsAuthHeader?: string | null; }; /** *