diff --git a/src/ytdl_sub/downloaders/youtube/channel.py b/src/ytdl_sub/downloaders/youtube/channel.py index e84056dd..f3f93e9e 100644 --- a/src/ytdl_sub/downloaders/youtube/channel.py +++ b/src/ytdl_sub/downloaders/youtube/channel.py @@ -160,16 +160,19 @@ class YoutubeChannelDownloader(YoutubeDownloader[YoutubeChannelDownloaderOptions video = YoutubeVideo(entry_dict=entry_dict, working_directory=self.working_directory) download_logger.info("Downloading %d/%d %s", idx, len(entry_dicts), video.title) - # Only do the individual download if it is not dry-run - if not self.is_dry_run: - _ = self.extract_info_with_retry( - is_downloaded_fn=video.is_downloaded, - ytdl_options_overrides={ - "playlist_items": str(video.kwargs("playlist_index")), - "writeinfojson": False, - }, - url=self.download_options.channel_url, - ) + # Re-download the contents even if it's a dry-run as a single video. At this time, + # channels do not download subtitles or subtitle metadata + as_single_video_dict = self.extract_info_with_retry( + is_downloaded_fn=None if self.is_dry_run else video.is_downloaded, + ytdl_options_overrides={"writeinfojson": False, "skip_download": self.is_dry_run}, + url=video.kwargs("webpage_url"), + ) + + # Workaround for the ytdlp issue + # pylint: disable=protected-access + video._kwargs["requested_subtitles"] = as_single_video_dict.get("requested_subtitles") + # pylint: enable=protected-access + yield video def _download_thumbnail( diff --git a/tests/e2e/resources/expected_downloads_summaries/youtube/test_channel_full.json b/tests/e2e/resources/expected_downloads_summaries/youtube/test_channel_full.json index 8e2db637..b6398084 100644 --- a/tests/e2e/resources/expected_downloads_summaries/youtube/test_channel_full.json +++ b/tests/e2e/resources/expected_downloads_summaries/youtube/test_channel_full.json @@ -1,5 +1,5 @@ { - ".ytdl-sub-pz-download-archive.json": "ce0ef71efbe27d9f67d80b5fbc57fc84", + ".ytdl-sub-pz-download-archive.json": "f0f692ef29653ca8d0af556415bfb065", "Season 2010/s2010.e0813 - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e", "Season 2010/s2010.e0813 - Oblivion Mod "Falcor" p.1.mp4": "931a705864c57d21d6fedebed4af6bbc", "Season 2010/s2010.e0813 - Oblivion Mod "Falcor" p.1.nfo": "67d8d71d048039080acbba3bce4febaa", @@ -34,6 +34,7 @@ "Season 2018/s2018.e1029 - Jesse's Minecraft Server | Teaser Trailer.mp4": "82f6ee7253e1dbb83ae7215af08ffacc", "Season 2018/s2018.e1029 - Jesse's Minecraft Server | Teaser Trailer.nfo": "cc7886aae3af6b7b0facd82f95390242", "Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg": "49cc64b25314155c1b8ab0361ac0c34f", + "Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.en.srt": "3d2c4e7f65d2ca5e96da38ce7eecfc4e", "Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "e733b4cc385b953b08c8eb0f47e03c1e", "Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "2b3ccb3f1ef81ee49fe1afb88f275a09", "fanart.jpg": "c16b8b88a82cbd47d217ee80f6a8b5f3", diff --git a/tests/e2e/resources/expected_downloads_summaries/youtube/test_channel_recent.json b/tests/e2e/resources/expected_downloads_summaries/youtube/test_channel_recent.json index 7acf32f8..ebd21a90 100644 --- a/tests/e2e/resources/expected_downloads_summaries/youtube/test_channel_recent.json +++ b/tests/e2e/resources/expected_downloads_summaries/youtube/test_channel_recent.json @@ -1,9 +1,10 @@ { - ".ytdl-sub-pz-download-archive.json": "523518e883758d9d89b656f9e9966efa", + ".ytdl-sub-pz-download-archive.json": "756b60d7a6c47d8163e3283404493a8d", "Season 2018/s2018.e1029 - Jesse's Minecraft Server | Teaser Trailer-thumb.jpg": "6f8f5e1e031ec2a04b0a4906c04a19ee", "Season 2018/s2018.e1029 - Jesse's Minecraft Server | Teaser Trailer.mp4": "82f6ee7253e1dbb83ae7215af08ffacc", "Season 2018/s2018.e1029 - Jesse's Minecraft Server | Teaser Trailer.nfo": "cc7886aae3af6b7b0facd82f95390242", "Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg": "49cc64b25314155c1b8ab0361ac0c34f", + "Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.en.srt": "3d2c4e7f65d2ca5e96da38ce7eecfc4e", "Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "e733b4cc385b953b08c8eb0f47e03c1e", "Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "2b3ccb3f1ef81ee49fe1afb88f275a09", "fanart.jpg": "c16b8b88a82cbd47d217ee80f6a8b5f3", diff --git a/tests/e2e/resources/expected_downloads_summaries/youtube/test_channel_rolling_recent.json b/tests/e2e/resources/expected_downloads_summaries/youtube/test_channel_rolling_recent.json index faf8fab2..02c7be2d 100644 --- a/tests/e2e/resources/expected_downloads_summaries/youtube/test_channel_rolling_recent.json +++ b/tests/e2e/resources/expected_downloads_summaries/youtube/test_channel_rolling_recent.json @@ -1,6 +1,7 @@ { - ".ytdl-sub-pz-download-archive.json": "9639fffe58c44d084124c8398b46ef32", + ".ytdl-sub-pz-download-archive.json": "68e164a35d1541ce761a6d7fef19ee08", "Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg": "49cc64b25314155c1b8ab0361ac0c34f", + "Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.en.srt": "3d2c4e7f65d2ca5e96da38ce7eecfc4e", "Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "e733b4cc385b953b08c8eb0f47e03c1e", "Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "2b3ccb3f1ef81ee49fe1afb88f275a09", "fanart.jpg": "c16b8b88a82cbd47d217ee80f6a8b5f3", diff --git a/tests/e2e/resources/transaction_log_summaries/youtube/test_channel_full.txt b/tests/e2e/resources/transaction_log_summaries/youtube/test_channel_full.txt index ea6008fd..4888db8a 100644 --- a/tests/e2e/resources/transaction_log_summaries/youtube/test_channel_full.txt +++ b/tests/e2e/resources/transaction_log_summaries/youtube/test_channel_full.txt @@ -243,6 +243,7 @@ Season 2018/s2018.e1029 - Jesse's Minecraft Server | Teaser Trailer.nfo title: Jesse's Minecraft Server | Teaser Trailer year: 2018 Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg +Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.en.srt Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.mp4 Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.nfo NFO tags: diff --git a/tests/e2e/resources/transaction_log_summaries/youtube/test_channel_recent.txt b/tests/e2e/resources/transaction_log_summaries/youtube/test_channel_recent.txt index dd1f46e3..e1cc52b0 100644 --- a/tests/e2e/resources/transaction_log_summaries/youtube/test_channel_recent.txt +++ b/tests/e2e/resources/transaction_log_summaries/youtube/test_channel_recent.txt @@ -22,6 +22,7 @@ Season 2018/s2018.e1029 - Jesse's Minecraft Server | Teaser Trailer.nfo title: Jesse's Minecraft Server | Teaser Trailer year: 2018 Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg +Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.en.srt Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.mp4 Season 2018/s2018.e1102 - Jesse's Minecraft Server | IP mc.jesse.id.nfo NFO tags: diff --git a/tests/e2e/youtube/test_channel.py b/tests/e2e/youtube/test_channel.py index f9addb76..c7ff1219 100644 --- a/tests/e2e/youtube/test_channel.py +++ b/tests/e2e/youtube/test_channel.py @@ -29,6 +29,10 @@ def channel_preset_dict(output_directory): "max_views": 100000, # do not download the popular PJ concert "break_on_reject": False, # do not break from max views }, + "subtitles": { + "subtitles_name": "{episode_name}.{lang}.{subtitles_ext}", + "allow_auto_generated_subtitles": True, + }, "overrides": {"tv_show_name": "Project / Zombie"}, }