From 6b8779f5275b33a8383944675308e0f6eb4139d1 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 05:22:37 +0100 Subject: [PATCH 001/116] better code --- src/lib/server/helpers.ts | 8 ++++++++ src/routes/download/+server.ts | 36 +++++++++++++++++++++++++++------- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/lib/server/helpers.ts b/src/lib/server/helpers.ts index af5111d..b334c5b 100644 --- a/src/lib/server/helpers.ts +++ b/src/lib/server/helpers.ts @@ -1,7 +1,15 @@ import formats from '$lib/common/supportedFormats.json'; const formatMime = new Map(Object.entries(formats)) +export const isURLValid = (url: string) => { + try { + new URL(url) + } catch { + return false + } + return true; +} export const mimeTypeMap = formatMime; export const contentTypeFromFormat = (format: string): string => { const toReturn: string | undefined = formatMime.get(format) diff --git a/src/routes/download/+server.ts b/src/routes/download/+server.ts index 305f0b4..5d5c6aa 100644 --- a/src/routes/download/+server.ts +++ b/src/routes/download/+server.ts @@ -1,9 +1,9 @@ import { error } from '@sveltejs/kit'; import type { RequestHandler } from './$types'; import { getYouTubeMetadata, streamYouTube, ytdl } from '$lib/server/ytdlp'; -import { contentTypeFromFormat, mimeTypeMap } from '$lib/server/helpers'; +import { contentTypeFromFormat, isURLValid, mimeTypeMap } from '$lib/server/helpers'; -export const GET: RequestHandler = async ({ url }) => { +const validateRequest = (url) => { // Get query params const link = url.searchParams.get('link'); const format = url.searchParams.get('format'); // mp3, mp4 @@ -19,16 +19,37 @@ export const GET: RequestHandler = async ({ url }) => { throw error(400, 'Currently, only YouTube is supported'); } - try { - let filename = `you-clicked-no-metadata-so-i-cant-put-a-correct-name.${format}`; + if (!isURLValid(link)) { + throw error(400, 'URL not valid'); + } - if (metadata) { + if (!mimeTypeMap.get(format)) { + throw error(400, 'format not valid'); + } + + return { + link, format, source, metadata + } +} +export const GET: RequestHandler = async ({ url }) => { + const { format, source, metadata, link } = validateRequest(url) + let filename = `you-clicked-no-metadata-so-i-cant-put-a-correct-name.${format}`; + + if (metadata) { + try { // Fetch metadata for filename const metadata = await getYouTubeMetadata(link); const { title, uploader } = metadata; const safeTitle = `${uploader} - ${title}`; filename = `${safeTitle}.${format}`; + } catch (err) { + console.error(err) + console.error('Error fetching metadata:'); + throw error(500, 'Failed to fetch video metadata'); } + } + + try { // Stream video/audio return new Response(streamYouTube(link, format), { @@ -38,9 +59,10 @@ export const GET: RequestHandler = async ({ url }) => { 'Set-Cookie': 'downloading=0' } }); + } catch (err) { console.error(err) - console.error('Error fetching metadata:'); - throw error(500, 'Failed to fetch video metadata'); + console.error('Filed to stream file'); + throw error(500, 'Failed to stream file'); } }; From 99096f3d2445c936c195f1951e0369bb62ca4fc1 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 05:26:29 +0100 Subject: [PATCH 002/116] 0.7.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0b8b9a4..e0e9445 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "dl.emersa.it", - "version": "0.7.0", + "version": "0.7.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "dl.emersa.it", - "version": "0.7.0", + "version": "0.7.1", "dependencies": { "@tailwindcss/forms": "^0.5.10", "@tailwindcss/postcss": "^4.0.8", diff --git a/package.json b/package.json index 1ac8d55..8913ae7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "dl.emersa.it", "private": true, - "version": "0.7.0", + "version": "0.7.1", "type": "module", "scripts": { "dev": "vite dev", From 631b9e44f05d58506804229ebd267da2186231e1 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 05:38:29 +0100 Subject: [PATCH 003/116] update name --- src/routes/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 714644d..34f5934 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -172,7 +172,7 @@
- + Date: Sun, 23 Feb 2025 06:05:06 +0100 Subject: [PATCH 004/116] New deploy method --- .forgejo/workflows/release.yaml | 1 - scripts/deploy_example.sh | 11 ++++------- scripts/install.sh | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+), 8 deletions(-) create mode 100755 scripts/install.sh diff --git a/.forgejo/workflows/release.yaml b/.forgejo/workflows/release.yaml index ae17057..51f6387 100644 --- a/.forgejo/workflows/release.yaml +++ b/.forgejo/workflows/release.yaml @@ -32,7 +32,6 @@ jobs: touch .env echo "HOST=0.0.0.0" >> .env echo "ORIGIN=https://dl.emersa.it" >> .env - echo "YTDLP_PATH=./yt-dlp" >> .env echo "PUBLIC_VERSION=$(cat package.json | jq .version)" >> .env npm run build cp package* build/ diff --git a/scripts/deploy_example.sh b/scripts/deploy_example.sh index 4e1d417..2d17e31 100755 --- a/scripts/deploy_example.sh +++ b/scripts/deploy_example.sh @@ -6,10 +6,7 @@ SSH_SERVER="example" PROJECT_ROOT=example_directory SSH_REMOTE_DIR="${SSH_SERVER}:${PROJECT_ROOT}" -wget https://git.pweapon.org/odo/dl.emersa.it/releases/download/latest/build.tar.gz - -rsync -r --delete --progress build.tar.gz "${SSH_REMOTE_DIR}" - -ssh "${SSH_SERVER}" "rm -rf ${PROJECT_ROOT}; mkdir -p ${PROJECT_ROOT} ; cd ${PROJECT_ROOT} ; wget https://git.pweapon.org/odo/dl.emersa.it/releases/download/latest/build.tar.gz ; tar -xvf build.tar.gz -C . ; npm ci ; rm build.tar.gz" -#### CHANGE YOUR ${PROJECT_ROOT}/.env (specially ORIGIN) -ssh "${SSH_SERVER}" "systemctl restart downloader" +ssh "${SSH_SERVER}" "mkdir -p ${PROJECT_ROOT}" +rsync "${__dir}/install.sh" "${SSH_SERVER}:${PROJECT_ROOT}/install.sh" +ssh "${SSH_SERVER}" "${PROJECT_ROOT}/install.sh ${PROJECT_ROOT}" +ssh "${SSH_SERVER}" "systemctl restart downloader" \ No newline at end of file diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100755 index 0000000..929b156 --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,18 @@ +#!/usr/bin/bash + +PROJECT_ROOT=$1 + +if [ -z ${PROJECT_ROOT+x} ]; then + echo "error no project_root set" + exit 1 +fi + +mkdir -p "${PROJECT_ROOT}" +cd "${PROJECT_ROOT}" || exit 1 +rm -rf ./* +wget https://git.pweapon.org/odo/dl.emersa.it/releases/download/latest/build.tar.gz +tar -xvf build.tar.gz -C . +rm build.tar.gz +npm ci +npm run download-yt-dlp +echo "YTDLP_PATH=$(readlink -f yt-dlp)" >>.env From b5cbef9de7cfe6c699267ca4839f493f1d0968a9 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 06:05:57 +0100 Subject: [PATCH 005/116] use path also on spawn --- src/lib/server/ytdlp.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/server/ytdlp.ts b/src/lib/server/ytdlp.ts index 9afded2..0d6b107 100644 --- a/src/lib/server/ytdlp.ts +++ b/src/lib/server/ytdlp.ts @@ -43,7 +43,7 @@ export function streamYouTube(link: string, format: string): ReadableStream Date: Sun, 23 Feb 2025 06:06:26 +0100 Subject: [PATCH 006/116] 0.7.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e0e9445..054a99d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "dl.emersa.it", - "version": "0.7.1", + "version": "0.7.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "dl.emersa.it", - "version": "0.7.1", + "version": "0.7.2", "dependencies": { "@tailwindcss/forms": "^0.5.10", "@tailwindcss/postcss": "^4.0.8", diff --git a/package.json b/package.json index 8913ae7..dd288fb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "dl.emersa.it", "private": true, - "version": "0.7.1", + "version": "0.7.2", "type": "module", "scripts": { "dev": "vite dev", From 0d3b797ec852aec197e0032895ca0343e02358b1 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 06:12:33 +0100 Subject: [PATCH 007/116] Remove others --- src/routes/+page.svelte | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 34f5934..d9b8343 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -130,13 +130,16 @@ From 5d0fa4e951fe3ca63cf86ebd42fc60b01560b911 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 06:18:50 +0100 Subject: [PATCH 008/116] update systemd unit file --- configurations/downloader.service | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/configurations/downloader.service b/configurations/downloader.service index 8e042a7..a20a19e 100644 --- a/configurations/downloader.service +++ b/configurations/downloader.service @@ -5,9 +5,9 @@ After=network.target [Service] User=user Group=user -WorkingDirectory= -ExecStart=/usr/bin/node -Environment=ORIGIN=http://example.com +WorkingDirectory=/home/user/downloader +EnvironmentFile=/home/user/downloader/.env +ExecStart=/usr/bin/node /home/user/downloader Restart=always RestartSec=10 StandardOutput=syslog @@ -16,3 +16,4 @@ SyslogIdentifier=downloader [Install] WantedBy=multi-user.target + From 6f93574e8a85c28715ed3512c6a1d7185e832628 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 06:37:13 +0100 Subject: [PATCH 009/116] Remove useless helper --- src/lib/server/helpers.ts | 11 +---------- src/routes/download/+server.ts | 12 ++++++------ 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/lib/server/helpers.ts b/src/lib/server/helpers.ts index b334c5b..09cc730 100644 --- a/src/lib/server/helpers.ts +++ b/src/lib/server/helpers.ts @@ -10,13 +10,4 @@ export const isURLValid = (url: string) => { return true; } -export const mimeTypeMap = formatMime; -export const contentTypeFromFormat = (format: string): string => { - const toReturn: string | undefined = formatMime.get(format) - - if (!toReturn) { - throw new Error("Unsupported format") - } - - return toReturn; -} \ No newline at end of file +export const mimeTypeMap = formatMime; \ No newline at end of file diff --git a/src/routes/download/+server.ts b/src/routes/download/+server.ts index 5d5c6aa..6369cb5 100644 --- a/src/routes/download/+server.ts +++ b/src/routes/download/+server.ts @@ -1,9 +1,9 @@ import { error } from '@sveltejs/kit'; import type { RequestHandler } from './$types'; import { getYouTubeMetadata, streamYouTube, ytdl } from '$lib/server/ytdlp'; -import { contentTypeFromFormat, isURLValid, mimeTypeMap } from '$lib/server/helpers'; +import { isURLValid, mimeTypeMap } from '$lib/server/helpers'; -const validateRequest = (url) => { +const validateRequest = (url: URL) => { // Get query params const link = url.searchParams.get('link'); const format = url.searchParams.get('format'); // mp3, mp4 @@ -35,11 +35,11 @@ export const GET: RequestHandler = async ({ url }) => { const { format, source, metadata, link } = validateRequest(url) let filename = `you-clicked-no-metadata-so-i-cant-put-a-correct-name.${format}`; - if (metadata) { + if (!!metadata) { try { // Fetch metadata for filename - const metadata = await getYouTubeMetadata(link); - const { title, uploader } = metadata; + const ytMetadata = await getYouTubeMetadata(link); + const { title, uploader } = ytMetadata; const safeTitle = `${uploader} - ${title}`; filename = `${safeTitle}.${format}`; } catch (err) { @@ -54,7 +54,7 @@ export const GET: RequestHandler = async ({ url }) => { // Stream video/audio return new Response(streamYouTube(link, format), { headers: { - 'Content-Type': contentTypeFromFormat(format), + 'Content-Type': "text/event-stream", 'Content-Disposition': `attachment; filename="${filename}"`, 'Set-Cookie': 'downloading=0' } From da95e2024fda717ce8a1658d53650fed6d0ad947 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 06:37:43 +0100 Subject: [PATCH 010/116] 0.8.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 054a99d..53a91a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "dl.emersa.it", - "version": "0.7.2", + "version": "0.8.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "dl.emersa.it", - "version": "0.7.2", + "version": "0.8.0", "dependencies": { "@tailwindcss/forms": "^0.5.10", "@tailwindcss/postcss": "^4.0.8", diff --git a/package.json b/package.json index dd288fb..9d58049 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "dl.emersa.it", "private": true, - "version": "0.7.2", + "version": "0.8.0", "type": "module", "scripts": { "dev": "vite dev", From fa24bc435d100855c8bf9333469289399274a565 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 07:55:42 +0100 Subject: [PATCH 011/116] YTDLP_PATH everywhere --- src/lib/server/ytdlp.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/server/ytdlp.ts b/src/lib/server/ytdlp.ts index 0d6b107..5c5beb1 100644 --- a/src/lib/server/ytdlp.ts +++ b/src/lib/server/ytdlp.ts @@ -45,7 +45,7 @@ export function streamYouTube(link: string, format: string): ReadableStream controller.enqueue(chunk)); process.stdout.on('end', () => controller.close()); From f2673d112b2b875e10cc615720985bbb32512f39 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Mon, 24 Feb 2025 19:43:11 +0100 Subject: [PATCH 012/116] this should do it --- src/routes/+page.svelte | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index d9b8343..17e8029 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -104,7 +104,7 @@ -

🐙 Scaricatore 🐙

+

🐙 Scaricatore 🐙

@@ -226,10 +226,21 @@ diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index b52b963..e63159a 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -94,7 +94,7 @@
🐙 Scaricatore 🐙

-
- - -
+
+
+ + +
+ +
+ + +
+
@@ -151,21 +167,6 @@ />
- -
- - -
-