diff --git a/docs/Settings.md b/docs/Settings.md index ddb62d6..35c3893 100644 --- a/docs/Settings.md +++ b/docs/Settings.md @@ -19,6 +19,7 @@ Settings related to the download process. - **Download Speed Limit**: Set your download speed limit in KB/s. This will pass the option `--limit-rate` to yt-dlp. - **Throttled Rate Limit**: Restart download if the download speed drops below this value in KB/s. This will pass the option `--throttled-rate` to yt-dlp. Using this option might have a negative effect if you have an unstable or slow internet connection. - **Sleep Interval**: Time in seconds to sleep between requests to YouTube. It's a good idea to set this to **3** seconds. Might be necessary to avoid throttling. +- **Auto Delete Watched Videos**: Automatically delete videos marked as watched after selected days. If activated, checks your videos after download task is finished. ## Download Format Additional settings passed to yt-dlp. diff --git a/tubearchivist/home/config.json b/tubearchivist/home/config.json index def21ec..bf754f4 100644 --- a/tubearchivist/home/config.json +++ b/tubearchivist/home/config.json @@ -18,6 +18,7 @@ "limit_count": false, "limit_speed": false, "sleep_interval": 3, + "autodelete_days": false, "format": false, "add_metadata": false, "add_thumbnail": false, diff --git a/tubearchivist/home/forms.py b/tubearchivist/home/forms.py index 6f144bb..f39bb8b 100644 --- a/tubearchivist/home/forms.py +++ b/tubearchivist/home/forms.py @@ -60,6 +60,7 @@ class ApplicationSettingsForm(forms.Form): downloads_add_thumbnail = forms.ChoiceField( widget=forms.Select, choices=THUMBNAIL_CHOICES, required=False ) + downloads_autodelete_days = forms.IntegerField(required=False) class SchedulerSettingsForm(forms.Form): diff --git a/tubearchivist/home/src/download.py b/tubearchivist/home/src/download.py index fd2ffbb..1d34128 100644 --- a/tubearchivist/home/src/download.py +++ b/tubearchivist/home/src/download.py @@ -25,6 +25,7 @@ from home.src.index import ( IndexPaginate, YoutubeChannel, YoutubePlaylist, + YoutubeVideo, index_new_video, ) @@ -554,6 +555,11 @@ class VideoDownloader: self.move_to_archive(vid_dict) self.delete_from_pending(youtube_id) + autodelete_days = self.config["downloads"]["autodelete_days"] + if autodelete_days: + print(f"auto delete older than {autodelete_days} days") + self.auto_delete_watched(autodelete_days) + @staticmethod def add_pending(): """add pending videos to download queue""" @@ -772,3 +778,19 @@ class VideoDownloader: ) else: RedisArchivist().set_message("message:download", mess_dict) + + @staticmethod + def auto_delete_watched(autodelete_days): + """delete watched videos after x days""" + now = int(datetime.now().strftime("%s")) + now_lte = now - autodelete_days * 24 * 60 * 60 + data = { + "query": {"range": {"player.watched_date": {"lte": now_lte}}}, + "sort": [{"player.watched_date": {"order": "asc"}}] + } + all_to_delete = IndexPaginate("ta_video", data).get_results() + + for to_delete in all_to_delete: + youtube_id = to_delete["youtube_id"] + print(f"autodelete {youtube_id}") + YoutubeVideo(youtube_id).delete_media_file() diff --git a/tubearchivist/home/templates/home/settings.html b/tubearchivist/home/templates/home/settings.html index f88a263..e1b4ce9 100644 --- a/tubearchivist/home/templates/home/settings.html +++ b/tubearchivist/home/templates/home/settings.html @@ -59,6 +59,11 @@ Seconds to sleep between calls to YouTube. Might be necessary to avoid throttling. Recommended 3.
{{ app_form.downloads_sleep_interval }} +
+

Danger Zone: Current auto delete watched videos: {{ config.downloads.autodelete_days }}

+ Auto delete watched videos after x days, 0 (zero) to deactivate:
+ {{ app_form.downloads_autodelete_days }} +

Download Format