Compare commits

...

27 commits

Author SHA1 Message Date
forgejo-bot
885c802da6 chore: update minor dependencies 2025-04-17 23:00:58 +00:00
forgejo-bot
6d0d7ccecc chore: update minor dependencies 2025-04-16 23:00:47 +00:00
forgejo-bot
ff5cef233d chore: update minor dependencies 2025-04-15 23:00:57 +00:00
forgejo-bot
2b81cb2fa5 chore: update minor dependencies 2025-04-14 23:01:16 +00:00
forgejo-bot
9ffcd5f596 chore: update minor dependencies 2025-04-13 23:18:23 +00:00
forgejo-bot
1bd6d90814 chore: update minor dependencies 2025-04-12 23:01:12 +00:00
forgejo-bot
c46189ff83 chore: update minor dependencies 2025-04-11 23:01:16 +00:00
forgejo-bot
c416918a1a chore: update minor dependencies 2025-04-10 23:01:11 +00:00
forgejo-bot
7a3bf1fb45 chore: update minor dependencies 2025-04-09 23:01:13 +00:00
forgejo-bot
cd8a4c4d69 chore: update minor dependencies 2025-04-08 23:01:09 +00:00
0d0
9c7f7eace1 maybe its better like this
All checks were successful
Bump deps (only minor versions) / ci (push) Successful in 23s
2025-04-08 21:34:12 +02:00
0d0
5066c3ba7a better css 2025-04-08 21:31:34 +02:00
0d0
a833c43713 change tmp name 2025-04-08 21:18:48 +02:00
0d0
a18fbb8614 0.9.3-c
All checks were successful
Create Release / create-release (push) Successful in 32s
Bump deps (only minor versions) / ci (push) Successful in 20s
2025-04-08 20:33:08 +02:00
forgejo-bot
bb233f7cb8 chore: update minor dependencies 2025-04-07 23:01:13 +00:00
forgejo-bot
2f502b2530 chore: update minor dependencies 2025-04-05 23:00:17 +00:00
forgejo-bot
c32cc4d3e7 chore: update minor dependencies 2025-04-04 23:00:53 +00:00
forgejo-bot
5fc6b0700a chore: update minor dependencies 2025-04-03 23:00:53 +00:00
forgejo-bot
b94d5ffc19 chore: update minor dependencies 2025-04-02 23:01:04 +00:00
forgejo-bot
267da475a6 chore: update minor dependencies 2025-04-01 23:01:09 +00:00
forgejo-bot
82aac1d3b9 chore: update minor dependencies 2025-03-31 23:01:13 +00:00
odo
56ef54b119 Aggiorna README.md
All checks were successful
Bump deps (only minor versions) / ci (push) Successful in 28s
2025-03-31 08:31:50 +00:00
forgejo-bot
d21d4d57a9 chore: update minor dependencies 2025-03-29 23:00:51 +00:00
0d0
214619ec3f 0.9.3-b
All checks were successful
Bump deps (only minor versions) / ci (push) Successful in 19s
2025-03-29 17:18:07 +01:00
forgejo-bot
18adf9a6a3 chore: update minor dependencies 2025-03-28 23:00:51 +00:00
forgejo-bot
66196979cc chore: update minor dependencies 2025-03-27 23:00:54 +00:00
forgejo-bot
4d0eaed688 chore: update minor dependencies 2025-03-26 23:00:41 +00:00
6 changed files with 431 additions and 346 deletions

View file

