diff --git a/web/src/lib/api/api.ts b/web/src/lib/api/api.ts index fb8fb20b..e199f3e9 100644 --- a/web/src/lib/api/api.ts +++ b/web/src/lib/api/api.ts @@ -1,7 +1,6 @@ import { get } from "svelte/store"; import settings from "$lib/state/settings"; -import lazySettingGetter from "$lib/settings/lazy-get"; import { getSession } from "$lib/api/session"; import { currentApiURL } from "$lib/api/api-url"; @@ -10,7 +9,7 @@ import cachedInfo from "$lib/state/server-info"; import { getServerInfo } from "$lib/api/server-info"; import type { Optional } from "$lib/types/generic"; -import type { CobaltAPIResponse, CobaltErrorResponse } from "$lib/types/api"; +import type { CobaltAPIResponse, CobaltErrorResponse, CobaltSaveRequestBody } from "$lib/types/api"; const getAuthorization = async () => { const processing = get(settings).processing; @@ -43,32 +42,7 @@ const getAuthorization = async () => { } } -const request = async (url: string) => { - const getSetting = lazySettingGetter(get(settings)); - - const request = { - url, - - alwaysProxy: getSetting("save", "alwaysProxy"), - localProcessing: getSetting("save", "localProcessing"), - downloadMode: getSetting("save", "downloadMode"), - - filenameStyle: getSetting("save", "filenameStyle"), - disableMetadata: getSetting("save", "disableMetadata"), - - audioBitrate: getSetting("save", "audioBitrate"), - audioFormat: getSetting("save", "audioFormat"), - tiktokFullAudio: getSetting("save", "tiktokFullAudio"), - youtubeDubLang: getSetting("save", "youtubeDubLang"), - - youtubeVideoCodec: getSetting("save", "youtubeVideoCodec"), - videoQuality: getSetting("save", "videoQuality"), - youtubeHLS: getSetting("save", "youtubeHLS"), - - convertGif: getSetting("save", "convertGif"), - allowH265: getSetting("save", "allowH265"), - } - +const request = async (request: CobaltSaveRequestBody) => { await getServerInfo(); const getCachedInfo = get(cachedInfo); diff --git a/web/src/lib/api/saving-handler.ts b/web/src/lib/api/saving-handler.ts index 50d8b043..2277256a 100644 --- a/web/src/lib/api/saving-handler.ts +++ b/web/src/lib/api/saving-handler.ts @@ -1,4 +1,6 @@ import API from "$lib/api/api"; +import settings from "$lib/state/settings"; +import lazySettingGetter from "$lib/settings/lazy-get"; import { get } from "svelte/store"; import { t } from "$lib/i18n/translations"; @@ -26,7 +28,32 @@ export const savingHandler = async (link: string) => { }, ]; - const response = await API.request(link); + const getSetting = lazySettingGetter(get(settings)); + + const request = { + url: link, + + alwaysProxy: getSetting("save", "alwaysProxy"), + localProcessing: getSetting("save", "localProcessing"), + downloadMode: getSetting("save", "downloadMode"), + + filenameStyle: getSetting("save", "filenameStyle"), + disableMetadata: getSetting("save", "disableMetadata"), + + audioBitrate: getSetting("save", "audioBitrate"), + audioFormat: getSetting("save", "audioFormat"), + tiktokFullAudio: getSetting("save", "tiktokFullAudio"), + youtubeDubLang: getSetting("save", "youtubeDubLang"), + + youtubeVideoCodec: getSetting("save", "youtubeVideoCodec"), + videoQuality: getSetting("save", "videoQuality"), + youtubeHLS: getSetting("save", "youtubeHLS"), + + convertGif: getSetting("save", "convertGif"), + allowH265: getSetting("save", "allowH265"), + } + + const response = await API.request(request); if (!response) { downloadButtonState.set("error"); diff --git a/web/src/lib/settings/lazy-get.ts b/web/src/lib/settings/lazy-get.ts index 5e11bbad..47c21be6 100644 --- a/web/src/lib/settings/lazy-get.ts +++ b/web/src/lib/settings/lazy-get.ts @@ -1,5 +1,5 @@ +import defaults from "$lib/settings/defaults"; import type { CobaltSettings } from "$lib/types/settings"; -import defaults from "./defaults"; export default function lazySettingGetter(settings: CobaltSettings) { // Returns the setting value only if it differs from the default. diff --git a/web/src/lib/types/api.ts b/web/src/lib/types/api.ts index d91f7130..2e730444 100644 --- a/web/src/lib/types/api.ts +++ b/web/src/lib/types/api.ts @@ -1,3 +1,5 @@ +import type { CobaltSettings } from "$lib/types/settings"; + enum CobaltResponseType { Error = 'error', Picker = 'picker', @@ -91,6 +93,12 @@ export type CobaltServerInfo = { } } +// TODO: strict partial +// this allows for extra properties, which is not ideal, +// but i couldn't figure out how to make a strict partial :( +export type CobaltSaveRequestBody = + { url: string } & Partial>; + export type CobaltSessionResponse = CobaltSession | CobaltErrorResponse; export type CobaltServerInfoResponse = CobaltServerInfo | CobaltErrorResponse;