diff --git a/docs/source/config_reference/scripting/scripting_functions.rst b/docs/source/config_reference/scripting/scripting_functions.rst index d5948fb5..ebb777d4 100644 --- a/docs/source/config_reference/scripting/scripting_functions.rst +++ b/docs/source/config_reference/scripting/scripting_functions.rst @@ -716,7 +716,7 @@ to_native_filepath :spec: ``to_native_filepath(filepath: String) -> String`` Convert any unix-based path separators ('/') with the OS's native -separator. +separator. In addition, expand ~ to absolute directories. truncate_filepath_if_too_long ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/pyproject.toml b/pyproject.toml index b58a8723..ce803f71 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", ] dependencies = [ - "yt-dlp==2024.04.09", + "yt-dlp==2024.5.27", "colorama~=0.4", "mergedeep~=1.3", "mediafile~=0.12", @@ -49,7 +49,7 @@ test = [ lint = [ "black==24.4.2", "isort==5.13.2", - "pylint==3.1.0", + "pylint==3.2.2", ] docs = [ "sphinx~=7.0", diff --git a/src/ytdl_sub/config/config_validator.py b/src/ytdl_sub/config/config_validator.py index ff18b3fc..55a91f55 100644 --- a/src/ytdl_sub/config/config_validator.py +++ b/src/ytdl_sub/config/config_validator.py @@ -1,3 +1,5 @@ +import os +import posixpath from typing import Any from typing import Dict from typing import Optional @@ -147,7 +149,8 @@ class ConfigOptions(StrictDictValidator): The directory to temporarily store downloaded files before moving them into their final directory. Defaults to .ytdl-sub-working-directory """ - return self._working_directory.value + # Expands tildas to actual paths, use native os sep + return os.path.expanduser(self._working_directory.value.replace(posixpath.sep, os.sep)) @property def umask(self) -> Optional[str]: diff --git a/src/ytdl_sub/entries/script/custom_functions.py b/src/ytdl_sub/entries/script/custom_functions.py index 690095de..ded8c54f 100644 --- a/src/ytdl_sub/entries/script/custom_functions.py +++ b/src/ytdl_sub/entries/script/custom_functions.py @@ -36,9 +36,9 @@ class CustomFunctions: def to_native_filepath(filepath: String) -> String: """ Convert any unix-based path separators ('/') with the OS's native - separator. + separator. In addition, expand ~ to absolute directories. """ - return String(filepath.value.replace(posixpath.sep, os.sep)) + return String(os.path.expanduser(filepath.value.replace(posixpath.sep, os.sep))) @staticmethod def truncate_filepath_if_too_long(filepath: String) -> String: diff --git a/src/ytdl_sub/prebuilt_presets/music_videos/music_video_base.yaml b/src/ytdl_sub/prebuilt_presets/music_videos/music_video_base.yaml index 9f85dd46..ac810745 100644 --- a/src/ytdl_sub/prebuilt_presets/music_videos/music_video_base.yaml +++ b/src/ytdl_sub/prebuilt_presets/music_videos/music_video_base.yaml @@ -7,6 +7,7 @@ presets: output_directory: "{music_video_directory}" file_name: "{music_video_file_name}.{ext}" thumbnail_name: "{music_video_file_name}.jpg" + info_json_name: "{music_video_file_name}.{info_json_ext}" maintain_download_archive: True ytdl_options: diff --git a/src/ytdl_sub/subscriptions/subscription_download.py b/src/ytdl_sub/subscriptions/subscription_download.py index 1655a633..95108ece 100644 --- a/src/ytdl_sub/subscriptions/subscription_download.py +++ b/src/ytdl_sub/subscriptions/subscription_download.py @@ -161,7 +161,7 @@ class SubscriptionDownload(BaseSubscription, ABC): ) self.download_archive.save_download_mappings() - FileHandler.delete(self.download_archive.working_file_path) + FileHandler.delete(self.download_archive.working_ytdl_file_path) @contextlib.contextmanager def _remove_empty_directories_in_output_directory(self): diff --git a/src/ytdl_sub/subscriptions/subscription_ytdl_options.py b/src/ytdl_sub/subscriptions/subscription_ytdl_options.py index 230134db..1cc6f317 100644 --- a/src/ytdl_sub/subscriptions/subscription_ytdl_options.py +++ b/src/ytdl_sub/subscriptions/subscription_ytdl_options.py @@ -89,7 +89,9 @@ class SubscriptionYTDLOptions: ytdl_options = {} if self._preset.output_options.maintain_download_archive: - ytdl_options["download_archive"] = self._enhanced_download_archive.working_file_path + ytdl_options["download_archive"] = ( + self._enhanced_download_archive.working_ytdl_file_path + ) if self._preset.output_options.keep_max_files: keep_max_files = int( self._overrides.apply_formatter(self._preset.output_options.keep_max_files) diff --git a/src/ytdl_sub/utils/file_handler.py b/src/ytdl_sub/utils/file_handler.py index 646d44e1..faa7d2dc 100644 --- a/src/ytdl_sub/utils/file_handler.py +++ b/src/ytdl_sub/utils/file_handler.py @@ -385,7 +385,11 @@ class FileHandler: dst_file_path Destination file """ - shutil.copyfile(src=src_file_path, dst=dst_file_path) + # Perform the copy by first writing to a temp file, then moving it. + # This tries to prevent corrupted writes if the processed dies mid-write, + atomic_dst = f"{dst_file_path}-ytdl-sub-incomplete" + shutil.copyfile(src=src_file_path, dst=atomic_dst) + shutil.move(src=atomic_dst, dst=dst_file_path) @classmethod def move(cls, src_file_path: Union[str, Path], dst_file_path: Union[str, Path]): diff --git a/src/ytdl_sub/utils/thumbnail.py b/src/ytdl_sub/utils/thumbnail.py index a999f01c..8f7ba153 100644 --- a/src/ytdl_sub/utils/thumbnail.py +++ b/src/ytdl_sub/utils/thumbnail.py @@ -72,8 +72,7 @@ def download_and_convert_url_thumbnail( if not thumbnail_url: return None - # timeout after 8 seconds - with urlopen(thumbnail_url, timeout=1.0) as file: + with urlopen(thumbnail_url, timeout=7.0) as file: with tempfile.NamedTemporaryFile(delete=False) as thumbnail: thumbnail.write(file.read()) diff --git a/src/ytdl_sub/ytdl_additions/enhanced_download_archive.py b/src/ytdl_sub/ytdl_additions/enhanced_download_archive.py index 616fe2f9..ec155245 100644 --- a/src/ytdl_sub/ytdl_additions/enhanced_download_archive.py +++ b/src/ytdl_sub/ytdl_additions/enhanced_download_archive.py @@ -506,10 +506,19 @@ class EnhancedDownloadArchive: """ Returns ------- - The download mapping's file path in the working directory. + The download mapping's file path in the working directory for ytdl usage """ return str(Path(self.working_directory) / self.file_name) + @property + def working_ytdl_file_path(self) -> str: + """ + Returns + ------- + The download mapping's file path in the working directory for ytdl usage + """ + return f"{self.working_file_path}-ytdl-archive" + @property def mapping(self) -> DownloadMappings: """ @@ -541,7 +550,7 @@ class EnhancedDownloadArchive: return self # Otherwise, create a ytdl download archive file in the working directory. - self.mapping.to_download_archive().to_file(self.working_file_path) + self.mapping.to_download_archive().to_file(self.working_ytdl_file_path) return self @@ -603,15 +612,18 @@ class EnhancedDownloadArchive: if self._migrated_file_name: self._download_mapping.to_file(output_json_file=self.working_file_path) self.save_file_to_output_directory( - file_name=self.file_name, output_file_name=self._migrated_file_name + file_name=self.file_name, output_file_name=self._migrated_file_name, copy_file=True ) + FileHandler.delete(file_path=self.working_file_path) + # and delete the old one if the name differs if self._file_name != self._migrated_file_name: self.delete_file_from_output_directory(file_name=self.file_name) # Otherwise, only save if there are changes to the transaction log elif not self.get_file_handler_transaction_log().is_empty: self._download_mapping.to_file(output_json_file=self.working_file_path) - self.save_file_to_output_directory(file_name=self.file_name) + self.save_file_to_output_directory(file_name=self.file_name, copy_file=True) + FileHandler.delete(file_path=self.working_file_path) return self def delete_file_from_output_directory(self, file_name: str): diff --git a/tests/resources/expected_downloads_summaries/bandcamp/test_artist_url.json b/tests/resources/expected_downloads_summaries/bandcamp/test_artist_url.json index f56b6371..268b0aab 100644 --- a/tests/resources/expected_downloads_summaries/bandcamp/test_artist_url.json +++ b/tests/resources/expected_downloads_summaries/bandcamp/test_artist_url.json @@ -1,10 +1,5 @@ { - ".ytdl-sub-Sithu Aye-download-archive.json": "1c4bcf58581eac1851be92ee29a3c4d7", - "Sithu Aye/[2021] 10 Years: Remixes and Reimaginings/01 - Double Helix Reimagined.mp3": "ac0e6a2936c309765c69a4c98c42ad10", - "Sithu Aye/[2021] 10 Years: Remixes and Reimaginings/02 - Skye Reimagined.mp3": "38387bd0ec5fc229e30b1a8ce5b9cddb", - "Sithu Aye/[2021] 10 Years: Remixes and Reimaginings/03 - Baryofusion.mp3": "344dbb939b09713dcc33894a8b1b8459", - "Sithu Aye/[2021] 10 Years: Remixes and Reimaginings/04 - Mandalay Reimagined.mp3": "9bacbd5166a740c06d3329dcfae0d9aa", - "Sithu Aye/[2021] 10 Years: Remixes and Reimaginings/folder.jpg": "bf6f70d51557a71b69fed85b2cb476f0", + ".ytdl-sub-Sithu Aye-download-archive.json": "93ad50c4f4cca753f40c46bc6e31cabf", "Sithu Aye/[2022] Re:Invent the Universe (10th Anniversary Remaster)/01 - Invent the Universe.mp3": "482e97a4f9a30aa4413f45f5f3f5dbba", "Sithu Aye/[2022] Re:Invent the Universe (10th Anniversary Remaster)/02 - Grand Unification (feat. David Maxim Micic).mp3": "34e43fd80b4c61295abbb8b794e523a7", "Sithu Aye/[2022] Re:Invent the Universe (10th Anniversary Remaster)/03 - Expansion.mp3": "0ba4b8ef65e274cbf065b6f0a5f444e5", @@ -16,6 +11,10 @@ "Sithu Aye/[2022] Re:Invent the Universe (10th Anniversary Remaster)/09 - Formation.mp3": "d588ed8edc324ea657abb2be96d557a1", "Sithu Aye/[2022] Re:Invent the Universe (10th Anniversary Remaster)/10 - Pale Blue Dot.mp3": "8245d285ba2403bf512f83c4a585eb81", "Sithu Aye/[2022] Re:Invent the Universe (10th Anniversary Remaster)/folder.jpg": "d8cffeca026afaa619f641a95143f803", - "Sithu Aye/[2024] Kindness/01 - Run it Down.mp3": "9570867fd53419c1297411c9bf877a62", + "Sithu Aye/[2024] Kindness/01 - Run it Down.mp3": "227c366845913f3476ae83fce0b72c56", + "Sithu Aye/[2024] Kindness/02 - Zero Sum Groove.mp3": "0bd3b51acefc2a363309a8f94dd146d7", + "Sithu Aye/[2024] Kindness/03 - Obsidian.mp3": "2a6b87e1ab5a69fc6c4503dc0dd03623", + "Sithu Aye/[2024] Kindness/04 - Fear is the Kindness Killer.mp3": "4593d02a83f722d481846552554d13ba", + "Sithu Aye/[2024] Kindness/05 - Ghost;Cleanse.mp3": "f89156a892b597be9b594ce10131ab60", "Sithu Aye/[2024] Kindness/folder.jpg": "8f72c9acb1a2e49fcbdc2624a46b229c" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/chapters/test_chapters_from_comments.json b/tests/resources/expected_downloads_summaries/plugins/chapters/test_chapters_from_comments.json index 38d69b12..d7ca529e 100644 --- a/tests/resources/expected_downloads_summaries/plugins/chapters/test_chapters_from_comments.json +++ b/tests/resources/expected_downloads_summaries/plugins/chapters/test_chapters_from_comments.json @@ -1,6 +1,7 @@ { - ".ytdl-sub-chapters_from_comments-download-archive.json": "2510b2ff3c54aa4813a4f23ea079e1ec", + ".ytdl-sub-chapters_from_comments-download-archive.json": "70bc3bb62af3a344b0256e1d3b98dcb0", + "JMC/Move 78 - Automated Improvisation [Full Album].info.json": "INFO_JSON", "JMC/Move 78 - Automated Improvisation [Full Album].jpg": "c12e6a6f242680d1096a1a99d74a62c6", - "JMC/Move 78 - Automated Improvisation [Full Album].mp4": "63119bd17a035574263aeec188e11d5e", + "JMC/Move 78 - Automated Improvisation [Full Album].mp4": "fbe825bf5fb8ce193d47c3da3540e815", "JMC/Move 78 - Automated Improvisation [Full Album].nfo": "039268e97673a6f2b391772ec3b52fac" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/file_convert/output.json b/tests/resources/expected_downloads_summaries/plugins/file_convert/output.json index 019997af..3d9d244f 100644 --- a/tests/resources/expected_downloads_summaries/plugins/file_convert/output.json +++ b/tests/resources/expected_downloads_summaries/plugins/file_convert/output.json @@ -1,6 +1,7 @@ { - ".ytdl-sub-file_convert_test-download-archive.json": "f720289a704349fbe38ef5ed451af724", + ".ytdl-sub-file_convert_test-download-archive.json": "36ac81b6a021c1479a588477d74afd38", + "file_convert_test/When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.info.json": "INFO_JSON", "file_convert_test/When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.jpg": "662fcaadf6e80d63591bac19a5fdffb0", - "file_convert_test/When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.mp4": "24f5057254471bc6ecc3056e91af1444", + "file_convert_test/When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.mp4": "7609c4f53565aa8f9eac50ad755b5c47", "file_convert_test/When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.nfo": "752e6b6eea853c8a1f62faa4b841b292" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/file_convert/output_custom_ffmpeg.json b/tests/resources/expected_downloads_summaries/plugins/file_convert/output_custom_ffmpeg.json index 361a6c30..b82a93ce 100644 --- a/tests/resources/expected_downloads_summaries/plugins/file_convert/output_custom_ffmpeg.json +++ b/tests/resources/expected_downloads_summaries/plugins/file_convert/output_custom_ffmpeg.json @@ -1,5 +1,6 @@ { - ".ytdl-sub-file_convert_test-download-archive.json": "8fa4bf42c9686f8520ce107e48b73215", + ".ytdl-sub-file_convert_test-download-archive.json": "83e57376a260ab3a58978dee4a06df4a", + "file_convert_test/When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.info.json": "INFO_JSON", "file_convert_test/When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.jpg": "662fcaadf6e80d63591bac19a5fdffb0", "file_convert_test/When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.mkv": "175320a51dc3efcea84daebec3c1d7e1", "file_convert_test/When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.nfo": "752e6b6eea853c8a1f62faa4b841b292" diff --git a/tests/resources/expected_downloads_summaries/plugins/match_filters/test_match_filters_partial.json b/tests/resources/expected_downloads_summaries/plugins/match_filters/test_match_filters_partial.json index 2a6691fb..3eeb24ed 100644 --- a/tests/resources/expected_downloads_summaries/plugins/match_filters/test_match_filters_partial.json +++ b/tests/resources/expected_downloads_summaries/plugins/match_filters/test_match_filters_partial.json @@ -1,6 +1,7 @@ { - ".ytdl-sub-match_filter_test-download-archive.json": "30f10646149d9eea4eb970749f352f7d", + ".ytdl-sub-match_filter_test-download-archive.json": "c2154694d771b47e7878622851b379b7", + "match_filter_test/Jesse's Minecraft Server [Trailer - Mar.21].info.json": "INFO_JSON", "match_filter_test/Jesse's Minecraft Server [Trailer - Mar.21].jpg": "e7830aa8a64b0cde65ba3f7e5fc56530", - "match_filter_test/Jesse's Minecraft Server [Trailer - Mar.21].mp4": "f17a540070964a199b35f981561d94e4", + "match_filter_test/Jesse's Minecraft Server [Trailer - Mar.21].mp4": "a0dc417dbf369c47bbac571bdb18e0e4", "match_filter_test/Jesse's Minecraft Server [Trailer - Mar.21].nfo": "d85f4500bb5d8a2425d734a23b5a944c" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_playlist.json b/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_playlist.json index 83ed5f8b..7075adc2 100644 --- a/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_playlist.json +++ b/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_playlist.json @@ -1,6 +1,6 @@ { ".ytdl-sub-multiple_songs_test-download-archive.json": "54237df5e00d1598dfd39f341ee03d75", - "Project Zombie/[2011] Jesse's Minecraft Server/01 - Jesse's Minecraft Server [Trailer - Mar.21].ogg": "9e53a68a39f290899a3dce03fdca6490", + "Project Zombie/[2011] Jesse's Minecraft Server/01 - Jesse's Minecraft Server [Trailer - Mar.21].ogg": "221dab6e9d6840a0b4b7bb24444c87ff", "Project Zombie/[2011] Jesse's Minecraft Server/02 - Jesse's Minecraft Server [Trailer - Feb.27].ogg": "02dc8e368de9555d062bde31dcc82852", "Project Zombie/[2011] Jesse's Minecraft Server/03 - Jesse's Minecraft Server [Trailer - Feb.1].ogg": "c808e1da2bccd419201eeeffc32c3729", "Project Zombie/[2011] Jesse's Minecraft Server/folder.jpg": "e7830aa8a64b0cde65ba3f7e5fc56530" diff --git a/tests/resources/expected_downloads_summaries/plugins/test_chapters_sb_and_embedded_subs.json b/tests/resources/expected_downloads_summaries/plugins/test_chapters_sb_and_embedded_subs.json index dcf23c96..675ae0ec 100644 --- a/tests/resources/expected_downloads_summaries/plugins/test_chapters_sb_and_embedded_subs.json +++ b/tests/resources/expected_downloads_summaries/plugins/test_chapters_sb_and_embedded_subs.json @@ -1,6 +1,7 @@ { - ".ytdl-sub-sponsorblock_with_embedded_subs_test-download-archive.json": "2cb4b9586fd5bb7f1fed76ed9195e6e4", + ".ytdl-sub-sponsorblock_with_embedded_subs_test-download-archive.json": "53eda1f626aaec8814ff005bf8d46ef7", + "JMC/This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.info.json": "INFO_JSON", "JMC/This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.jpg": "b5353a824a4800cc26f884e3025ed969", - "JMC/This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.mp4": "0539ff781c824f17ae3ffbd7dc830a8f", + "JMC/This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.mp4": "19889ac778397147e55fe640c9a0f490", "JMC/This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.nfo": "ae73ec18a9f0e5a54c90061ccd32e7f4" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/test_subtitles_embedded.json b/tests/resources/expected_downloads_summaries/plugins/test_subtitles_embedded.json index 74a88813..b219d9fd 100644 --- a/tests/resources/expected_downloads_summaries/plugins/test_subtitles_embedded.json +++ b/tests/resources/expected_downloads_summaries/plugins/test_subtitles_embedded.json @@ -1,5 +1,6 @@ { - ".ytdl-sub-subtitles_embedded_test-download-archive.json": "a74ecea9f7844be23f470bbe702788f3", + ".ytdl-sub-subtitles_embedded_test-download-archive.json": "538f36d011bb6077de044263d511a45b", + "JMC/YouTube Rewind 2019: For the Record | #YouTubeRewind.info.json": "INFO_JSON", "JMC/YouTube Rewind 2019: For the Record | #YouTubeRewind.jpg": "50ee47c80f679029f5d3503bb91b045a", "JMC/YouTube Rewind 2019: For the Record | #YouTubeRewind.mp4": "f90f3bb948014420931c337b09007a18", "JMC/YouTube Rewind 2019: For the Record | #YouTubeRewind.nfo": "e6ac56ce52c747e2e271f12208f9a538" diff --git a/tests/resources/expected_downloads_summaries/plugins/test_subtitles_embedded_and_file.json b/tests/resources/expected_downloads_summaries/plugins/test_subtitles_embedded_and_file.json index 7c4baeb6..4c288220 100644 --- a/tests/resources/expected_downloads_summaries/plugins/test_subtitles_embedded_and_file.json +++ b/tests/resources/expected_downloads_summaries/plugins/test_subtitles_embedded_and_file.json @@ -1,7 +1,8 @@ { - ".ytdl-sub-subtitles_embedded_and_file_test-download-archive.json": "a05bbc3b8851e92da10c67cd9acb32d0", + ".ytdl-sub-subtitles_embedded_and_file_test-download-archive.json": "470a4652395e01c970aaa40fe8fcea6c", "JMC/YouTube Rewind 2019: For the Record | #YouTubeRewind.de.srt": "b343c3bb9257b7ee7ba38f570a115b37", "JMC/YouTube Rewind 2019: For the Record | #YouTubeRewind.en.srt": "fe8c6ee92cae6e059fd80fd61691adbe", + "JMC/YouTube Rewind 2019: For the Record | #YouTubeRewind.info.json": "INFO_JSON", "JMC/YouTube Rewind 2019: For the Record | #YouTubeRewind.jpg": "50ee47c80f679029f5d3503bb91b045a", "JMC/YouTube Rewind 2019: For the Record | #YouTubeRewind.mp4": "f90f3bb948014420931c337b09007a18", "JMC/YouTube Rewind 2019: For the Record | #YouTubeRewind.nfo": "e6ac56ce52c747e2e271f12208f9a538" diff --git a/tests/resources/expected_downloads_summaries/unit/music_videos/Jellyfin Music Videos.json b/tests/resources/expected_downloads_summaries/unit/music_videos/Jellyfin Music Videos.json index 60381877..72e4fbce 100644 --- a/tests/resources/expected_downloads_summaries/unit/music_videos/Jellyfin Music Videos.json +++ b/tests/resources/expected_downloads_summaries/unit/music_videos/Jellyfin Music Videos.json @@ -1,14 +1,18 @@ { - ".ytdl-sub-subscription_test-download-archive.json": "d9f5fdb6fc3fc3c3bf87772c406448ec", + ".ytdl-sub-subscription_test-download-archive.json": "b98a30417f259daeec888e1a5047b9ed", + "subscription_test/Mock Entry 20-1.info.json": "INFO_JSON", "subscription_test/Mock Entry 20-1.jpg": "e80c508c4818454300133fe1dc1a9cd7", "subscription_test/Mock Entry 20-1.mp4": "34916dc26e723c3464adcc4687898ca8", "subscription_test/Mock Entry 20-1.nfo": "68a6a9e51a12e75d4c68e6e644b409d1", + "subscription_test/Mock Entry 20-2.info.json": "INFO_JSON", "subscription_test/Mock Entry 20-2.jpg": "e80c508c4818454300133fe1dc1a9cd7", "subscription_test/Mock Entry 20-2.mp4": "01a910b7a023325aa9d4ad3a013a1e02", "subscription_test/Mock Entry 20-2.nfo": "1cbe51945c1a7a9ced0eb1222e9d2405", + "subscription_test/Mock Entry 20-3.info.json": "INFO_JSON", "subscription_test/Mock Entry 20-3.jpg": "e80c508c4818454300133fe1dc1a9cd7", "subscription_test/Mock Entry 20-3.mp4": "812b6db9ff08bf1822e99e43d371400d", "subscription_test/Mock Entry 20-3.nfo": "ef07f30d3e882de3f7cb3ad675125352", + "subscription_test/Mock Entry 21-1.info.json": "INFO_JSON", "subscription_test/Mock Entry 21-1.jpg": "e80c508c4818454300133fe1dc1a9cd7", "subscription_test/Mock Entry 21-1.mp4": "079832b6e49b283d80be402c9c928b90", "subscription_test/Mock Entry 21-1.nfo": "dc714fd9f3c3729f74927ad245b50d9d" diff --git a/tests/resources/expected_downloads_summaries/unit/music_videos/Kodi Music Videos.json b/tests/resources/expected_downloads_summaries/unit/music_videos/Kodi Music Videos.json index 60381877..72e4fbce 100644 --- a/tests/resources/expected_downloads_summaries/unit/music_videos/Kodi Music Videos.json +++ b/tests/resources/expected_downloads_summaries/unit/music_videos/Kodi Music Videos.json @@ -1,14 +1,18 @@ { - ".ytdl-sub-subscription_test-download-archive.json": "d9f5fdb6fc3fc3c3bf87772c406448ec", + ".ytdl-sub-subscription_test-download-archive.json": "b98a30417f259daeec888e1a5047b9ed", + "subscription_test/Mock Entry 20-1.info.json": "INFO_JSON", "subscription_test/Mock Entry 20-1.jpg": "e80c508c4818454300133fe1dc1a9cd7", "subscription_test/Mock Entry 20-1.mp4": "34916dc26e723c3464adcc4687898ca8", "subscription_test/Mock Entry 20-1.nfo": "68a6a9e51a12e75d4c68e6e644b409d1", + "subscription_test/Mock Entry 20-2.info.json": "INFO_JSON", "subscription_test/Mock Entry 20-2.jpg": "e80c508c4818454300133fe1dc1a9cd7", "subscription_test/Mock Entry 20-2.mp4": "01a910b7a023325aa9d4ad3a013a1e02", "subscription_test/Mock Entry 20-2.nfo": "1cbe51945c1a7a9ced0eb1222e9d2405", + "subscription_test/Mock Entry 20-3.info.json": "INFO_JSON", "subscription_test/Mock Entry 20-3.jpg": "e80c508c4818454300133fe1dc1a9cd7", "subscription_test/Mock Entry 20-3.mp4": "812b6db9ff08bf1822e99e43d371400d", "subscription_test/Mock Entry 20-3.nfo": "ef07f30d3e882de3f7cb3ad675125352", + "subscription_test/Mock Entry 21-1.info.json": "INFO_JSON", "subscription_test/Mock Entry 21-1.jpg": "e80c508c4818454300133fe1dc1a9cd7", "subscription_test/Mock Entry 21-1.mp4": "079832b6e49b283d80be402c9c928b90", "subscription_test/Mock Entry 21-1.nfo": "dc714fd9f3c3729f74927ad245b50d9d" diff --git a/tests/resources/expected_downloads_summaries/unit/music_videos/Plex Music Videos.json b/tests/resources/expected_downloads_summaries/unit/music_videos/Plex Music Videos.json index b2bc1dda..78727e67 100644 --- a/tests/resources/expected_downloads_summaries/unit/music_videos/Plex Music Videos.json +++ b/tests/resources/expected_downloads_summaries/unit/music_videos/Plex Music Videos.json @@ -1,11 +1,15 @@ { - ".ytdl-sub-subscription_test-download-archive.json": "7d31b00238ca1f66c5e7f4735ca7aa87", + ".ytdl-sub-subscription_test-download-archive.json": "6cb47203ec56d8318a0d428b5b4efa5d", + "subscription_test/Mock Entry 20-1.info.json": "INFO_JSON", "subscription_test/Mock Entry 20-1.jpg": "e80c508c4818454300133fe1dc1a9cd7", "subscription_test/Mock Entry 20-1.mp4": "34916dc26e723c3464adcc4687898ca8", + "subscription_test/Mock Entry 20-2.info.json": "INFO_JSON", "subscription_test/Mock Entry 20-2.jpg": "e80c508c4818454300133fe1dc1a9cd7", "subscription_test/Mock Entry 20-2.mp4": "01a910b7a023325aa9d4ad3a013a1e02", + "subscription_test/Mock Entry 20-3.info.json": "INFO_JSON", "subscription_test/Mock Entry 20-3.jpg": "e80c508c4818454300133fe1dc1a9cd7", "subscription_test/Mock Entry 20-3.mp4": "812b6db9ff08bf1822e99e43d371400d", + "subscription_test/Mock Entry 21-1.info.json": "INFO_JSON", "subscription_test/Mock Entry 21-1.jpg": "e80c508c4818454300133fe1dc1a9cd7", "subscription_test/Mock Entry 21-1.mp4": "079832b6e49b283d80be402c9c928b90" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/youtube/test_channel_full.json b/tests/resources/expected_downloads_summaries/youtube/test_channel_full.json index 7b5e7b2f..a1024507 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_channel_full.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_channel_full.json @@ -18,7 +18,7 @@ "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].nfo": "20af231e30a035fb2bc0c946f4b4026d", "Project ⧸ Zombie/Season 2011/s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21]-thumb.jpg": "e7830aa8a64b0cde65ba3f7e5fc56530", "Project ⧸ Zombie/Season 2011/s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "INFO_JSON", - "Project ⧸ Zombie/Season 2011/s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "eac3dfce44c2a723f2fc74e9552aa510", + "Project ⧸ Zombie/Season 2011/s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "7df8f1469adb02f1aecfbb049276cae7", "Project ⧸ Zombie/Season 2011/s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].nfo": "f8bdc463c0cb2ffdc82aba2bcc27ad5d", "Project ⧸ Zombie/Season 2011/s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net)-thumb.jpg": "c956192a379b3661595c9920972d4819", "Project ⧸ Zombie/Season 2011/s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).info.json": "INFO_JSON", diff --git a/tests/resources/expected_downloads_summaries/youtube/test_playlist.json b/tests/resources/expected_downloads_summaries/youtube/test_playlist.json index d7ed7312..91b6495d 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_playlist.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_playlist.json @@ -10,7 +10,7 @@ "JMC/Season 01/s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27].nfo": "da7645e8826586388ae0d8278ef6a1c1", "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21]-thumb.jpg": "e7830aa8a64b0cde65ba3f7e5fc56530", "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "INFO_JSON", - "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "dc04853870bbb811f6b312e20b58253b", + "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "91f22944f797513fcda9856e244dd3b3", "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].nfo": "c56083e2f3545fa2cafc4d67cbfdacf8", "JMC/fanart.jpg": "129c6639b47299bc48062f0365e670ee", "JMC/poster.jpg": "5de28eea5a921a041452ab3ce1041f73", diff --git a/tests/resources/expected_downloads_summaries/youtube/test_playlist_archive_migrated.json b/tests/resources/expected_downloads_summaries/youtube/test_playlist_archive_migrated.json index a35908dc..50f91133 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_playlist_archive_migrated.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_playlist_archive_migrated.json @@ -10,7 +10,7 @@ "JMC/Season 01/s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27].nfo": "da7645e8826586388ae0d8278ef6a1c1", "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21]-thumb.jpg": "e7830aa8a64b0cde65ba3f7e5fc56530", "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "INFO_JSON", - "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "dc04853870bbb811f6b312e20b58253b", + "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "91f22944f797513fcda9856e244dd3b3", "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].nfo": "c56083e2f3545fa2cafc4d67cbfdacf8", "JMC/fanart.jpg": "129c6639b47299bc48062f0365e670ee", "JMC/poster.jpg": "5de28eea5a921a041452ab3ce1041f73", diff --git a/tests/resources/expected_downloads_summaries/youtube/test_video.json b/tests/resources/expected_downloads_summaries/youtube/test_video.json index dd69c218..f4690775 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_video.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_video.json @@ -1,4 +1,5 @@ { + "JMC/Oblivion Mod "Falcor" p.1.info.json": "INFO_JSON", "JMC/Oblivion Mod "Falcor" p.1.jpg": "fb95b510681676e81c321171fc23143e", "JMC/Oblivion Mod "Falcor" p.1.mp4": "318faf3eb1d7666491553cdfd2a2e9fb", "JMC/Oblivion Mod "Falcor" p.1.nfo": "58c2be339869b5d071c1758d55c72ddb" diff --git a/tests/resources/expected_downloads_summaries/youtube/test_video_cli.json b/tests/resources/expected_downloads_summaries/youtube/test_video_cli.json index dd69c218..f4690775 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_video_cli.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_video_cli.json @@ -1,4 +1,5 @@ { + "JMC/Oblivion Mod "Falcor" p.1.info.json": "INFO_JSON", "JMC/Oblivion Mod "Falcor" p.1.jpg": "fb95b510681676e81c321171fc23143e", "JMC/Oblivion Mod "Falcor" p.1.mp4": "318faf3eb1d7666491553cdfd2a2e9fb", "JMC/Oblivion Mod "Falcor" p.1.nfo": "58c2be339869b5d071c1758d55c72ddb" diff --git a/tests/resources/expected_downloads_summaries/youtube/test_video_missing_thumb.json b/tests/resources/expected_downloads_summaries/youtube/test_video_missing_thumb.json index bf1811b0..b1eec149 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_video_missing_thumb.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_video_missing_thumb.json @@ -1,4 +1,5 @@ { + "JMC/Oblivion Mod "Falcor" p.1.info.json": "INFO_JSON", "JMC/Oblivion Mod "Falcor" p.1.mp4": "d3bdda5ec6822ea3b4b4bd8908eb327a", "JMC/Oblivion Mod "Falcor" p.1.nfo": "58c2be339869b5d071c1758d55c72ddb" } \ No newline at end of file diff --git a/tests/resources/transaction_log_summaries/bandcamp/test_artist_url.txt b/tests/resources/transaction_log_summaries/bandcamp/test_artist_url.txt index 60d1e689..b5a0cc29 100644 --- a/tests/resources/transaction_log_summaries/bandcamp/test_artist_url.txt +++ b/tests/resources/transaction_log_summaries/bandcamp/test_artist_url.txt @@ -2,64 +2,6 @@ Files created: ---------------------------------------- {output_directory} .ytdl-sub-Sithu Aye-download-archive.json -{output_directory}/Sithu Aye/[2021] 10 Years: Remixes and Reimaginings - 01 - Double Helix Reimagined.mp3 - Music Tags: - album: 10 Years: Remixes and Reimaginings - albumartist: Sithu Aye - albumartists: Sithu Aye - artist: Sithu Aye - artists: Sithu Aye - date: 2021-11-26 - genres: Progressive Metal - original_date: 2021-11-26 - title: Double Helix Reimagined - track: 1 - tracktotal: 10 - year: 2021 - 02 - Skye Reimagined.mp3 - Music Tags: - album: 10 Years: Remixes and Reimaginings - albumartist: Sithu Aye - albumartists: Sithu Aye - artist: Sithu Aye - artists: Sithu Aye - date: 2021-11-26 - genres: Progressive Metal - original_date: 2021-11-26 - title: Skye Reimagined - track: 2 - tracktotal: 10 - year: 2021 - 03 - Baryofusion.mp3 - Music Tags: - album: 10 Years: Remixes and Reimaginings - albumartist: Sithu Aye - albumartists: Sithu Aye - artist: Sithu Aye - artists: Sithu Aye - date: 2021-11-26 - genres: Progressive Metal - original_date: 2021-11-26 - title: Baryofusion - track: 3 - tracktotal: 10 - year: 2021 - 04 - Mandalay Reimagined.mp3 - Music Tags: - album: 10 Years: Remixes and Reimaginings - albumartist: Sithu Aye - albumartists: Sithu Aye - artist: Sithu Aye - artists: Sithu Aye - date: 2021-11-26 - genres: Progressive Metal - original_date: 2021-11-26 - title: Mandalay Reimagined - track: 4 - tracktotal: 10 - year: 2021 - folder.jpg {output_directory}/Sithu Aye/[2022] Re:Invent the Universe (10th Anniversary Remaster) 01 - Invent the Universe.mp3 Music Tags: @@ -215,6 +157,62 @@ Files created: original_date: 2024-03-23 title: Run it Down track: 1 - tracktotal: 1 + tracktotal: 5 + year: 2024 + 02 - Zero Sum Groove.mp3 + Music Tags: + album: Kindness + albumartist: Sithu Aye + albumartists: Sithu Aye + artist: Sithu Aye + artists: Sithu Aye + date: 2024-03-23 + genres: Progressive Metal + original_date: 2024-03-23 + title: Zero Sum Groove + track: 2 + tracktotal: 5 + year: 2024 + 03 - Obsidian.mp3 + Music Tags: + album: Kindness + albumartist: Sithu Aye + albumartists: Sithu Aye + artist: Sithu Aye + artists: Sithu Aye + date: 2024-03-23 + genres: Progressive Metal + original_date: 2024-03-23 + title: Obsidian + track: 3 + tracktotal: 5 + year: 2024 + 04 - Fear is the Kindness Killer.mp3 + Music Tags: + album: Kindness + albumartist: Sithu Aye + albumartists: Sithu Aye + artist: Sithu Aye + artists: Sithu Aye + date: 2024-03-23 + genres: Progressive Metal + original_date: 2024-03-23 + title: Fear is the Kindness Killer + track: 4 + tracktotal: 5 + year: 2024 + 05 - Ghost;Cleanse.mp3 + Music Tags: + album: Kindness + albumartist: Sithu Aye + albumartists: Sithu Aye + artist: Sithu Aye + artists: Sithu Aye + date: 2024-03-23 + genres: Progressive Metal + original_date: 2024-03-23 + title: Ghost;Cleanse + track: 5 + tracktotal: 5 year: 2024 folder.jpg \ No newline at end of file diff --git a/tests/resources/transaction_log_summaries/plugins/chapters/test_chapters_from_comments.txt b/tests/resources/transaction_log_summaries/plugins/chapters/test_chapters_from_comments.txt index 007c19b8..40f060d6 100644 --- a/tests/resources/transaction_log_summaries/plugins/chapters/test_chapters_from_comments.txt +++ b/tests/resources/transaction_log_summaries/plugins/chapters/test_chapters_from_comments.txt @@ -3,8 +3,19 @@ Files created: {output_directory} .ytdl-sub-chapters_from_comments-download-archive.json {output_directory}/JMC + Move 78 - Automated Improvisation [Full Album].info.json Move 78 - Automated Improvisation [Full Album].jpg Move 78 - Automated Improvisation [Full Album].mp4 + Chapters from comments: + 0:00: 01. The Lonely Tears of Lee Seedol + 4:30: 02. But What If We're Wrong + 9:16: 03. Follow the Earworm Pt.2 + 12:25: 04. Keyword Salad + 16:48: 05. Ultra Natural + 20:47: 06. Flight Instructions + 25:46: 07. Dawn of the Useless Class + 29:58: 08. Schnitzel Whisperer + 32:16: 09. Teilo Embedded subtitles with lang(s) en, de Video Tags: album: Music Videos diff --git a/tests/resources/transaction_log_summaries/plugins/file_convert/output.txt b/tests/resources/transaction_log_summaries/plugins/file_convert/output.txt index e5550820..6f9d3c13 100644 --- a/tests/resources/transaction_log_summaries/plugins/file_convert/output.txt +++ b/tests/resources/transaction_log_summaries/plugins/file_convert/output.txt @@ -3,6 +3,7 @@ Files created: {output_directory} .ytdl-sub-file_convert_test-download-archive.json {output_directory}/file_convert_test + When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.info.json When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.jpg When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/plugins/file_convert/output_custom_ffmpeg.txt b/tests/resources/transaction_log_summaries/plugins/file_convert/output_custom_ffmpeg.txt index d42cf277..4b82d0b4 100644 --- a/tests/resources/transaction_log_summaries/plugins/file_convert/output_custom_ffmpeg.txt +++ b/tests/resources/transaction_log_summaries/plugins/file_convert/output_custom_ffmpeg.txt @@ -3,6 +3,7 @@ Files created: {output_directory} .ytdl-sub-file_convert_test-download-archive.json {output_directory}/file_convert_test + When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.info.json When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.jpg When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.mkv Converted from mp4 diff --git a/tests/resources/transaction_log_summaries/plugins/match_filters/test_match_filters_partial.txt b/tests/resources/transaction_log_summaries/plugins/match_filters/test_match_filters_partial.txt index 89645782..74b7e886 100644 --- a/tests/resources/transaction_log_summaries/plugins/match_filters/test_match_filters_partial.txt +++ b/tests/resources/transaction_log_summaries/plugins/match_filters/test_match_filters_partial.txt @@ -3,6 +3,7 @@ Files created: {output_directory} .ytdl-sub-match_filter_test-download-archive.json {output_directory}/match_filter_test + Jesse's Minecraft Server [Trailer - Mar.21].info.json Jesse's Minecraft Server [Trailer - Mar.21].jpg Jesse's Minecraft Server [Trailer - Mar.21].mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/plugins/nfo_tags/test_nfo.txt b/tests/resources/transaction_log_summaries/plugins/nfo_tags/test_nfo.txt index 268f1451..7db40b0e 100644 --- a/tests/resources/transaction_log_summaries/plugins/nfo_tags/test_nfo.txt +++ b/tests/resources/transaction_log_summaries/plugins/nfo_tags/test_nfo.txt @@ -35,6 +35,7 @@ Files created: the tag 🎸🎸 {output_directory}/kodi_safe_xml + Can you hear the difference? 🎸🔥 #shorts.info.json Can you hear the difference? 🎸🔥 #shorts.jpg Can you hear the difference? 🎸🔥 #shorts.mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/plugins/nfo_tags/test_nfo_kodi_safe.txt b/tests/resources/transaction_log_summaries/plugins/nfo_tags/test_nfo_kodi_safe.txt index 12d167e5..7438981f 100644 --- a/tests/resources/transaction_log_summaries/plugins/nfo_tags/test_nfo_kodi_safe.txt +++ b/tests/resources/transaction_log_summaries/plugins/nfo_tags/test_nfo_kodi_safe.txt @@ -35,6 +35,7 @@ Files created: the tag □□ {output_directory}/kodi_safe_xml + Can you hear the difference? 🎸🔥 #shorts.info.json Can you hear the difference? 🎸🔥 #shorts.jpg Can you hear the difference? 🎸🔥 #shorts.mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/plugins/test_chapters_sb_and_embedded_subs.txt b/tests/resources/transaction_log_summaries/plugins/test_chapters_sb_and_embedded_subs.txt index 8aa485cd..8315936f 100644 --- a/tests/resources/transaction_log_summaries/plugins/test_chapters_sb_and_embedded_subs.txt +++ b/tests/resources/transaction_log_summaries/plugins/test_chapters_sb_and_embedded_subs.txt @@ -3,6 +3,7 @@ Files created: {output_directory} .ytdl-sub-sponsorblock_with_embedded_subs_test-download-archive.json {output_directory}/JMC + This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.info.json This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.jpg This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.mp4 Embedded Chapters: diff --git a/tests/resources/transaction_log_summaries/plugins/test_regex.txt b/tests/resources/transaction_log_summaries/plugins/test_regex.txt index 3ec6c7c9..02113654 100644 --- a/tests/resources/transaction_log_summaries/plugins/test_regex.txt +++ b/tests/resources/transaction_log_summaries/plugins/test_regex.txt @@ -3,6 +3,7 @@ Files created: {output_directory} .ytdl-sub-regex_capture_playlist_test-download-archive.json {output_directory}/regex_capture_playlist_test + Jesse's Minecraft Server [Trailer - Feb.1].info.json Jesse's Minecraft Server [Trailer - Feb.1].jpg Jesse's Minecraft Server [Trailer - Feb.1].mp4 Video Tags: @@ -27,6 +28,7 @@ Files created: title_cap_1_sanitized: Trailer title_cap_2: Feb.1 upload_date_both_caps: First and Second containing in regex default + Jesse's Minecraft Server [Trailer - Feb.27].info.json Jesse's Minecraft Server [Trailer - Feb.27].jpg Jesse's Minecraft Server [Trailer - Feb.27].mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/plugins/test_regex_exclude.txt b/tests/resources/transaction_log_summaries/plugins/test_regex_exclude.txt index 7bdf2485..6ea8e91a 100644 --- a/tests/resources/transaction_log_summaries/plugins/test_regex_exclude.txt +++ b/tests/resources/transaction_log_summaries/plugins/test_regex_exclude.txt @@ -3,6 +3,7 @@ Files created: {output_directory} .ytdl-sub-regex_exclude_playlist_test-download-archive.json {output_directory}/regex_exclude_playlist_test + Jesse's Minecraft Server [Trailer - Mar.21].info.json Jesse's Minecraft Server [Trailer - Mar.21].jpg Jesse's Minecraft Server [Trailer - Mar.21].mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/plugins/test_regex_match_and_exclude.txt b/tests/resources/transaction_log_summaries/plugins/test_regex_match_and_exclude.txt index 74f9b7c9..683f6dfd 100644 --- a/tests/resources/transaction_log_summaries/plugins/test_regex_match_and_exclude.txt +++ b/tests/resources/transaction_log_summaries/plugins/test_regex_match_and_exclude.txt @@ -3,6 +3,7 @@ Files created: {output_directory} .ytdl-sub-regex_match_and_exclude_playlist_test-download-archive.json {output_directory}/regex_match_and_exclude_playlist_test + Jesse's Minecraft Server [Trailer - Feb.1].info.json Jesse's Minecraft Server [Trailer - Feb.1].jpg Jesse's Minecraft Server [Trailer - Feb.1].mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/plugins/test_regex_overrides.txt b/tests/resources/transaction_log_summaries/plugins/test_regex_overrides.txt index f8444df7..82c0644a 100644 --- a/tests/resources/transaction_log_summaries/plugins/test_regex_overrides.txt +++ b/tests/resources/transaction_log_summaries/plugins/test_regex_overrides.txt @@ -3,6 +3,7 @@ Files created: {output_directory} .ytdl-sub-regex_using_overrides_test-download-archive.json {output_directory}/regex_using_overrides_test + Jesse's Minecraft Server [Trailer - Mar.21].info.json Jesse's Minecraft Server [Trailer - Mar.21].jpg Jesse's Minecraft Server [Trailer - Mar.21].mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/plugins/test_subtitles_embedded.txt b/tests/resources/transaction_log_summaries/plugins/test_subtitles_embedded.txt index c4b02af2..8831a18c 100644 --- a/tests/resources/transaction_log_summaries/plugins/test_subtitles_embedded.txt +++ b/tests/resources/transaction_log_summaries/plugins/test_subtitles_embedded.txt @@ -3,6 +3,7 @@ Files created: {output_directory} .ytdl-sub-subtitles_embedded_test-download-archive.json {output_directory}/JMC + YouTube Rewind 2019: For the Record | #YouTubeRewind.info.json YouTube Rewind 2019: For the Record | #YouTubeRewind.jpg YouTube Rewind 2019: For the Record | #YouTubeRewind.mp4 Embedded subtitles with lang(s) en, de diff --git a/tests/resources/transaction_log_summaries/plugins/test_subtitles_embedded_and_file.txt b/tests/resources/transaction_log_summaries/plugins/test_subtitles_embedded_and_file.txt index c466b11f..3d2996df 100644 --- a/tests/resources/transaction_log_summaries/plugins/test_subtitles_embedded_and_file.txt +++ b/tests/resources/transaction_log_summaries/plugins/test_subtitles_embedded_and_file.txt @@ -5,6 +5,7 @@ Files created: {output_directory}/JMC YouTube Rewind 2019: For the Record | #YouTubeRewind.de.srt YouTube Rewind 2019: For the Record | #YouTubeRewind.en.srt + YouTube Rewind 2019: For the Record | #YouTubeRewind.info.json YouTube Rewind 2019: For the Record | #YouTubeRewind.jpg YouTube Rewind 2019: For the Record | #YouTubeRewind.mp4 Embedded subtitles with lang(s) en, de diff --git a/tests/resources/transaction_log_summaries/unit/music_videos/Jellyfin Music Videos.txt b/tests/resources/transaction_log_summaries/unit/music_videos/Jellyfin Music Videos.txt index b1440018..52e2c27d 100644 --- a/tests/resources/transaction_log_summaries/unit/music_videos/Jellyfin Music Videos.txt +++ b/tests/resources/transaction_log_summaries/unit/music_videos/Jellyfin Music Videos.txt @@ -3,6 +3,7 @@ Files created: {output_directory} .ytdl-sub-subscription_test-download-archive.json {output_directory}/subscription_test + Mock Entry 20-1.info.json Mock Entry 20-1.jpg Mock Entry 20-1.mp4 Video Tags: @@ -20,6 +21,7 @@ Files created: genre: ytdl-sub premiered: 2020-08-08 title: Mock Entry 20-1 + Mock Entry 20-2.info.json Mock Entry 20-2.jpg Mock Entry 20-2.mp4 Video Tags: @@ -37,6 +39,7 @@ Files created: genre: ytdl-sub premiered: 2020-08-08 title: Mock Entry 20-2 + Mock Entry 20-3.info.json Mock Entry 20-3.jpg Mock Entry 20-3.mp4 Video Tags: @@ -54,6 +57,7 @@ Files created: genre: ytdl-sub premiered: 2020-08-07 title: Mock Entry 20-3 + Mock Entry 21-1.info.json Mock Entry 21-1.jpg Mock Entry 21-1.mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/unit/music_videos/Kodi Music Videos.txt b/tests/resources/transaction_log_summaries/unit/music_videos/Kodi Music Videos.txt index b1440018..52e2c27d 100644 --- a/tests/resources/transaction_log_summaries/unit/music_videos/Kodi Music Videos.txt +++ b/tests/resources/transaction_log_summaries/unit/music_videos/Kodi Music Videos.txt @@ -3,6 +3,7 @@ Files created: {output_directory} .ytdl-sub-subscription_test-download-archive.json {output_directory}/subscription_test + Mock Entry 20-1.info.json Mock Entry 20-1.jpg Mock Entry 20-1.mp4 Video Tags: @@ -20,6 +21,7 @@ Files created: genre: ytdl-sub premiered: 2020-08-08 title: Mock Entry 20-1 + Mock Entry 20-2.info.json Mock Entry 20-2.jpg Mock Entry 20-2.mp4 Video Tags: @@ -37,6 +39,7 @@ Files created: genre: ytdl-sub premiered: 2020-08-08 title: Mock Entry 20-2 + Mock Entry 20-3.info.json Mock Entry 20-3.jpg Mock Entry 20-3.mp4 Video Tags: @@ -54,6 +57,7 @@ Files created: genre: ytdl-sub premiered: 2020-08-07 title: Mock Entry 20-3 + Mock Entry 21-1.info.json Mock Entry 21-1.jpg Mock Entry 21-1.mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/unit/music_videos/Plex Music Videos.txt b/tests/resources/transaction_log_summaries/unit/music_videos/Plex Music Videos.txt index 32813f22..520d916d 100644 --- a/tests/resources/transaction_log_summaries/unit/music_videos/Plex Music Videos.txt +++ b/tests/resources/transaction_log_summaries/unit/music_videos/Plex Music Videos.txt @@ -3,6 +3,7 @@ Files created: {output_directory} .ytdl-sub-subscription_test-download-archive.json {output_directory}/subscription_test + Mock Entry 20-1.info.json Mock Entry 20-1.jpg Mock Entry 20-1.mp4 Video Tags: @@ -12,6 +13,7 @@ Files created: premiered: 2020-08-08 title: Mock Entry 20-1 year: 2020 + Mock Entry 20-2.info.json Mock Entry 20-2.jpg Mock Entry 20-2.mp4 Video Tags: @@ -21,6 +23,7 @@ Files created: premiered: 2020-08-08 title: Mock Entry 20-2 year: 2020 + Mock Entry 20-3.info.json Mock Entry 20-3.jpg Mock Entry 20-3.mp4 Video Tags: @@ -30,6 +33,7 @@ Files created: premiered: 2020-08-07 title: Mock Entry 20-3 year: 2020 + Mock Entry 21-1.info.json Mock Entry 21-1.jpg Mock Entry 21-1.mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/youtube/test_video.txt b/tests/resources/transaction_log_summaries/youtube/test_video.txt index 48cb51eb..97392956 100644 --- a/tests/resources/transaction_log_summaries/youtube/test_video.txt +++ b/tests/resources/transaction_log_summaries/youtube/test_video.txt @@ -1,6 +1,7 @@ Files created: ---------------------------------------- {output_directory}/JMC + Oblivion Mod "Falcor" p.1.info.json Oblivion Mod "Falcor" p.1.jpg Oblivion Mod "Falcor" p.1.mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/youtube/test_video_cli.txt b/tests/resources/transaction_log_summaries/youtube/test_video_cli.txt index 48cb51eb..97392956 100644 --- a/tests/resources/transaction_log_summaries/youtube/test_video_cli.txt +++ b/tests/resources/transaction_log_summaries/youtube/test_video_cli.txt @@ -1,6 +1,7 @@ Files created: ---------------------------------------- {output_directory}/JMC + Oblivion Mod "Falcor" p.1.info.json Oblivion Mod "Falcor" p.1.jpg Oblivion Mod "Falcor" p.1.mp4 Video Tags: diff --git a/tests/resources/transaction_log_summaries/youtube/test_video_missing_thumb.txt b/tests/resources/transaction_log_summaries/youtube/test_video_missing_thumb.txt index 2c196a39..ccd7b91c 100644 --- a/tests/resources/transaction_log_summaries/youtube/test_video_missing_thumb.txt +++ b/tests/resources/transaction_log_summaries/youtube/test_video_missing_thumb.txt @@ -1,6 +1,7 @@ Files created: ---------------------------------------- {output_directory}/JMC + Oblivion Mod "Falcor" p.1.info.json Oblivion Mod "Falcor" p.1.mp4 Video Tags: album: Music Videos diff --git a/tests/unit/config/test_config_file.py b/tests/unit/config/test_config_file.py index d76454f2..3bd98d6e 100644 --- a/tests/unit/config/test_config_file.py +++ b/tests/unit/config/test_config_file.py @@ -1,4 +1,6 @@ +import os.path import re +from pathlib import Path from typing import Dict from typing import Optional @@ -94,6 +96,18 @@ class TestConfigFilePartiallyValidatesPresets: }, ) + def test_config_file_working_dir_home_dir(self): + out = ConfigFile( + name="test_tilda", + value={ + "configuration": {"working_directory": "~/working/dir"}, + }, + ) + + assert out.config_options.working_directory == str( + Path(os.path.expanduser("~")) / "working" / "dir" + ) + @pytest.mark.parametrize( "preset_dict", [ diff --git a/tests/unit/config/test_preset.py b/tests/unit/config/test_preset.py index de651ada..cb3c0b81 100644 --- a/tests/unit/config/test_preset.py +++ b/tests/unit/config/test_preset.py @@ -1,4 +1,6 @@ +import os.path import re +from pathlib import Path import pytest @@ -37,6 +39,20 @@ class TestPreset: }, ) + def test_preset_with_output_directory_tilda(self, config_file, output_options, youtube_video): + out = Preset( + config=config_file, + name="test", + value={ + "download": youtube_video, + "output_options": {"output_directory": "~/output/dir", "file_name": "{dne_var}"}, + "overrides": {"dne_var": "not dne"}, + }, + ) + assert out.overrides.apply_formatter(out.output_options.output_directory) == str( + Path(os.path.expanduser("~")) / "output" / "dir" + ) + def test_preset_parent(self, config_file, output_options, youtube_video): preset = Preset( config=config_file,