@ -2,6 +2,7 @@
![version](https://git.pweapon.org/odo/dl.emersa.it/badges/release.svg 'version') ![version](https://git.pweapon.org/odo/dl.emersa.it/badges/release.svg 'version')
![status](https://git.pweapon.org/odo/dl.emersa.it/badges/workflows/ci.yaml/badge.svg 'status') ![status](https://git.pweapon.org/odo/dl.emersa.it/badges/workflows/ci.yaml/badge.svg 'status')
![GNU](https://img.shields.io/badge/license-GPL--3.0-green?logo=gnu)
It's a svelte(kit) frontend + backend that uses [`yt-dlp`](https://github.com/yt-dlp/yt-dlp) to let people download audio/video files from the web. It's a svelte(kit) frontend + backend that uses [`yt-dlp`](https://github.com/yt-dlp/yt-dlp) to let people download audio/video files from the web.

668
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
{ {
"name": "dl.emersa.it", "name": "dl.emersa.it",
"private": true, "private": true,
"version": "0.9.3", "version": "0.9.3-c",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite dev", "dev": "vite dev",
@ -15,34 +15,34 @@
"lint": "prettier --check . && eslint ." "lint": "prettier --check . && eslint ."
}, },
"devDependencies": { "devDependencies": {
"@eslint/compat": "^1.2.7", "@eslint/compat": "^1.2.8",
"@eslint/js": "^9.23.0", "@eslint/js": "^9.24.0",
"@sveltejs/adapter-node": "^5.2.12", "@sveltejs/adapter-node": "^5.2.12",
"@sveltejs/kit": "^2.20.2", "@sveltejs/kit": "^2.20.7",
"@sveltejs/vite-plugin-svelte": "^5.0.3", "@sveltejs/vite-plugin-svelte": "^5.0.3",
"@tailwindcss/vite": "^4.0.16", "@tailwindcss/vite": "^4.1.4",
"eslint": "^9.23.0", "eslint": "^9.24.0",
"eslint-config-prettier": "^10.1.1", "eslint-config-prettier": "^10.1.2",
"eslint-plugin-svelte": "^3.3.3", "eslint-plugin-svelte": "^3.5.1",
"globals": "^16.0.0", "globals": "^16.0.0",
"mdsvex": "^0.12.3", "mdsvex": "^0.12.3",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"prettier-plugin-svelte": "^3.3.3", "prettier-plugin-svelte": "^3.3.3",
"prettier-plugin-tailwindcss": "^0.6.11", "prettier-plugin-tailwindcss": "^0.6.11",
"svelte": "^5.25.3", "svelte": "^5.27.2",
"svelte-check": "^4.1.5", "svelte-check": "^4.1.6",
"sveltekit-sse": "^0.13.16", "sveltekit-sse": "^0.13.18",
"tailwindcss": "^4.0.16", "tailwindcss": "^4.1.4",
"typescript": "^5.8.2", "typescript": "^5.8.3",
"typescript-eslint": "^8.28.0", "typescript-eslint": "^8.30.1",
"vite": "^6.2.3" "vite": "^6.3.1"
}, },
"dependencies": { "dependencies": {
"@tailwindcss/forms": "^0.5.10", "@tailwindcss/forms": "^0.5.10",
"@tailwindcss/postcss": "^4.0.16", "@tailwindcss/postcss": "^4.1.4",
"@tailwindcss/typography": "^0.5.16", "@tailwindcss/typography": "^0.5.16",
"@types/node": "^22.13.13", "@types/node": "^22.14.1",
"winston": "^3.17.0", "winston": "^3.17.0",
"youtube-dl-exec": "^3.0.19" "youtube-dl-exec": "^3.0.20"
} }
} }

View file

@ -17,4 +17,11 @@
transform: rotate(180deg); transform: rotate(180deg);
display: inline-block; display: inline-block;
} }
@media screen and (max-height: 600px) {
/* Your CSS rules here */
footer {
display: none;
}
}
</style> </style>

View file

