From 4a87e9fa68569e467224c8ef9cc49df8dfede831 Mon Sep 17 00:00:00 2001 From: AutoUpdater Date: Tue, 19 Nov 2024 00:08:35 +0000 Subject: [PATCH 01/19] upgraded yt-dlp --- Pipfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 4f7b46a..c59fc28 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -878,12 +878,12 @@ }, "yt-dlp": { "hashes": [ - "sha256:589d51ed9f154624a45c1f0ceb3d68d0d1e2031460e8dbc62139be631c20b388", - "sha256:ed204c1b61bc563e134447766d1ab343173540799e13ebb953e887ce7dcf6865" + "sha256:b8a4c23d3c9afd7e476bcdb87f38b6c0e8e12e3a239d7988f13acb434200f54d", + "sha256:b9741695911dc566498b5f115cdd6b1abbc5be61cb01fd98abe649990a41656c" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==2024.11.4" + "version": "==2024.11.18" } }, "develop": { From d1ed9f8c9c99520f5cac8d71db47d884516596cc Mon Sep 17 00:00:00 2001 From: AutoUpdater Date: Wed, 4 Dec 2024 00:08:53 +0000 Subject: [PATCH 02/19] upgraded yt-dlp --- Pipfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index c59fc28..01f8931 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -878,12 +878,12 @@ }, "yt-dlp": { "hashes": [ - "sha256:b8a4c23d3c9afd7e476bcdb87f38b6c0e8e12e3a239d7988f13acb434200f54d", - "sha256:b9741695911dc566498b5f115cdd6b1abbc5be61cb01fd98abe649990a41656c" + "sha256:35abff51c5762033103f2330ba0a8a1f48c4388a413a2d8cdc9b84642fe8edd4", + "sha256:a6b32ea879ce3f95b47b9b57948b755b4d61f3700d4fc24602b17537ddf0cf90" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==2024.11.18" + "version": "==2024.12.3" } }, "develop": { From a5c94705767e919cc072587609c180b69a5139c3 Mon Sep 17 00:00:00 2001 From: Rithas K Date: Thu, 5 Dec 2024 01:44:17 +0530 Subject: [PATCH 03/19] feat: add Best (iOS) option to iCloud shortcut --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index db22962..a7b6688 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ __Firefox:__ contributed by [nanocortex](https://github.com/nanocortex). You can ## iOS Shortcut -[rithask](https://github.com/rithask) has created an iOS shortcut to send the URL to MeTube from Safari. Initially, you'll need to enter the server address and port, but after that, it will be saved and you can just run the shortcut from the share menu in Safari. The address should include the protocol (http/https) and the port, if it's not the default 80/443. For example: `https://metube.example.com` or `http://192.168.1.1:8081`. The shortcut can be found [here](https://www.icloud.com/shortcuts/f1548df15b734418a77a709103bc1dd5). +[rithask](https://github.com/rithask) created an iOS shortcut to send URLs to MeTube from Safari. Enter the MeTube instance address when prompted which will be saved for later use. You can run the shortcut from Safari’s share menu. The shortcut can be downloaded from [this iCloud link](https://www.icloud.com/shortcuts/66627a9f334c467baabdb2769763a1a6). ## iOS Compatibility From fbac64ba33a5ea6aa4da7e06273c3ed54feac2d0 Mon Sep 17 00:00:00 2001 From: matthewpipes <64096239+matthewpipes@users.noreply.github.com> Date: Thu, 5 Dec 2024 16:03:08 -0500 Subject: [PATCH 04/19] Update README.md Added what might be a popular YTDL_OPTION in the iOS Compatibility section --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index a7b6688..abde8f0 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,13 @@ __Firefox:__ contributed by [nanocortex](https://github.com/nanocortex). You can iOS has strict requirements for video files, requiring h264 or h265 video codec and aac audio codec in MP4 container. This can sometimes be a lower quality than the best quality available. To accommodate iOS requirements, when downloading a MP4 format you can choose "Best (iOS)" to get the best quality formats as compatible as possible with iOS requirements. +To force all downloads to be converted to an iOS compatible codec insert this as an environment variable + +```yaml + environment: + - 'YTDL_OPTIONS={"format": "best", "exec": "ffmpeg -i %(filepath)q -c:v libx264 -c:a aac %(filepath)q.h264.mp4"}' +``` + ## Bookmarklet [kushfest](https://github.com/kushfest) has created a Chrome bookmarklet for sending the currently open webpage to MeTube. Please note that if you're on an HTTPS page, your MeTube instance must be configured with `HTTPS` as `true` in the environment, or be behind an HTTPS reverse proxy (see below) for the bookmarklet to work. From e15efdce813075f1f52498147163a7cb643afe0b Mon Sep 17 00:00:00 2001 From: AutoUpdater Date: Sat, 7 Dec 2024 00:08:24 +0000 Subject: [PATCH 05/19] upgraded yt-dlp --- Pipfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 01f8931..244ce5f 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -878,12 +878,12 @@ }, "yt-dlp": { "hashes": [ - "sha256:35abff51c5762033103f2330ba0a8a1f48c4388a413a2d8cdc9b84642fe8edd4", - "sha256:a6b32ea879ce3f95b47b9b57948b755b4d61f3700d4fc24602b17537ddf0cf90" + "sha256:743dbe081ea871be3f5ff083e2cd95da866dea773fc70ae6b109838cfbf72ac4", + "sha256:a7b8724e58fff4f3204cae4feb936dbd249ca6d22c5f25dec1b3c6f1cb7745a2" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==2024.12.3" + "version": "==2024.12.6" } }, "develop": { From da83675b2c979abcd97dbf8536d993759a08799c Mon Sep 17 00:00:00 2001 From: Dmitry Rubtsov Date: Sun, 8 Dec 2024 18:24:40 +0600 Subject: [PATCH 06/19] exclude index.html from service worker --- ui/ngsw-config.json | 1 - 1 file changed, 1 deletion(-) diff --git a/ui/ngsw-config.json b/ui/ngsw-config.json index f8bf210..6fa40bf 100644 --- a/ui/ngsw-config.json +++ b/ui/ngsw-config.json @@ -8,7 +8,6 @@ "resources": { "files": [ "/favicon.ico", - "/index.html", "/manifest.webmanifest", "/*.css", "/*.js" From c4561dc9b33bec365ffeabdabc21497d02538df9 Mon Sep 17 00:00:00 2001 From: AutoUpdater Date: Sat, 14 Dec 2024 00:08:30 +0000 Subject: [PATCH 07/19] upgraded yt-dlp --- Pipfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 244ce5f..fa30138 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -878,12 +878,12 @@ }, "yt-dlp": { "hashes": [ - "sha256:743dbe081ea871be3f5ff083e2cd95da866dea773fc70ae6b109838cfbf72ac4", - "sha256:a7b8724e58fff4f3204cae4feb936dbd249ca6d22c5f25dec1b3c6f1cb7745a2" + "sha256:5a16b7511e8500cbb13ff0babc9c6deb1e049dc1c854a51738aad2529167fcdf", + "sha256:77e15afb9d460ecb7294a39bb5e39dc9f4e8a65f3a37ef4db58800b94d095511" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==2024.12.6" + "version": "==2024.12.13" } }, "develop": { From 0019d28010cafd5e7c32abcb8778186a3f82b798 Mon Sep 17 00:00:00 2001 From: AutoUpdater Date: Tue, 24 Dec 2024 00:08:15 +0000 Subject: [PATCH 08/19] upgraded yt-dlp --- Pipfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index fa30138..d33fea7 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -878,12 +878,12 @@ }, "yt-dlp": { "hashes": [ - "sha256:5a16b7511e8500cbb13ff0babc9c6deb1e049dc1c854a51738aad2529167fcdf", - "sha256:77e15afb9d460ecb7294a39bb5e39dc9f4e8a65f3a37ef4db58800b94d095511" + "sha256:2fc08a5221a0379628ac4e7324c6c69a95b9fdfa7a7ca3187444b3b7451e38be", + "sha256:ac0e72b5a9017ba104b4258546201a7cedc38e8bd20727e0c63b77c829b425e9" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==2024.12.13" + "version": "==2024.12.23" } }, "develop": { From 0916c22c062f882c5b8260cef9899c0af8159be2 Mon Sep 17 00:00:00 2001 From: admapop Date: Sat, 28 Dec 2024 17:03:59 +0200 Subject: [PATCH 09/19] fix: impersonate property needs to be of the right type and not as it is being passed now via JSON --- app/ytdl.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/ytdl.py b/app/ytdl.py index f169afe..7b992c8 100644 --- a/app/ytdl.py +++ b/app/ytdl.py @@ -7,6 +7,9 @@ import asyncio import multiprocessing import logging import re + +import yt_dlp.networking +import yt_dlp.networking.impersonate from dl_formats import get_format, get_opts, AUDIO_FORMATS from datetime import datetime @@ -227,6 +230,7 @@ class DownloadQueue: 'ignore_no_formats_error': True, 'noplaylist': playlist_strict_mode, 'paths': {"home": self.config.DOWNLOAD_DIR, "temp": self.config.TEMP_DIR}, + **({'impersonate': yt_dlp.networking.impersonate.ImpersonateTarget.from_str(self.config.YTDL_OPTIONS['impersonate'])} if 'impersonate' in self.config.YTDL_OPTIONS else {}), **self.config.YTDL_OPTIONS, }).extract_info(url, download=False) From bec65c37054983c82a6ccdbbcfd7c551b92105a9 Mon Sep 17 00:00:00 2001 From: admapop Date: Sat, 28 Dec 2024 20:41:22 +0200 Subject: [PATCH 10/19] chore: PR suggestion --- app/ytdl.py | 1 - 1 file changed, 1 deletion(-) diff --git a/app/ytdl.py b/app/ytdl.py index 7b992c8..3434358 100644 --- a/app/ytdl.py +++ b/app/ytdl.py @@ -8,7 +8,6 @@ import multiprocessing import logging import re -import yt_dlp.networking import yt_dlp.networking.impersonate from dl_formats import get_format, get_opts, AUDIO_FORMATS from datetime import datetime From 6255e490c7e65cafc893f6f2108ce59bcba9e212 Mon Sep 17 00:00:00 2001 From: Will Smart Date: Sat, 11 Jan 2025 17:12:06 -0500 Subject: [PATCH 11/19] Adds 'pending' to response for GET /history Allows for some additional integration opportunities by including "pending" items in the json reponse to /history. --- app/main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/main.py b/app/main.py index 2ff3ec2..c7bbfed 100644 --- a/app/main.py +++ b/app/main.py @@ -165,12 +165,14 @@ async def start(request): @routes.get(config.URL_PREFIX + 'history') async def history(request): - history = { 'done': [], 'queue': []} + history = { 'done': [], 'queue': [], 'pending': []} for _ ,v in dqueue.queue.saved_items(): history['queue'].append(v) for _ ,v in dqueue.done.saved_items(): history['done'].append(v) + for _ ,v in dqueue.pending.saved_items(): + history['pending'].append(v) return web.Response(text=serializer.encode(history)) From eee43a232e62df316dfb3572e23f37505f1d1389 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20L=C3=B6fgren?= Date: Sun, 12 Jan 2025 12:24:03 +0100 Subject: [PATCH 12/19] Add tini as entrypoint in Dockerfile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Victor Löfgren --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1d78d50..924445e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,7 @@ COPY Pipfile* docker-entrypoint.sh ./ # Install dependencies RUN sed -i 's/\r$//g' docker-entrypoint.sh && \ chmod +x docker-entrypoint.sh && \ - apk add --update ffmpeg aria2 coreutils shadow su-exec curl && \ + apk add --update ffmpeg aria2 coreutils shadow su-exec curl tini && \ apk add --update --virtual .build-deps gcc g++ musl-dev && \ pip install --no-cache-dir pipenv && \ pipenv install --system --deploy --clear && \ @@ -37,4 +37,4 @@ ENV STATE_DIR /downloads/.metube ENV TEMP_DIR /downloads VOLUME /downloads EXPOSE 8081 -CMD [ "./docker-entrypoint.sh" ] +ENTRYPOINT ["/sbin/tini", "-g", "--", "./docker-entrypoint.sh"] From d0a2de2acdfc71af4b144e16ee154b75dd56a1ef Mon Sep 17 00:00:00 2001 From: AutoUpdater Date: Mon, 13 Jan 2025 00:09:02 +0000 Subject: [PATCH 13/19] upgraded yt-dlp --- Pipfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index d33fea7..4d9c5cb 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -878,12 +878,12 @@ }, "yt-dlp": { "hashes": [ - "sha256:2fc08a5221a0379628ac4e7324c6c69a95b9fdfa7a7ca3187444b3b7451e38be", - "sha256:ac0e72b5a9017ba104b4258546201a7cedc38e8bd20727e0c63b77c829b425e9" + "sha256:8e7e246e2a5a2cff0a9c13db46844a37a547680702012058c94ec18fce0ca25a", + "sha256:f7ea19afb64f8e457a1b9598ddb67f8deaa313bf1d57abd5612db9272ab10795" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==2024.12.23" + "version": "==2025.1.12" } }, "develop": { From 1c02883f0e58627fa799d3593cc7b4d244002346 Mon Sep 17 00:00:00 2001 From: lvank Date: Sun, 12 Jan 2025 20:15:23 -0600 Subject: [PATCH 14/19] Add a download selected button for non-autostarted downloads --- ui/src/app/app.component.html | 1 + ui/src/app/app.component.ts | 6 ++++++ ui/src/app/downloads.service.ts | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/ui/src/app/app.component.html b/ui/src/app/app.component.html index 01719d8..12a7f91 100644 --- a/ui/src/app/app.component.html +++ b/ui/src/app/app.component.html @@ -126,6 +126,7 @@
Downloading
+
diff --git a/ui/src/app/app.component.ts b/ui/src/app/app.component.ts index 55ece6e..024d287 100644 --- a/ui/src/app/app.component.ts +++ b/ui/src/app/app.component.ts @@ -33,6 +33,7 @@ export class AppComponent implements AfterViewInit { @ViewChild('queueMasterCheckbox') queueMasterCheckbox: MasterCheckboxComponent; @ViewChild('queueDelSelected') queueDelSelected: ElementRef; + @ViewChild('queueDownloadSelected') queueDownloadSelected: ElementRef; @ViewChild('doneMasterCheckbox') doneMasterCheckbox: MasterCheckboxComponent; @ViewChild('doneDelSelected') doneDelSelected: ElementRef; @ViewChild('doneClearCompleted') doneClearCompleted: ElementRef; @@ -180,6 +181,7 @@ export class AppComponent implements AfterViewInit { queueSelectionChanged(checked: number) { this.queueDelSelected.nativeElement.disabled = checked == 0; + this.queueDownloadSelected.nativeElement.disabled = checked == 0; } doneSelectionChanged(checked: number) { @@ -228,6 +230,10 @@ export class AppComponent implements AfterViewInit { this.downloads.delById(where, [id]).subscribe(); } + startSelectedDownloads(where: string){ + this.downloads.startByFilter(where, dl => dl.checked).subscribe(); + } + delSelectedDownloads(where: string) { this.downloads.delByFilter(where, dl => dl.checked).subscribe(); } diff --git a/ui/src/app/downloads.service.ts b/ui/src/app/downloads.service.ts index 75db747..51d98df 100644 --- a/ui/src/app/downloads.service.ts +++ b/ui/src/app/downloads.service.ts @@ -118,6 +118,12 @@ export class DownloadsService { return this.http.post('delete', {where: where, ids: ids}); } + public startByFilter(where: string, filter: (dl: Download) => boolean) { + let ids: string[] = []; + this[where].forEach((dl: Download) => { if (filter(dl)) ids.push(dl.url) }); + return this.startById(ids); + } + public delByFilter(where: string, filter: (dl: Download) => boolean) { let ids: string[] = []; this[where].forEach((dl: Download) => { if (filter(dl)) ids.push(dl.url) }); From a77f10541adaed40762d25e679438126785ffc6d Mon Sep 17 00:00:00 2001 From: PikuZheng Date: Wed, 15 Jan 2025 07:55:38 +0800 Subject: [PATCH 15/19] add "worst" format --- app/dl_formats.py | 2 +- ui/src/app/formats.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/dl_formats.py b/app/dl_formats.py index 8abd038..5640ca4 100644 --- a/app/dl_formats.py +++ b/app/dl_formats.py @@ -35,7 +35,7 @@ def get_format(format: str, quality: str) -> str: return "bestaudio/best" # video {res} {vfmt} + audio {afmt} {res} {vfmt} vfmt, afmt = ("[ext=mp4]", "[ext=m4a]") if format == "mp4" else ("", "") - vres = f"[height<={quality}]" if quality not in ("best", "best_ios") else "" + vres = f"[height<={quality}]" if quality not in ("best", "best_ios", "worst") else "" vcombo = vres + vfmt if quality == "best_ios": diff --git a/ui/src/app/formats.ts b/ui/src/app/formats.ts index 0e283dd..3e79ec1 100644 --- a/ui/src/app/formats.ts +++ b/ui/src/app/formats.ts @@ -20,6 +20,7 @@ export const Formats: Format[] = [ { id: '1080', text: '1080p' }, { id: '720', text: '720p' }, { id: '480', text: '480p' }, + { id: 'worst', text: 'Worst' }, { id: 'audio', text: 'Audio Only' }, ], }, @@ -34,6 +35,7 @@ export const Formats: Format[] = [ { id: '1080', text: '1080p' }, { id: '720', text: '720p' }, { id: '480', text: '480p' }, + { id: 'worst', text: 'Worst' }, ], }, { From c00246a4f422c90f4b5474197a7bdd9066da6bd1 Mon Sep 17 00:00:00 2001 From: AutoUpdater Date: Thu, 16 Jan 2025 00:08:04 +0000 Subject: [PATCH 16/19] upgraded yt-dlp --- Pipfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 4d9c5cb..39afcc6 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -878,12 +878,12 @@ }, "yt-dlp": { "hashes": [ - "sha256:8e7e246e2a5a2cff0a9c13db46844a37a547680702012058c94ec18fce0ca25a", - "sha256:f7ea19afb64f8e457a1b9598ddb67f8deaa313bf1d57abd5612db9272ab10795" + "sha256:b8666b88e23c3fa5ee1e80920f4a9dfac7c405504a447214c0cf3d0c386edcfc", + "sha256:e8ec515d49bb62704915d13a22ee6fe03a5658d651e4e64574e3a17ee01f6e3b" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==2025.1.12" + "version": "==2025.1.15" } }, "develop": { From d437d9529bb533109f65ef2e7cd2df33cdd8c442 Mon Sep 17 00:00:00 2001 From: AutoUpdater Date: Mon, 27 Jan 2025 00:08:18 +0000 Subject: [PATCH 17/19] upgraded yt-dlp --- Pipfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 39afcc6..1cffac9 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -878,12 +878,12 @@ }, "yt-dlp": { "hashes": [ - "sha256:b8666b88e23c3fa5ee1e80920f4a9dfac7c405504a447214c0cf3d0c386edcfc", - "sha256:e8ec515d49bb62704915d13a22ee6fe03a5658d651e4e64574e3a17ee01f6e3b" + "sha256:1c9738266921ad43c568ad01ac3362fb7c7af549276fbec92bd72f140da16240", + "sha256:3e76bd896b9f96601021ca192ca0fbdd195e3c3dcc28302a3a34c9bc4979da7b" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==2025.1.15" + "version": "==2025.1.26" } }, "develop": { From 4d145ba8996c8ff543609ad2c34bc0d03db98251 Mon Sep 17 00:00:00 2001 From: PikuZheng Date: Fri, 7 Feb 2025 09:04:35 +0800 Subject: [PATCH 18/19] Download multiple files from MeTube #586 --- ui/src/app/app.component.html | 1 + ui/src/app/app.component.ts | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/ui/src/app/app.component.html b/ui/src/app/app.component.html index 12a7f91..dc5e3bb 100644 --- a/ui/src/app/app.component.html +++ b/ui/src/app/app.component.html @@ -172,6 +172,7 @@ +
diff --git a/ui/src/app/app.component.ts b/ui/src/app/app.component.ts index 024d287..dd7319b 100644 --- a/ui/src/app/app.component.ts +++ b/ui/src/app/app.component.ts @@ -39,6 +39,7 @@ export class AppComponent implements AfterViewInit { @ViewChild('doneClearCompleted') doneClearCompleted: ElementRef; @ViewChild('doneClearFailed') doneClearFailed: ElementRef; @ViewChild('doneRetryFailed') doneRetryFailed: ElementRef; + @ViewChild('doneDownloadSelected') doneDownloadSelected: ElementRef; faTrashAlt = faTrashAlt; faCheckCircle = faCheckCircle; @@ -186,6 +187,7 @@ export class AppComponent implements AfterViewInit { doneSelectionChanged(checked: number) { this.doneDelSelected.nativeElement.disabled = checked == 0; + this.doneDownloadSelected.nativeElement.disabled = checked == 0; } setQualities() { @@ -254,6 +256,20 @@ export class AppComponent implements AfterViewInit { }); } + downloadSelectedFiles() { + this.downloads.done.forEach((dl, key) => { + if (dl.status === 'finished' && dl.checked) { + const link = document.createElement('a'); + link.href = this.buildDownloadLink(dl); + link.setAttribute('download', dl.filename); + link.setAttribute('target', '_self'); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } + }); + } + buildDownloadLink(download: Download) { let baseDir = this.downloads.configuration["PUBLIC_HOST_URL"]; if (download.quality == 'audio' || download.filename.endsWith('.mp3')) { From 592a79ce49ad1920573976f1532da5a5c137bea5 Mon Sep 17 00:00:00 2001 From: AutoUpdater Date: Thu, 20 Feb 2025 00:08:08 +0000 Subject: [PATCH 19/19] upgraded yt-dlp --- Pipfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 1cffac9..063b209 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -878,12 +878,12 @@ }, "yt-dlp": { "hashes": [ - "sha256:1c9738266921ad43c568ad01ac3362fb7c7af549276fbec92bd72f140da16240", - "sha256:3e76bd896b9f96601021ca192ca0fbdd195e3c3dcc28302a3a34c9bc4979da7b" + "sha256:3ed218eaeece55e9d715afd41abc450dc406ee63bf79355169dfde312d38fdb8", + "sha256:f33ca76df2e4db31880f2fe408d44f5058d9f135015b13e50610dfbe78245bea" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==2025.1.26" + "version": "==2025.2.19" } }, "develop": {