From fe4993153c168b27969dc0fae500b62504bba52a Mon Sep 17 00:00:00 2001 From: Steffen Klee Date: Mon, 13 Dec 2021 22:35:19 +0100 Subject: Add download link to downloaded file This adds a simple download link that points to the downloaded file. Note: This makes all files in the download directory (and its sub-directory) available to any user. Closes gh-26 --- app/main.py | 1 + app/ytdl.py | 7 +++++++ ui/src/app/app.component.html | 3 ++- ui/src/app/downloads.service.ts | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/main.py b/app/main.py index 368db16..8b2a57f 100644 --- a/app/main.py +++ b/app/main.py @@ -108,6 +108,7 @@ if config.URL_PREFIX != '/': return web.HTTPFound(config.URL_PREFIX) routes.static(config.URL_PREFIX + 'favicon/', 'favicon') +routes.static(config.URL_PREFIX + 'download/', config.DOWNLOAD_DIR) routes.static(config.URL_PREFIX, 'ui/dist/metube') app.add_routes(routes) diff --git a/app/ytdl.py b/app/ytdl.py index e0267d7..4d92e3f 100644 --- a/app/ytdl.py +++ b/app/ytdl.py @@ -30,6 +30,7 @@ class DownloadInfo: self.quality = quality self.format = format self.status = self.msg = self.percent = self.speed = self.eta = None + self.filename = None class Download: manager = None @@ -60,6 +61,9 @@ class Download: 'speed', 'eta', )}) + def put_status_postprocessor(d): + if d['postprocessor'] == 'MoveFiles' and d['status'] == 'finished': + self.status_queue.put({'status': 'finished', 'filename': d['info_dict']['filepath']}) ret = yt_dlp.YoutubeDL(params={ 'quiet': True, 'no_color': True, @@ -69,6 +73,7 @@ class Download: 'cachedir': False, 'socket_timeout': 30, 'progress_hooks': [put_status], + 'postprocessor_hooks': [put_status_postprocessor], **self.ytdl_opts, }).download([self.info.url]) self.status_queue.put({'status': 'finished' if ret == 0 else 'error'}) @@ -113,6 +118,8 @@ class Download: if status is None: return self.tmpfilename = status.get('tmpfilename') + if 'filename' in status: + self.info.filename = os.path.relpath(status.get('filename')) self.info.status = status['status'] self.info.msg = status.get('msg') if 'downloaded_bytes' in status: diff --git a/ui/src/app/app.component.html b/ui/src/app/app.component.html index 039aab6..1496bde 100644 --- a/ui/src/app/app.component.html +++ b/ui/src/app/app.component.html @@ -112,7 +112,8 @@ - {{ download.value.title }} + {{ download.value.title }} + {{ download.value.title }} diff --git a/ui/src/app/downloads.service.ts b/ui/src/app/downloads.service.ts index e0db252..25bcccc 100644 --- a/ui/src/app/downloads.service.ts +++ b/ui/src/app/downloads.service.ts @@ -15,6 +15,7 @@ interface Download { url: string, status: string; msg: string; + filename: string; quality: string; percent: number; speed: number; -- cgit