@ -94,7 +94,7 @@
<div <div
id="wrapper" id="wrapper"
class="relative mx-auto rounded-lg bg-black p-6 text-[#00ff7f] shadow-lg sm:max-w-sm sm:border-4 sm:border-[#00ff7f] md:mt-10 md:max-w-md lg:max-w-lg 2xl:max-w-2xl" class="relative mx-auto rounded-lg bg-black p-6 text-[#00ff7f] shadow-lg sm:mt-10 sm:max-w-sm sm:border-4 sm:border-[#00ff7f] lg:max-w-lg 2xl:max-w-2xl"
> >
<div <div
id="loader" id="loader"
@ -123,20 +123,36 @@
<p id="title" class="mb-6 text-center text-[#00e5ff]">🐙 Scaricatore 🐙</p> <p id="title" class="mb-6 text-center text-[#00e5ff]">🐙 Scaricatore 🐙</p>
<form class="space-y-6"> <form class="space-y-6">
<!-- Source selection --> <!-- Source selection -->
<div> <div class="flex justify-between">
<label for="source" class="mb-2 block text-[#00e5ff]"> Choose Source: </label> <div class="w-2/6 lg:w-3/6">
<select <label for="source" class="mb-2 block text-[#00e5ff]"> Choose Source: </label>
id="source" <select
name="source" id="source"
bind:value={source} name="source"
class="w-full rounded-lg border-4 border-[#00ff7f] bg-[#001a00] px-4 py-3 text-[#00ff7f] focus:border-[#ff3399] focus:outline-none" bind:value={source}
> class="w-full rounded-lg border-4 border-[#00ff7f] bg-[#001a00] px-4 py-3 text-[#00ff7f] focus:border-[#ff3399] focus:outline-none"
{#each sources as source} >
<option value={source.value}>{source.label}</option> {#each sources as source}
{/each} <option value={source.value}>{source.label}</option>
</select> {/each}
</div> </select>
</div>
<!-- Format Selection -->
<div class="w-2/6">
<label for="format" class="mb-2 block text-[#00e5ff]"> Choose Format: </label>
<select
id="format"
name="format"
bind:value={format}
class="w-full rounded-lg border-4 border-[#00ff7f] bg-[#001a00] px-4 py-3 text-[#00ff7f] focus:border-[#ff3399] focus:outline-none"
>
{#each formats as format}
<option value={format.value}>{format.label}</option>
{/each}
</select>
</div>
</div>
<!-- Link Input --> <!-- Link Input -->
<div> <div>
<label for="link" class="mb-2 block text-[#00e5ff]"> Enter Video Link: </label> <label for="link" class="mb-2 block text-[#00e5ff]"> Enter Video Link: </label>
@ -151,21 +167,6 @@
/> />
</div> </div>
<!-- Format Selection -->
<div>
<label for="format" class="mb-2 block text-[#00e5ff]"> Choose Format: </label>
<select
id="format"
name="format"
bind:value={format}
class="w-full rounded-lg border-4 border-[#00ff7f] bg-[#001a00] px-4 py-3 text-[#00ff7f] focus:border-[#ff3399] focus:outline-none"
>
{#each formats as format}
<option value={format.value}>{format.label}</option>
{/each}
</select>
</div>
<!-- Metadata --> <!-- Metadata -->
<div> <div>
<label for="metadata" class="mb-2 block text-[#00e5ff]" <label for="metadata" class="mb-2 block text-[#00e5ff]"
@ -230,7 +231,8 @@
font-size: 10px; font-size: 10px;
} }
} }
@media (min-width: 1024px) {
@media (min-width: 1400px) {
* { * {
font-size: 12px; font-size: 12px;
} }
@ -239,6 +241,7 @@
#loader { #loader {
display: none; display: none;
} }
#loader.downloading { #loader.downloading {
display: grid; display: grid;
justify-items: center; justify-items: center;

View file

@ -38,7 +38,7 @@ const validateRequest = (url: URL) => {
}; };
export const GET: RequestHandler = async ({ url }) => { export const GET: RequestHandler = async ({ url }) => {
const { format, source, metadata, link } = validateRequest(url); const { format, source, metadata, link } = validateRequest(url);
let filename = `you-clicked-no-metadata-so-i-cant-put-a-correct-name.${format}`; let filename = `noname.${format}`;
if (!!metadata) { if (!!metadata) {
try { try {