From e06d04f3872bf28641835c3a223462a7cfdc358b Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 02:01:54 +0100 Subject: [PATCH 001/134] every minute --- .forgejo/workflows/dependency_check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/dependency_check.yaml b/.forgejo/workflows/dependency_check.yaml index 57b010c..9c58232 100644 --- a/.forgejo/workflows/dependency_check.yaml +++ b/.forgejo/workflows/dependency_check.yaml @@ -2,7 +2,7 @@ name: Bump deps (only minor versions) on: schedule: - - cron: '0 0 * * *' # Runs every night at midnight (UTC) + - cron: '* * * * *' # Runs every night at midnight (UTC) workflow_dispatch: jobs: From a5e3e310b7a6f53c04bc1771f4912c80b0dbb11b Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 02:03:07 +0100 Subject: [PATCH 002/134] test --- .forgejo/workflows/dependency_check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/dependency_check.yaml b/.forgejo/workflows/dependency_check.yaml index 9c58232..c3b60cb 100644 --- a/.forgejo/workflows/dependency_check.yaml +++ b/.forgejo/workflows/dependency_check.yaml @@ -2,7 +2,7 @@ name: Bump deps (only minor versions) on: schedule: - - cron: '* * * * *' # Runs every night at midnight (UTC) + - cron: '4 1 * * *' # Runs every night at midnight (UTC) workflow_dispatch: jobs: From 7213189744ff55825cd6171b40069b9e89a9c301 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 02:03:40 +0100 Subject: [PATCH 003/134] test --- .forgejo/workflows/dependency_check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/dependency_check.yaml b/.forgejo/workflows/dependency_check.yaml index c3b60cb..9a9c77e 100644 --- a/.forgejo/workflows/dependency_check.yaml +++ b/.forgejo/workflows/dependency_check.yaml @@ -2,7 +2,7 @@ name: Bump deps (only minor versions) on: schedule: - - cron: '4 1 * * *' # Runs every night at midnight (UTC) + - cron: '5 3 * * *' # Runs every night at midnight (UTC) workflow_dispatch: jobs: From 11b0b9f6a217c2b5a76a0d05937ada2a069e5beb Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 02:04:53 +0100 Subject: [PATCH 004/134] test --- .forgejo/workflows/dependency_check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/dependency_check.yaml b/.forgejo/workflows/dependency_check.yaml index 9a9c77e..88ccae4 100644 --- a/.forgejo/workflows/dependency_check.yaml +++ b/.forgejo/workflows/dependency_check.yaml @@ -2,7 +2,7 @@ name: Bump deps (only minor versions) on: schedule: - - cron: '5 3 * * *' # Runs every night at midnight (UTC) + - cron: '6 2 * * *' # Runs every night at midnight (UTC) workflow_dispatch: jobs: From f20b9869cc2cd9e033e83f76b144195e8fece1bd Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 02:08:08 +0100 Subject: [PATCH 005/134] should work --- .forgejo/workflows/dependency_check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/dependency_check.yaml b/.forgejo/workflows/dependency_check.yaml index 88ccae4..bb6164c 100644 --- a/.forgejo/workflows/dependency_check.yaml +++ b/.forgejo/workflows/dependency_check.yaml @@ -2,7 +2,7 @@ name: Bump deps (only minor versions) on: schedule: - - cron: '6 2 * * *' # Runs every night at midnight (UTC) + - cron: '10 3 * * *' # Runs every night at midnight (UTC) workflow_dispatch: jobs: From 7c9b80917f872e962297796cd17df1d6d2d9056e Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 02:11:40 +0100 Subject: [PATCH 006/134] lol --- .forgejo/workflows/dependency_check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/dependency_check.yaml b/.forgejo/workflows/dependency_check.yaml index bb6164c..f7db261 100644 --- a/.forgejo/workflows/dependency_check.yaml +++ b/.forgejo/workflows/dependency_check.yaml @@ -2,7 +2,7 @@ name: Bump deps (only minor versions) on: schedule: - - cron: '10 3 * * *' # Runs every night at midnight (UTC) + - cron: '12 1 * * *' # Runs every night at midnight (UTC) workflow_dispatch: jobs: From 6e86aa7f8c58683e872e3bebb5124c396cea3567 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 02:12:19 +0100 Subject: [PATCH 007/134] maybe --- .forgejo/workflows/dependency_check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/dependency_check.yaml b/.forgejo/workflows/dependency_check.yaml index f7db261..bebd356 100644 --- a/.forgejo/workflows/dependency_check.yaml +++ b/.forgejo/workflows/dependency_check.yaml @@ -2,7 +2,7 @@ name: Bump deps (only minor versions) on: schedule: - - cron: '12 1 * * *' # Runs every night at midnight (UTC) + - cron: '14 1 * * *' # Runs every night at midnight (UTC) workflow_dispatch: jobs: From 15cb6779105ec6c60c1033fefe0015d28075962d Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 02:21:20 +0100 Subject: [PATCH 008/134] try --- .forgejo/workflows/dependency_check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/dependency_check.yaml b/.forgejo/workflows/dependency_check.yaml index bebd356..6e476b8 100644 --- a/.forgejo/workflows/dependency_check.yaml +++ b/.forgejo/workflows/dependency_check.yaml @@ -2,7 +2,7 @@ name: Bump deps (only minor versions) on: schedule: - - cron: '14 1 * * *' # Runs every night at midnight (UTC) + - cron: '23 1 * * *' # Runs every night at midnight (UTC) workflow_dispatch: jobs: From 79c3c820a48332371a319a9634689a12b8f84379 Mon Sep 17 00:00:00 2001 From: forgejo-bot Date: Sun, 23 Feb 2025 01:23:58 +0000 Subject: [PATCH 009/134] chore: update minor dependencies --- package.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 2c42c65..c10c2e4 100644 --- a/package.json +++ b/package.json @@ -15,26 +15,26 @@ "lint": "prettier --check . && eslint ." }, "devDependencies": { - "@eslint/compat": "^1.2.5", - "@eslint/js": "^9.18.0", - "@sveltejs/adapter-node": "^5.2.11", - "@sveltejs/kit": "^2.16.0", - "@sveltejs/vite-plugin-svelte": "^5.0.0", - "@tailwindcss/vite": "^4.0.0", - "eslint": "^9.18.0", + "@eslint/compat": "^1.2.7", + "@eslint/js": "^9.21.0", + "@sveltejs/adapter-node": "^5.2.12", + "@sveltejs/kit": "^2.17.2", + "@sveltejs/vite-plugin-svelte": "^5.0.3", + "@tailwindcss/vite": "^4.0.8", + "eslint": "^9.21.0", "eslint-config-prettier": "^10.0.1", "eslint-plugin-svelte": "^2.46.1", - "globals": "^15.14.0", + "globals": "^15.15.0", "mdsvex": "^0.12.3", - "prettier": "^3.4.2", + "prettier": "^3.5.2", "prettier-plugin-svelte": "^3.3.3", "prettier-plugin-tailwindcss": "^0.6.11", - "svelte": "^5.0.0", - "svelte-check": "^4.0.0", - "tailwindcss": "^4.0.0", - "typescript": "^5.0.0", - "typescript-eslint": "^8.20.0", - "vite": "^6.0.0" + "svelte": "^5.20.2", + "svelte-check": "^4.1.4", + "tailwindcss": "^4.0.8", + "typescript": "^5.7.3", + "typescript-eslint": "^8.24.1", + "vite": "^6.1.1" }, "dependencies": { "@tailwindcss/forms": "^0.5.10", From 10d8ce8a15b0ff4b1aaafd8b96937fb425511369 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 02:31:10 +0100 Subject: [PATCH 010/134] fix dc --- .forgejo/workflows/dependency_check.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/dependency_check.yaml b/.forgejo/workflows/dependency_check.yaml index 6e476b8..cb2c3d5 100644 --- a/.forgejo/workflows/dependency_check.yaml +++ b/.forgejo/workflows/dependency_check.yaml @@ -2,7 +2,7 @@ name: Bump deps (only minor versions) on: schedule: - - cron: '23 1 * * *' # Runs every night at midnight (UTC) + - cron: '0 23 * * *' # Runs every night at midnight workflow_dispatch: jobs: From 151b5432cdbba4e3909bcd7f29e1e0857560d76f Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 02:35:00 +0100 Subject: [PATCH 011/134] Update globals --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c10c2e4..d8d9c6f 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "eslint": "^9.21.0", "eslint-config-prettier": "^10.0.1", "eslint-plugin-svelte": "^2.46.1", - "globals": "^15.15.0", + "globals": "^16.0.0", "mdsvex": "^0.12.3", "prettier": "^3.5.2", "prettier-plugin-svelte": "^3.3.3", From 204bceeee3e5e0b50b0dbc8682daaf7600e63884 Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 04:54:48 +0100 Subject: [PATCH 012/134] Add +x to downloaded yt-dlp --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d8d9c6f..2e46d7f 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "dev": "vite dev", "build": "vite build", - "download-yt-dlp": "wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux -O yt-dlp", + "download-yt-dlp": "wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux -O yt-dlp ; chmod +x yt-dlp", "preview": "vite preview", "prepare": "svelte-kit sync || echo ''", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", From dcb7cfec276d93eeb139a15c140c8f59e99ff9cd Mon Sep 17 00:00:00 2001 From: 0d0 <0d0acre@esiliati.org> Date: Sun, 23 Feb 2025 04:55:09 +0100 Subject: [PATCH 013/134] Add loader and new formats --- src/lib/common/supportedFormats.json | 6 ++ src/lib/components/Loader.svelte | 6 +- src/lib/server/helpers.ts | 14 ++++ src/lib/server/ytdlp.ts | 23 ++++-- src/routes/+page.svelte | 112 +++++++++++++++++++++------ src/routes/download/+server.ts | 27 ++++--- 6 files changed, 148 insertions(+), 40 deletions(-) create mode 100644 src/lib/common/supportedFormats.json create mode 100644 src/lib/server/helpers.ts diff --git a/src/lib/common/supportedFormats.json b/src/lib/common/supportedFormats.json new file mode 100644 index 0000000..80187b0 --- /dev/null +++ b/src/lib/common/supportedFormats.json @@ -0,0 +1,6 @@ +{ + "mp3": "audio/mpeg", + "mp4": "video/mp4", + "opus": "audio/ogg", + "wav": "audio/wav" +} \ No newline at end of file diff --git a/src/lib/components/Loader.svelte b/src/lib/components/Loader.svelte index 62b43fc..df33172 100644 --- a/src/lib/components/Loader.svelte +++ b/src/lib/components/Loader.svelte @@ -1,6 +1,8 @@
-
+
+ +
diff --git a/src/lib/server/helpers.ts b/src/lib/server/helpers.ts new file mode 100644 index 0000000..af5111d --- /dev/null +++ b/src/lib/server/helpers.ts @@ -0,0 +1,14 @@ +import formats from '$lib/common/supportedFormats.json'; + +const formatMime = new Map(Object.entries(formats)) + +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 diff --git a/src/lib/server/ytdlp.ts b/src/lib/server/ytdlp.ts index f37ddef..9afded2 100644 --- a/src/lib/server/ytdlp.ts +++ b/src/lib/server/ytdlp.ts @@ -1,6 +1,9 @@ import { create } from 'youtube-dl-exec'; import { env } from '$env/dynamic/private'; import { spawn } from 'node:child_process'; +import supportedFormats from '$lib/common/supportedFormats.json'; +import { mimeTypeMap } from '$lib/server/helpers'; + const YTDLP_PATH: string = env.YTDLP_PATH as string; export const ytdl = create(YTDLP_PATH); @@ -21,19 +24,27 @@ export async function getYouTubeMetadata(link: string) { * Streams the YouTube video/audio using youtube-dl-exec */ export function streamYouTube(link: string, format: string): ReadableStream { + const mimeType: string | undefined = mimeTypeMap.get(format) + + if (!mimeType) { + throw new Error("Unsupported format"); + } + return new ReadableStream({ start(controller) { const args = [ '-o', '-', - format === 'mp3' ? '--embed-metadata' : '', - '--format', - format === 'mp3' ? 'bestaudio' : 'best', - '--audio-format', - format === 'mp3' ? 'mp3' : '', - '--no-playlist' ].filter(Boolean); + if(mimeType?.includes('audio')) { + args.push(...['--extract-audio', '--embed-metadata', '--embed-thumbnail', '--audio-format', format]) + } else if (mimeType.includes('video')) { + args.push(...['--embed-metadata', '--embed-thumbnail', '--format', format]) + } + + console.info(`yt-dlp ${args.join(' ')} ${link}`) + const process = spawn('yt-dlp', [...args, link], { stdio: ['ignore', 'pipe', 'ignore'] }); process.stdout.on('data', (chunk) => controller.enqueue(chunk)); diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 098ef91..0e2f7e8 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,35 +1,80 @@ -
+ -

🐙 Scaricatore 🐙

+

🐙 Scaricatore 🐙

- Choose Source: + Choose Source:
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 026/134] 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 027/134] 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 028/134] 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 029/134] 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 030/134] 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 @@ />
- -
- - -
-