+
-{/if}
\ No newline at end of file
+{/if}
From 08578eef0b96e00179308907ab925efc42ca1e2f Mon Sep 17 00:00:00 2001
From: 0d0 <0d0acre@esiliati.org>
Date: Sat, 19 Apr 2025 17:58:13 +0200
Subject: [PATCH 105/113] Update download method
---
src/lib/client/downloader.ts | 21 +++++++
src/lib/components/DownloadManager.svelte | 68 ++++++++++++++++++++++-
src/lib/server/ytdlp.ts | 15 +++--
src/routes/+page.svelte | 17 +++++-
src/routes/download/+server.ts | 30 +++++-----
5 files changed, 128 insertions(+), 23 deletions(-)
create mode 100644 src/lib/client/downloader.ts
diff --git a/src/lib/client/downloader.ts b/src/lib/client/downloader.ts
new file mode 100644
index 0000000..cb2d821
--- /dev/null
+++ b/src/lib/client/downloader.ts
@@ -0,0 +1,21 @@
+const createAnchorElement = (url: string, filename: string): HTMLAnchorElement => {
+ const anchor = document.createElement('a');
+ anchor.href = url;
+ anchor.download = filename;
+ return anchor
+}
+export const download = async (url: string, filename: string) => {
+ const response = await fetch(url);
+
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+
+ const blob = await response.blob();
+ const objectURL = window.URL.createObjectURL(blob);
+ const anchor = createAnchorElement(url, filename)
+ document.body.appendChild(anchor);
+ anchor.click();
+ anchor.remove();
+ window.URL.revokeObjectURL(objectURL);
+}
diff --git a/src/lib/components/DownloadManager.svelte b/src/lib/components/DownloadManager.svelte
index 2ca9b46..761f47f 100644
--- a/src/lib/components/DownloadManager.svelte
+++ b/src/lib/components/DownloadManager.svelte
@@ -1,3 +1,69 @@
+
+{#if visible}
+
+{/if}
diff --git a/src/lib/server/ytdlp.ts b/src/lib/server/ytdlp.ts
index a3758b6..631c969 100644
--- a/src/lib/server/ytdlp.ts
+++ b/src/lib/server/ytdlp.ts
@@ -5,7 +5,7 @@ import supportedFormats from '$lib/common/supportedFormats.json';
import { logger, mimeTypeMap } from '$lib/server/helpers';
const YTDLP_PATH: string = env.YTDLP_PATH as string;
-const HTTPS_PROXY: string = env.v as string;
+const HTTPS_PROXY: string = env.HTTPS_PROXY as string;
export const ytdl = create(YTDLP_PATH);
@@ -13,17 +13,22 @@ export const ytdl = create(YTDLP_PATH);
* Fetch YouTube metadata (title, uploader/artist)
*/
export async function getYouTubeMetadata(link: string) {
- return await ytdl(link, {
+ const options = {
dumpSingleJson: true,
noCheckCertificates: true,
noWarnings: true,
preferFreeFormats: true,
- proxy: HTTPS_PROXY ? HTTPS_PROXY : ''
- });
+ }
+
+ if (HTTPS_PROXY) {
+ options.proxy = HTTPS_PROXY;
+ }
+
+ return await ytdl(link, options);
}
/**
- * Streams the YouTube video/audio using yt-dlp
+ * Streams the YouTube video/audio using youtube-dl-exec
*/
export function streamYouTube(link: string, format: string): ReadableStream