From 1588725bb1e9f654a7eb90b1e5586288f8397f78 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Wed, 19 Apr 2023 18:32:13 -0700 Subject: [PATCH 01/42] [BUGFIX] Fix Windows split by chapters not reading chapter titles correctly (#591) --- src/ytdl_sub/plugins/chapters.py | 21 ++++++---- src/ytdl_sub/plugins/split_by_chapters.py | 9 +--- src/ytdl_sub/utils/chapters.py | 50 +++-------------------- 3 files changed, 19 insertions(+), 61 deletions(-) diff --git a/src/ytdl_sub/plugins/chapters.py b/src/ytdl_sub/plugins/chapters.py index 084bc7d5..2385b8a9 100644 --- a/src/ytdl_sub/plugins/chapters.py +++ b/src/ytdl_sub/plugins/chapters.py @@ -302,21 +302,24 @@ class ChaptersPlugin(Plugin[ChaptersOptions]): """ chapters = Chapters.from_empty() + # If there are no embedded chapters, and comment chapters are allowed... if not _contains_any_chapters(entry) and self.plugin_options.allow_chapters_from_comments: + # Try to get chapters from comments for comment in entry.kwargs_get(COMMENTS, []): chapters = Chapters.from_string(comment.get("text", "")) - if not chapters.is_empty(): + if chapters.contains_any_chapters(): break - if not chapters.is_empty(): - entry.add_kwargs({YTDL_SUB_CUSTOM_CHAPTERS: chapters.to_file_metadata_dict()}) + # If some are actually found, add a special kwarg and embed them + if chapters.contains_any_chapters(): + entry.add_kwargs({YTDL_SUB_CUSTOM_CHAPTERS: chapters.to_file_metadata_dict()}) - if not self.is_dry_run: - set_ffmpeg_metadata_chapters( - file_path=entry.get_download_file_path(), - chapters=chapters, - file_duration_sec=entry.kwargs("duration"), - ) + if not self.is_dry_run: + set_ffmpeg_metadata_chapters( + file_path=entry.get_download_file_path(), + chapters=chapters, + file_duration_sec=entry.kwargs("duration"), + ) return entry diff --git a/src/ytdl_sub/plugins/split_by_chapters.py b/src/ytdl_sub/plugins/split_by_chapters.py index 447d6f25..201d02de 100644 --- a/src/ytdl_sub/plugins/split_by_chapters.py +++ b/src/ytdl_sub/plugins/split_by_chapters.py @@ -164,14 +164,7 @@ class SplitByChaptersPlugin(Plugin[SplitByChaptersOptions]): Tags the entry's audio file using values defined in the metadata options """ split_videos_and_metadata: List[Tuple[Entry, FileMetadata]] = [] - - if self.is_dry_run: - chapters = Chapters.from_entry_chapters(entry=entry) - else: - chapters = Chapters.from_embedded_chapters( - ffprobe_path=FFMPEG.ffprobe_path(), - file_path=entry.get_download_file_path(), - ) + chapters = Chapters.from_entry_chapters(entry=entry) # If no chapters, do not split anything if not chapters.contains_any_chapters(): diff --git a/src/ytdl_sub/utils/chapters.py b/src/ytdl_sub/utils/chapters.py index b3557774..785123ee 100644 --- a/src/ytdl_sub/utils/chapters.py +++ b/src/ytdl_sub/utils/chapters.py @@ -1,12 +1,12 @@ -import json import re -import subprocess from typing import Dict from typing import List from typing import Optional from typing import Tuple from ytdl_sub.entries.entry import Entry +from ytdl_sub.entries.variables.kwargs import CHAPTERS +from ytdl_sub.entries.variables.kwargs import YTDL_SUB_CUSTOM_CHAPTERS from ytdl_sub.utils.file_handler import FileMetadata @@ -220,45 +220,6 @@ class Chapters: return Chapters(timestamps=timestamps, titles=titles) - @classmethod - def from_embedded_chapters(cls, ffprobe_path: str, file_path: str) -> "Chapters": - """ - Parameters - ---------- - ffprobe_path - Path to ffprobe executable - file_path - File to read ffmpeg chapter metadata from - - Returns - ------- - Chapters object - """ - proc = subprocess.run( - [ - ffprobe_path, - "-loglevel", - "quiet", - "-print_format", - "json", - "-show_chapters", - "--", - file_path, - ], - check=True, - stdout=subprocess.PIPE, - encoding="utf-8", - ) - - embedded_chapters = json.loads(proc.stdout) - timestamps: List[Timestamp] = [] - titles: List[str] = [] - for chapter in embedded_chapters["chapters"]: - timestamps.append(Timestamp.from_seconds(int(float(chapter["start_time"])))) - titles.append(chapter["tags"]["title"]) - - return Chapters(timestamps=timestamps, titles=titles) - @classmethod def from_entry_chapters(cls, entry: Entry) -> "Chapters": """ @@ -274,9 +235,10 @@ class Chapters: timestamps: List[Timestamp] = [] titles: List[str] = [] - chapters = {} - if entry.kwargs_contains("chapters"): - chapters = entry.kwargs("chapters") or [] + # Try to get actual yt-dlp chapters first, then custom chapters, then default to empty list + chapters = entry.kwargs_get( + CHAPTERS, default=entry.kwargs_get(YTDL_SUB_CUSTOM_CHAPTERS, default=[]) + ) for chapter in chapters: timestamps.append(Timestamp.from_seconds(int(float(chapter["start_time"])))) From e1242eaa61a220fd53d6d1fd439d825ed7245318 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Wed, 19 Apr 2023 18:44:25 -0700 Subject: [PATCH 02/42] [BUGFIX] Fix parsing chapters from comments (#592) --- src/ytdl_sub/utils/chapters.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/ytdl_sub/utils/chapters.py b/src/ytdl_sub/utils/chapters.py index 785123ee..7bdbf736 100644 --- a/src/ytdl_sub/utils/chapters.py +++ b/src/ytdl_sub/utils/chapters.py @@ -202,6 +202,7 @@ class Chapters: timestamps: List[Timestamp] = [] titles: List[str] = [] + # Try to accumulate chapters by parsing lines individually for line in input_str.split("\n"): # Timestamp captured, store it if match := Timestamp.TIMESTAMP_REGEX.search(line): @@ -211,14 +212,12 @@ class Chapters: # Remove timestamp and surrounding whitespace from it title_str = re.sub(f"\\s*{re.escape(timestamp_str)}\\s*", " ", line).strip() titles.append(title_str) - elif len(timestamps) >= 3: - return Chapters(timestamps=timestamps, titles=titles) - # Timestamp was not stored, if only contained 1, reset - else: - timestamps = [] - titles = [] - return Chapters(timestamps=timestamps, titles=titles) + # If more than 3 timestamps were parsed, return it + if len(timestamps) >= 3: + return Chapters(timestamps=timestamps, titles=titles) + # Otherwise return empty chapters + return Chapters(timestamps=[], titles=[]) @classmethod def from_entry_chapters(cls, entry: Entry) -> "Chapters": From d5d9978cdb7316c1b8d6f57cbf37db0118c91479 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Wed, 19 Apr 2023 19:27:27 -0700 Subject: [PATCH 03/42] [BUGFIX] Fix splitting chapters extracted from comments (#593) --- src/ytdl_sub/utils/chapters.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/ytdl_sub/utils/chapters.py b/src/ytdl_sub/utils/chapters.py index 7bdbf736..0875e3bc 100644 --- a/src/ytdl_sub/utils/chapters.py +++ b/src/ytdl_sub/utils/chapters.py @@ -234,14 +234,14 @@ class Chapters: timestamps: List[Timestamp] = [] titles: List[str] = [] - # Try to get actual yt-dlp chapters first, then custom chapters, then default to empty list - chapters = entry.kwargs_get( - CHAPTERS, default=entry.kwargs_get(YTDL_SUB_CUSTOM_CHAPTERS, default=[]) - ) - - for chapter in chapters: - timestamps.append(Timestamp.from_seconds(int(float(chapter["start_time"])))) - titles.append(chapter["title"]) + if entry.kwargs_contains(CHAPTERS): + for chapter in entry.kwargs_get(CHAPTERS, []): + timestamps.append(Timestamp.from_seconds(int(float(chapter["start_time"])))) + titles.append(chapter["title"]) + elif entry.kwargs_contains(YTDL_SUB_CUSTOM_CHAPTERS): + for start_time, title in entry.kwargs_get(YTDL_SUB_CUSTOM_CHAPTERS, {}).items(): + timestamps.append(Timestamp.from_str(start_time)) + titles.append(title) return Chapters(timestamps=timestamps, titles=titles) From a2f1a2ba949263f43d455bbfcb89f3dc140b87f3 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Fri, 28 Apr 2023 22:36:20 -0400 Subject: [PATCH 04/42] [FEATURE] Add `subscription_name` override variable by default (#599) * [FEATURE] Add `subscription_name` override variable by default * docs for it * lint * only test non-cli video test --- docs/config.rst | 6 +++ src/ytdl_sub/config/preset_options.py | 48 ++++++++++++++----- src/ytdl_sub/validators/validators.py | 10 ++++ tests/e2e/youtube/test_video.py | 8 +++- .../youtube/test_video.json | 2 +- .../youtube/test_video_cli.json | 2 +- .../youtube/test_video_nulled_values.txt | 4 ++ 7 files changed, 66 insertions(+), 14 deletions(-) diff --git a/docs/config.rst b/docs/config.rst index 94ea50d5..0725a0ef 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -318,6 +318,12 @@ Source Variables :inherited-members: :undoc-members: +Override Variables +------------------ + +.. autoclass:: ytdl_sub.config.preset_options.OverridesVariables() + :members: + ------------------------------------------------------------------------------- Config Types diff --git a/src/ytdl_sub/config/preset_options.py b/src/ytdl_sub/config/preset_options.py index 21839ee3..ca5b8278 100644 --- a/src/ytdl_sub/config/preset_options.py +++ b/src/ytdl_sub/config/preset_options.py @@ -110,9 +110,45 @@ class YTDLOptions(LiteralDictValidator): """ +class OverridesVariables(DictFormatterValidator): + """ + Override variables that are automatically added to every subscription. + """ + + def _add_override_variable(self, key_name: str, format_string: str, sanitize: bool = False): + if sanitize: + key_name = f"{key_name}_sanitized" + format_string = sanitize_filename(format_string) + + self._value[key_name] = StringFormatterValidator( + name="__should_never_fail__", + value=format_string, + ) + + def __init__(self, name, value): + super().__init__(name, value) + + # Add sanitized and non-sanitized override variables + for sanitize in [True, False]: + self._add_override_variable( + key_name="subscription_name", + format_string=self.subscription_name, + sanitize=sanitize, + ) + + @property + def subscription_name(self) -> str: + """ + Returns + ------- + Name of the subscription + """ + return self._root_name + + # Disable for proper docstring formatting # pylint: disable=line-too-long -class Overrides(DictFormatterValidator): +class Overrides(OverridesVariables): """ Optional. This section allows you to define variables that can be used in any string formatter. For example, if you want your file and thumbnail files to match without copy-pasting a large @@ -142,16 +178,6 @@ class Overrides(DictFormatterValidator): # pylint: enable=line-too-long - def _add_override_variable(self, key_name: str, format_string: str, sanitize: bool = False): - if sanitize: - key_name = f"{key_name}_sanitized" - format_string = sanitize_filename(format_string) - - self._value[key_name] = StringFormatterValidator( - name="__should_never_fail__", - value=format_string, - ) - def __init__(self, name, value): super().__init__(name, value) diff --git a/src/ytdl_sub/validators/validators.py b/src/ytdl_sub/validators/validators.py index 784442e2..97e59411 100644 --- a/src/ytdl_sub/validators/validators.py +++ b/src/ytdl_sub/validators/validators.py @@ -179,6 +179,16 @@ class DictValidator(Validator): super().__init__(name, value) self.__validator_dict: Dict[str, Validator] = {} + @final + @property + def _root_name(self) -> str: + """ + Returns + ------- + "first" from the first.element.of.the.name + """ + return self._name.split(".")[0] + @final @property def _dict(self) -> dict: diff --git a/tests/e2e/youtube/test_video.py b/tests/e2e/youtube/test_video.py index 89229cae..e7a1f2f6 100644 --- a/tests/e2e/youtube/test_video.py +++ b/tests/e2e/youtube/test_video.py @@ -3,7 +3,6 @@ from conftest import preset_dict_to_dl_args from e2e.conftest import mock_run_from_cli from expected_download import assert_expected_downloads from expected_transaction_log import assert_transaction_log_matches -from mergedeep import mergedeep from ytdl_sub.subscriptions.subscription import Subscription @@ -49,6 +48,13 @@ def single_tv_show_video_nulled_values_preset_dict(output_directory): "format": "worst[ext=mp4]", "max_downloads": 2, }, + # test override variables added by ytdl-sub + "nfo_tags": { + "tags": { + "subscription_name": "{subscription_name}", + "subscription_name_sanitized": "{subscription_name_sanitized}", + } + }, "overrides": { "url": "https://www.youtube.com/@ProjectZombie603", "tv_show_name": "Project Zombie", diff --git a/tests/resources/expected_downloads_summaries/youtube/test_video.json b/tests/resources/expected_downloads_summaries/youtube/test_video.json index 5b78ad10..c94d3dd6 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_video.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_video.json @@ -1,6 +1,6 @@ { "JMC/JMC - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e", - "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "e4eb0e33920f9b4dce1fcba0561614c9", + "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "59ac500bb4778b37bd8c8fb472269e95", "JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2", "JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e" } \ No newline at end of file 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 3d6d7439..83521f0e 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_video_cli.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_video_cli.json @@ -1,6 +1,6 @@ { "JMC/JMC - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e", - "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "62101bc3899f69860004ddcfc061a28b", + "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "2ad1e593fc1c50a53a107db062e82c4a", "JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2", "JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e" } \ No newline at end of file diff --git a/tests/resources/transaction_log_summaries/youtube/test_video_nulled_values.txt b/tests/resources/transaction_log_summaries/youtube/test_video_nulled_values.txt index ff98d350..8b995cda 100644 --- a/tests/resources/transaction_log_summaries/youtube/test_video_nulled_values.txt +++ b/tests/resources/transaction_log_summaries/youtube/test_video_nulled_values.txt @@ -43,6 +43,8 @@ Files created: This is the first time I've really used the editor, and the beginning of our first mod. Hope you enjoy. season: 2010 + subscription_name: tv_video_nulled_values + subscription_name_sanitized: tv_video_nulled_values title: 2010-08-13 - Oblivion Mod "Falcor" p.1 year: 2010 s2010.e000002 - Oblivion Mod "Falcor" p.2.mp4 @@ -78,5 +80,7 @@ Files created: Please keep in mind that the mod is not complete, so you'll see some blank areas during the video. I haven't made LOD (Level of Distance) yet either, so areas far away will not appear. season: 2010 + subscription_name: tv_video_nulled_values + subscription_name_sanitized: tv_video_nulled_values title: 2010-12-02 - Oblivion Mod "Falcor" p.2 year: 2010 \ No newline at end of file From 38e64a5bd5e3a8a88df1d38ea5ff4e283a5c573a Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Wed, 17 May 2023 22:33:42 -0700 Subject: [PATCH 05/42] [FEATURE] Perform regex at both metadata and post-download (#611) * [FEATURE] Perform regex at both metadata and post-download * sadf --- src/ytdl_sub/entries/variables/kwargs.py | 1 + src/ytdl_sub/plugins/regex.py | 41 +++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/ytdl_sub/entries/variables/kwargs.py b/src/ytdl_sub/entries/variables/kwargs.py index 5071cd54..9e46062d 100644 --- a/src/ytdl_sub/entries/variables/kwargs.py +++ b/src/ytdl_sub/entries/variables/kwargs.py @@ -46,6 +46,7 @@ UPLOAD_DATE_INDEX = _("upload_date_index", backend=True) REQUESTED_SUBTITLES = _("requested_subtitles", backend=True) CHAPTERS = _("chapters", backend=True) YTDL_SUB_CUSTOM_CHAPTERS = _("ytdl_sub_custom_chapters", backend=True) +YTDL_SUB_REGEX_SOURCE_VARS = _("ytdl_sub_regex_source_vars", backend=True) SPONSORBLOCK_CHAPTERS = _("sponsorblock_chapters", backend=True) SPLIT_BY_CHAPTERS_PARENT_ENTRY = _("split_by_chapters_parent_entry", backend=True) COMMENTS = _("comments", backend=True) diff --git a/src/ytdl_sub/plugins/regex.py b/src/ytdl_sub/plugins/regex.py index 51269083..015580dd 100644 --- a/src/ytdl_sub/plugins/regex.py +++ b/src/ytdl_sub/plugins/regex.py @@ -6,6 +6,7 @@ from typing import Optional from yt_dlp.utils import sanitize_filename from ytdl_sub.entries.entry import Entry +from ytdl_sub.entries.variables.kwargs import YTDL_SUB_REGEX_SOURCE_VARS from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.plugins.plugin import PluginPriority @@ -245,12 +246,25 @@ class RegexPlugin(Plugin[RegexOptions]): modify_entry=PluginPriority.MODIFY_ENTRY_AFTER_SPLIT + 0, ) - def modify_entry(self, entry: Entry) -> Optional[Entry]: + @classmethod + def _add_processed_regex_source_var(cls, entry: Entry, source_var: str) -> None: + if not entry.kwargs_contains(YTDL_SUB_REGEX_SOURCE_VARS): + entry.add_kwargs({YTDL_SUB_REGEX_SOURCE_VARS: []}) + + entry.kwargs(YTDL_SUB_REGEX_SOURCE_VARS).append(source_var) + + @classmethod + def _contains_processed_regex_source_var(cls, entry: Entry, source_var: str) -> bool: + return source_var in entry.kwargs_get(YTDL_SUB_REGEX_SOURCE_VARS, []) + + def _modify_entry_metadata(self, entry: Entry, is_metadata_stage: bool) -> Optional[Entry]: """ Parameters ---------- entry Entry to add source variables to + is_metadata_stage + Whether this is called at the metadata stage or modify stage Returns ------- @@ -265,6 +279,19 @@ class RegexPlugin(Plugin[RegexOptions]): # Iterate each source var to capture and add to the entry for source_var, regex_options in self.plugin_options.source_variable_capture_dict.items(): + + # Record which regex source variables are processed, to + # process as many variables as possible in the metadata stage, then the rest + # after the media file has been downloaded. + if self._contains_processed_regex_source_var(entry, source_var): + continue + + # Continue if the source var isn't in the dict since entry variables could be added + # after the metadata stage + if is_metadata_stage and source_var not in entry_variable_dict: + continue + + self._add_processed_regex_source_var(entry, source_var) maybe_capture = regex_options.match.match_any(input_str=entry_variable_dict[source_var]) # If no capture @@ -331,3 +358,15 @@ class RegexPlugin(Plugin[RegexOptions]): ) return entry + + def modify_entry_metadata(self, entry: Entry) -> Optional[Entry]: + """ + Perform regex at the metadata stage + """ + return self._modify_entry_metadata(entry, is_metadata_stage=True) + + def modify_entry(self, entry: Entry) -> Optional[Entry]: + """ + Perform regex at the metadata stage + """ + return self._modify_entry_metadata(entry, is_metadata_stage=False) From 0497f2b749c85e0a2fa449e06d9b44b1ba209f05 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Thu, 18 May 2023 09:52:24 -0700 Subject: [PATCH 06/42] [FEATURE] Perform match-filter on download, not metadata pull (#612) * [FEATURE] Apply match-filter on download instead of metadata * correct ytdl_option ordering * lint * test that downloads --- src/ytdl_sub/downloaders/url/downloader.py | 20 +++++++- src/ytdl_sub/entries/variables/kwargs.py | 1 + src/ytdl_sub/plugins/match_filters.py | 19 +++++++- src/ytdl_sub/plugins/plugin.py | 4 +- .../subscription_ytdl_options.py | 8 +++- tests/e2e/plugins/test_match_filters.py | 46 ++++++++++++++++++- .../test_match_filters_partial.json | 7 +++ .../test_match_filters_partial.txt | 15 ++++++ 8 files changed, 114 insertions(+), 6 deletions(-) create mode 100644 tests/resources/expected_downloads_summaries/plugins/match_filters/test_match_filters_partial.json create mode 100644 tests/resources/transaction_log_summaries/plugins/match_filters/test_match_filters_partial.txt diff --git a/src/ytdl_sub/downloaders/url/downloader.py b/src/ytdl_sub/downloaders/url/downloader.py index 1f9aeef3..fae279e6 100644 --- a/src/ytdl_sub/downloaders/url/downloader.py +++ b/src/ytdl_sub/downloaders/url/downloader.py @@ -11,6 +11,8 @@ from typing import Optional from typing import Set from typing import Tuple +from yt_dlp.utils import RejectedVideoReached + from ytdl_sub.config.preset_options import Overrides from ytdl_sub.downloaders.base_downloader import BaseDownloader from ytdl_sub.downloaders.base_downloader import BaseDownloaderOptionsT @@ -31,6 +33,7 @@ from ytdl_sub.entries.variables.kwargs import REQUESTED_SUBTITLES from ytdl_sub.entries.variables.kwargs import SOURCE_ENTRY from ytdl_sub.entries.variables.kwargs import SPONSORBLOCK_CHAPTERS from ytdl_sub.entries.variables.kwargs import UPLOAD_DATE_INDEX +from ytdl_sub.entries.variables.kwargs import YTDL_SUB_MATCH_FILTER_REJECT from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.logger import Logger @@ -523,6 +526,11 @@ class BaseUrlDownloader(BaseDownloader[BaseDownloaderOptionsT], ABC): Returns ------- The entry that was downloaded successfully + + Raises + ------ + RejectedVideoReached + If a video was rejected and was not from match_filter """ download_logger.info( "Downloading entry %d/%d: %s", @@ -530,7 +538,17 @@ class BaseUrlDownloader(BaseDownloader[BaseDownloaderOptionsT], ABC): self._url_state.entries_total, entry.title, ) - download_entry = self._extract_entry_info_with_retry(entry=entry) + + # Match-filters are applied at the download stage (not metadata stage). + # If the download is rejected, and match_filter is present in the ytdl options, + # then filter downstream in the match_filter plugin + try: + download_entry = self._extract_entry_info_with_retry(entry=entry) + except RejectedVideoReached: + if "match_filter" in self.download_ytdl_options: + entry.add_kwargs({YTDL_SUB_MATCH_FILTER_REJECT: True}) + return entry + raise upload_date_idx = self._enhanced_download_archive.mapping.get_num_entries_with_upload_date( upload_date_standardized=entry.upload_date_standardized diff --git a/src/ytdl_sub/entries/variables/kwargs.py b/src/ytdl_sub/entries/variables/kwargs.py index 9e46062d..2adc3535 100644 --- a/src/ytdl_sub/entries/variables/kwargs.py +++ b/src/ytdl_sub/entries/variables/kwargs.py @@ -47,6 +47,7 @@ REQUESTED_SUBTITLES = _("requested_subtitles", backend=True) CHAPTERS = _("chapters", backend=True) YTDL_SUB_CUSTOM_CHAPTERS = _("ytdl_sub_custom_chapters", backend=True) YTDL_SUB_REGEX_SOURCE_VARS = _("ytdl_sub_regex_source_vars", backend=True) +YTDL_SUB_MATCH_FILTER_REJECT = _("ytdl_sub_match_filter_reject", backend=True) SPONSORBLOCK_CHAPTERS = _("sponsorblock_chapters", backend=True) SPLIT_BY_CHAPTERS_PARENT_ENTRY = _("split_by_chapters_parent_entry", backend=True) COMMENTS = _("comments", backend=True) diff --git a/src/ytdl_sub/plugins/match_filters.py b/src/ytdl_sub/plugins/match_filters.py index 2ad8aa1a..27e9dce6 100644 --- a/src/ytdl_sub/plugins/match_filters.py +++ b/src/ytdl_sub/plugins/match_filters.py @@ -5,8 +5,11 @@ from typing import Optional from yt_dlp import match_filter_func +from ytdl_sub.entries.entry import Entry +from ytdl_sub.entries.variables.kwargs import YTDL_SUB_MATCH_FILTER_REJECT from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.plugins.plugin import PluginOptions +from ytdl_sub.plugins.plugin import PluginPriority from ytdl_sub.utils.logger import Logger from ytdl_sub.validators.validators import StringListValidator @@ -63,6 +66,7 @@ class MatchFiltersOptions(PluginOptions): class MatchFiltersPlugin(Plugin[MatchFiltersOptions]): plugin_options_type = MatchFiltersOptions + priority = PluginPriority(modify_entry=PluginPriority.MODIFY_ENTRY_FIRST) def ytdl_options(self) -> Optional[Dict]: """ @@ -75,4 +79,17 @@ class MatchFiltersPlugin(Plugin[MatchFiltersOptions]): logger.debug("Adding match-filter %s", filter_str) match_filters.append(filter_str) - return {"match_filter": match_filter_func(match_filters)} + return { + "match_filter": match_filter_func(match_filters), + } + + def modify_entry(self, entry: Entry) -> Optional[Entry]: + """ + If an entry is marked as not being downloaded due to a match_filter reject, + do not propagate the entry further (especially since there is no entry file!) + """ + if entry.kwargs_get(YTDL_SUB_MATCH_FILTER_REJECT, False): + logger.info("Entry rejected by match-filter, skipping ..") + return None + + return entry diff --git a/src/ytdl_sub/plugins/plugin.py b/src/ytdl_sub/plugins/plugin.py index ccf21acb..35488dfd 100644 --- a/src/ytdl_sub/plugins/plugin.py +++ b/src/ytdl_sub/plugins/plugin.py @@ -24,7 +24,9 @@ class PluginPriority: # If modify_entry priority is >= to this value, run after split MODIFY_ENTRY_AFTER_SPLIT = 10 - def __init__(self, modify_entry: int = 0, post_process: int = 0): + MODIFY_ENTRY_FIRST = 0 + + def __init__(self, modify_entry: int = 5, post_process: int = 5): self.modify_entry = modify_entry self.post_process = post_process diff --git a/src/ytdl_sub/subscriptions/subscription_ytdl_options.py b/src/ytdl_sub/subscriptions/subscription_ytdl_options.py index 961c6544..70daaecc 100644 --- a/src/ytdl_sub/subscriptions/subscription_ytdl_options.py +++ b/src/ytdl_sub/subscriptions/subscription_ytdl_options.py @@ -78,6 +78,10 @@ class SubscriptionYTDLOptions: "writeinfojson": True, } + @property + def _download_only_options(self) -> Dict: + return {"break_on_reject": True} + @property def _output_options(self) -> Dict: ytdl_options = {} @@ -110,7 +114,6 @@ class SubscriptionYTDLOptions: self._global_options, self._output_options, self._plugin_ytdl_options(DateRangePlugin), - self._plugin_ytdl_options(MatchFiltersPlugin), self._user_ytdl_options, # user ytdl options... self._info_json_only_options, # then info_json_only options ) @@ -125,12 +128,13 @@ class SubscriptionYTDLOptions: ytdl_options_builder = YTDLOptionsBuilder().add( self._global_options, self._output_options, - self._plugin_ytdl_options(DateRangePlugin), + self._plugin_ytdl_options(MatchFiltersPlugin), self._plugin_ytdl_options(FileConvertPlugin), self._plugin_ytdl_options(SubtitlesPlugin), self._plugin_ytdl_options(ChaptersPlugin), self._plugin_ytdl_options(AudioExtractPlugin), self._user_ytdl_options, # user ytdl options... + self._download_only_options, # then download_only options ) # Add dry run options last if enabled if self._dry_run: diff --git a/tests/e2e/plugins/test_match_filters.py b/tests/e2e/plugins/test_match_filters.py index 3f9cf029..8bcfb669 100644 --- a/tests/e2e/plugins/test_match_filters.py +++ b/tests/e2e/plugins/test_match_filters.py @@ -1,4 +1,6 @@ import pytest +from expected_download import assert_expected_downloads +from expected_transaction_log import assert_transaction_log_matches from ytdl_sub.subscriptions.subscription import Subscription @@ -17,9 +19,23 @@ def preset_dict(output_directory): } +@pytest.fixture +def playlist_preset_dict(output_directory): + return { + "preset": "music_video", + "download": {"url": "https://www.youtube.com/playlist?list=PL5BC0FC26BECA5A35"}, + "output_options": {"output_directory": output_directory}, + # download the worst format so it is fast + "ytdl_options": { + "postprocessor_args": {"ffmpeg": ["-bitexact"]}, # Must add this for reproducibility + }, + "match_filters": {"filters": ["view_count > 20000"]}, + } + + class TestFileConvert: @pytest.mark.parametrize("dry_run", [True, False]) - def test_match_filters( + def test_match_filters_empty( self, music_video_config, preset_dict, @@ -34,3 +50,31 @@ class TestFileConvert: transaction_log = subscription.download(dry_run=dry_run) assert transaction_log.is_empty + + @pytest.mark.parametrize("dry_run", [True, False]) + def test_match_filters_partial( + self, + music_video_config, + playlist_preset_dict, + output_directory, + dry_run, + ): + subscription = Subscription.from_dict( + config=music_video_config, + preset_name="match_filter_test", + preset_dict=playlist_preset_dict, + ) + + transaction_log = subscription.download(dry_run=dry_run) + + summary_path = "plugins/match_filters" + assert_transaction_log_matches( + output_directory=output_directory, + transaction_log=transaction_log, + transaction_log_summary_file_name=f"{summary_path}/test_match_filters_partial.txt", + ) + assert_expected_downloads( + output_directory=output_directory, + dry_run=dry_run, + expected_download_summary_file_name=f"{summary_path}/test_match_filters_partial.json", + ) 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 new file mode 100644 index 00000000..fe968a5e --- /dev/null +++ b/tests/resources/expected_downloads_summaries/plugins/match_filters/test_match_filters_partial.json @@ -0,0 +1,7 @@ +{ + ".ytdl-sub-match_filter_test-download-archive.json": "6017105735dd8fdfe18932c9c048dccf", + "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21]-thumb.jpg": "e7830aa8a64b0cde65ba3f7e5fc56530", + "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "ddfda0c60aafd9779da692d6c165385b", + "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].nfo": "17c303f07e9b3af77c90975f843c95bd", + "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].webm": "ad90ebef1ea6cbdb924670cdd7d1b9b9" +} \ No newline at end of file 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 new file mode 100644 index 00000000..4b827ab2 --- /dev/null +++ b/tests/resources/transaction_log_summaries/plugins/match_filters/test_match_filters_partial.txt @@ -0,0 +1,15 @@ +Files created: +---------------------------------------- +{output_directory} + .ytdl-sub-match_filter_test-download-archive.json +{output_directory}/Project Zombie + Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21]-thumb.jpg + Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].info.json + Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].nfo + NFO tags: + musicvideo: + album: Music Videos + artist: Project Zombie + title: Jesse's Minecraft Server [Trailer - Mar.21] + year: 2011 + Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].webm \ No newline at end of file From 2f1756dea79e7b25397a4e9f11fb1f2b2973413a Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Fri, 19 May 2023 09:05:51 -0700 Subject: [PATCH 07/42] [FEATURE] More tv show collection seasons (#615) --- docs/presets.rst | 2 +- .../tv_show/tv_show_collection.yaml | 382 +++++++++++++++++- 2 files changed, 382 insertions(+), 2 deletions(-) diff --git a/docs/presets.rst b/docs/presets.rst index 9ef718ec..12e3b629 100644 --- a/docs/presets.rst +++ b/docs/presets.rst @@ -110,7 +110,7 @@ Season Presets * ``collection_season_3`` * ``collection_season_4`` * ``...`` -* ``collection_season_20`` +* ``collection_season_40`` Example """"""" diff --git a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml index 36306faa..a638a8be 100644 --- a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml +++ b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml @@ -403,4 +403,384 @@ presets: namedseason: - tag: "{collection_season_20_name}" attributes: - number: "20" \ No newline at end of file + number: "20" + + collection_season_21: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_21_url}" + variables: + collection_season_number: "21" + collection_season_number_padded: "21" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_21_name}" + attributes: + number: "21" + + collection_season_22: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_22_url}" + variables: + collection_season_number: "22" + collection_season_number_padded: "22" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_22_name}" + attributes: + number: "22" + + collection_season_23: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_23_url}" + variables: + collection_season_number: "23" + collection_season_number_padded: "23" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_23_name}" + attributes: + number: "23" + + collection_season_24: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_24_url}" + variables: + collection_season_number: "24" + collection_season_number_padded: "24" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_24_name}" + attributes: + number: "24" + + collection_season_25: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_25_url}" + variables: + collection_season_number: "25" + collection_season_number_padded: "25" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_25_name}" + attributes: + number: "25" + + collection_season_26: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_26_url}" + variables: + collection_season_number: "26" + collection_season_number_padded: "26" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_26_name}" + attributes: + number: "26" + + collection_season_27: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_27_url}" + variables: + collection_season_number: "27" + collection_season_number_padded: "27" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_27_name}" + attributes: + number: "27" + + collection_season_28: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_28_url}" + variables: + collection_season_number: "28" + collection_season_number_padded: "28" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_28_name}" + attributes: + number: "28" + + collection_season_29: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_29_url}" + variables: + collection_season_number: "29" + collection_season_number_padded: "29" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_29_name}" + attributes: + number: "29" + + collection_season_30: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_30_url}" + variables: + collection_season_number: "30" + collection_season_number_padded: "30" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_30_name}" + attributes: + number: "30" + + collection_season_31: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_31_url}" + variables: + collection_season_number: "31" + collection_season_number_padded: "31" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_31_name}" + attributes: + number: "31" + + collection_season_32: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_32_url}" + variables: + collection_season_number: "32" + collection_season_number_padded: "32" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_32_name}" + attributes: + number: "32" + + collection_season_33: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_33_url}" + variables: + collection_season_number: "33" + collection_season_number_padded: "33" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_33_name}" + attributes: + number: "33" + + collection_season_34: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_34_url}" + variables: + collection_season_number: "34" + collection_season_number_padded: "34" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_34_name}" + attributes: + number: "34" + + collection_season_35: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_35_url}" + variables: + collection_season_number: "35" + collection_season_number_padded: "35" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_35_name}" + attributes: + number: "35" + + collection_season_36: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_36_url}" + variables: + collection_season_number: "36" + collection_season_number_padded: "36" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_36_name}" + attributes: + number: "36" + + collection_season_37: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_37_url}" + variables: + collection_season_number: "37" + collection_season_number_padded: "37" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_37_name}" + attributes: + number: "37" + + collection_season_38: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_38_url}" + variables: + collection_season_number: "38" + collection_season_number_padded: "38" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_38_name}" + attributes: + number: "38" + + collection_season_39: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_39_url}" + variables: + collection_season_number: "39" + collection_season_number_padded: "39" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_39_name}" + attributes: + number: "39" + + collection_season_40: + download: + download_strategy: "multi_url" + urls: + - url: "{collection_season_40_url}" + variables: + collection_season_number: "40" + collection_season_number_padded: "40" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" + + output_directory_nfo_tags: + tags: + namedseason: + - tag: "{collection_season_40_name}" + attributes: + number: "40" \ No newline at end of file From ec447cfbd7908d0f26337891591ad7b3a3601074 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 22 May 2023 10:23:00 -0700 Subject: [PATCH 08/42] [FEATURE] `exclude` field in regex plugin (#620) * [FEATURE] `exclude` field in regex plugin * tests * excludes doc --- docs/config.rst | 2 +- src/ytdl_sub/plugins/regex.py | 171 ++++++++------ tests/e2e/plugins/test_regex.py | 208 +++++++++++++++--- .../plugins/test_regex_exclude.txt | 15 ++ .../plugins/test_regex_match_and_exclude.txt | 22 ++ 5 files changed, 312 insertions(+), 106 deletions(-) create mode 100644 tests/resources/transaction_log_summaries/plugins/test_regex_exclude.txt create mode 100644 tests/resources/transaction_log_summaries/plugins/test_regex_match_and_exclude.txt diff --git a/docs/config.rst b/docs/config.rst index 0725a0ef..56438f4d 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -214,7 +214,7 @@ regex :members: skip_if_match_fails .. autoclass:: ytdl_sub.plugins.regex.SourceVariableRegex() - :members: match, capture_group_names, capture_group_defaults + :members: match, capture_group_names, capture_group_defaults, exclude :member-order: bysource :exclude-members: partial_validate diff --git a/src/ytdl_sub/plugins/regex.py b/src/ytdl_sub/plugins/regex.py index 015580dd..1e7a5b03 100644 --- a/src/ytdl_sub/plugins/regex.py +++ b/src/ytdl_sub/plugins/regex.py @@ -24,12 +24,12 @@ logger = Logger.get(name="regex") class SourceVariableRegex(StrictDictValidator): - _required_keys = {"match"} - _optional_keys = {"capture_group_defaults", "capture_group_names"} + _optional_keys = {"match", "exclude", "capture_group_defaults", "capture_group_names"} def __init__(self, name, value): super().__init__(name, value) - self._match = self._validate_key(key="match", validator=RegexListValidator) + self._match = self._validate_key_if_present(key="match", validator=RegexListValidator) + self._exclude = self._validate_key_if_present(key="exclude", validator=RegexListValidator) self._capture_group_defaults = self._validate_key_if_present( key="capture_group_defaults", validator=ListFormatterValidator ) @@ -37,6 +37,14 @@ class SourceVariableRegex(StrictDictValidator): key="capture_group_names", validator=SourceVariableNameListValidator, default=[] ) + if self._match is None and self._exclude is None: + raise self._validation_exception("must specify either `match` or `exclude`") + + if self._match is None and (self._capture_group_defaults or self._capture_group_names.list): + raise self._validation_exception( + "capture group parameters requires at least one `match` to be specified" + ) + # If defaults are to be used, ensure there are the same number of defaults as there are # capture groups if self._capture_group_defaults is not None and self._match.num_capture_groups != len( @@ -48,20 +56,29 @@ class SourceVariableRegex(StrictDictValidator): ) # If there are capture groups, ensure there are capture group names - if len(self._capture_group_names.list) != self._match.num_capture_groups: + if self._match and (len(self._capture_group_names.list) != self._match.num_capture_groups): raise self._validation_exception( f"number of capture group names must match number of capture groups, " f"{len(self._capture_group_names.list)} != {self._match.num_capture_groups}" ) @property - def match(self) -> RegexListValidator: + def match(self) -> Optional[RegexListValidator]: """ - Required. List of regex strings to try to match against a source variable. Each regex + List of regex strings to try to match against a source variable. Each regex string must have the same number of capture groups. """ return self._match + @property + def exclude(self) -> Optional[RegexListValidator]: + """ + List of regex strings to try to match against a source variable. If one of the regex strings + match, then the entry will be skipped. If both ``exclude`` and ``match`` are specified, + entries will get skipped if the regex matches against both ``exclude`` and ``match``. + """ + return self._exclude + @property def capture_group_names(self) -> Optional[List[str]]: """ @@ -129,7 +146,7 @@ class RegexOptions(PluginOptions): # This will only download videos with "[Official Video]" in it. Note that we # double backslash to make YAML happy match: - - '\\[Official Video\\]' + - '\\[Official Video\\]' # For each entry's `description` value... description: @@ -137,14 +154,17 @@ class RegexOptions(PluginOptions): # This tries to scrape a date from the description and produce new # source variables match: - - "([0-9]{4})-([0-9]{2})-([0-9]{2})" + - "([0-9]{4})-([0-9]{2})-([0-9]{2})" + # Exclude any entry where the description contains #short + exclude: + - "#short" # Each capture group creates these new source variables, respectively, # as well a sanitized version, i.e. `captured_upload_year_sanitized` capture_group_names: - - "captured_upload_year" - - "captured_upload_month" - - "captured_upload_day" + - "captured_upload_year" + - "captured_upload_month" + - "captured_upload_day" # And if the string does not match, use these as respective default # values for the new source variables. @@ -257,6 +277,19 @@ class RegexPlugin(Plugin[RegexOptions]): def _contains_processed_regex_source_var(cls, entry: Entry, source_var: str) -> bool: return source_var in entry.kwargs_get(YTDL_SUB_REGEX_SOURCE_VARS, []) + def _try_skip_entry(self, entry: Entry, source_var: str) -> None: + # Skip the entry if toggled + if self.plugin_options.skip_if_match_fails: + logger.info( + "Regex failed to match '%s' from '%s', skipping.", + source_var, + entry.title, + ) + return None + + # Otherwise, error + raise RegexNoMatchException(f"Regex failed to match '{source_var}' from '{entry.title}'") + def _modify_entry_metadata(self, entry: Entry, is_metadata_stage: bool) -> Optional[Entry]: """ Parameters @@ -292,70 +325,70 @@ class RegexPlugin(Plugin[RegexOptions]): continue self._add_processed_regex_source_var(entry, source_var) - maybe_capture = regex_options.match.match_any(input_str=entry_variable_dict[source_var]) - # If no capture - if maybe_capture is None: - # and no defaults - if not regex_options.has_defaults: - # Skip the entry if toggled - if self.plugin_options.skip_if_match_fails: - logger.info( - "Regex failed to match '%s' from '%s', skipping.", - source_var, - entry.title, - ) - return None + if ( + regex_options.exclude is not None + and regex_options.exclude.match_any(input_str=entry_variable_dict[source_var]) + is not None + ): + return self._try_skip_entry(entry=entry, source_var=source_var) - # Otherwise, error - raise RegexNoMatchException( - f"Regex failed to match '{source_var}' from '{entry.title}'" + # If match is present + if regex_options.match is not None: + maybe_capture = regex_options.match.match_any( + input_str=entry_variable_dict[source_var] + ) + + # And nothing matched + if maybe_capture is None: + # and no defaults + if not regex_options.has_defaults: + return self._try_skip_entry(entry=entry, source_var=source_var) + + # otherwise, use defaults (apply them using the original entry source dict) + source_variables_and_overrides_dict = dict( + entry_variable_dict, **self.overrides.dict_with_format_strings ) - # otherwise, use defaults (apply them using the original entry source dict) - source_variables_and_overrides_dict = dict( - entry_variable_dict, **self.overrides.dict_with_format_strings - ) - - # add both the default... - entry.add_variables( - variables_to_add={ - regex_options.capture_group_names[i]: default.apply_formatter( - variable_dict=source_variables_and_overrides_dict - ) - for i, default in enumerate(regex_options.capture_group_defaults) - }, - ) - # and sanitized default - entry.add_variables( - variables_to_add={ - f"{regex_options.capture_group_names[i]}_sanitized": sanitize_filename( - default.apply_formatter( + # add both the default... + entry.add_variables( + variables_to_add={ + regex_options.capture_group_names[i]: default.apply_formatter( variable_dict=source_variables_and_overrides_dict ) - ) - for i, default in enumerate(regex_options.capture_group_defaults) - }, - ) - # There is a capture, add the source variables to the entry as - # {source_var}_capture_1, {source_var}_capture_2, ... - else: - # Add the value... - entry.add_variables( - variables_to_add={ - regex_options.capture_group_names[i]: capture - for i, capture in enumerate(maybe_capture) - }, - ) - # And the sanitized value - entry.add_variables( - variables_to_add={ - f"{regex_options.capture_group_names[i]}_sanitized": sanitize_filename( - capture - ) - for i, capture in enumerate(maybe_capture) - }, - ) + for i, default in enumerate(regex_options.capture_group_defaults) + }, + ) + # and sanitized default + entry.add_variables( + variables_to_add={ + f"{regex_options.capture_group_names[i]}_sanitized": sanitize_filename( + default.apply_formatter( + variable_dict=source_variables_and_overrides_dict + ) + ) + for i, default in enumerate(regex_options.capture_group_defaults) + }, + ) + # There is a capture, add the source variables to the entry as + # {source_var}_capture_1, {source_var}_capture_2, ... + else: + # Add the value... + entry.add_variables( + variables_to_add={ + regex_options.capture_group_names[i]: capture + for i, capture in enumerate(maybe_capture) + }, + ) + # And the sanitized value + entry.add_variables( + variables_to_add={ + f"{regex_options.capture_group_names[i]}_sanitized": sanitize_filename( + capture + ) + for i, capture in enumerate(maybe_capture) + }, + ) return entry diff --git a/tests/e2e/plugins/test_regex.py b/tests/e2e/plugins/test_regex.py index fa32d5ab..fc4bd6b4 100644 --- a/tests/e2e/plugins/test_regex.py +++ b/tests/e2e/plugins/test_regex.py @@ -1,17 +1,20 @@ import copy import re +from typing import Any +from typing import Dict +import mergedeep import pytest from expected_transaction_log import assert_transaction_log_matches -from ytdl_sub.config.preset import Preset +from ytdl_sub.config.config_file import ConfigFile from ytdl_sub.subscriptions.subscription import Subscription from ytdl_sub.utils.exceptions import RegexNoMatchException from ytdl_sub.utils.exceptions import ValidationException @pytest.fixture -def regex_subscription_dict(output_directory): +def regex_subscription_dict_base(output_directory): return { "preset": "music_video", "download": {"url": "https://youtube.com/playlist?list=PL5BC0FC26BECA5A35"}, @@ -24,13 +27,6 @@ def regex_subscription_dict(output_directory): "regex": { # tests that skip_if_match_fails defaults to True "from": { - "title": { - "match": [ - "should not cap (.+) - (.+)", - ".*\\[(.+) - (Feb.+)]", # should filter out march video - ], - "capture_group_names": ["title_type", "title_date"], - }, "description": { "match": [".*http:\\/\\/(.+).com.*"], "capture_group_names": ["description_website"], @@ -48,58 +44,149 @@ def regex_subscription_dict(output_directory): }, }, }, - "nfo_tags": { - "tags": { - "title_cap_1": "{title_type}", - "title_cap_1_sanitized": "{title_type_sanitized}", - "title_cap_2": "{title_date}", - "desc_cap": "{description_website}", - "upload_date_both_caps": "{upload_captured_year} and {upload_captured_month}", - "override_with_capture_variable": "{contains_regex_default}", - "override_with_capture_variable_sanitized": "{contains_regex_sanitized_default}", - } - }, "overrides": { "in_regex_default": "in regex default", - "contains_regex_default": "contains {title_type}", - "contains_regex_sanitized_default": "contains {title_type_sanitized}", }, } @pytest.fixture -def regex_subscription_dict_no_match_fails(regex_subscription_dict): - regex_subscription_dict["regex"]["skip_if_match_fails"] = False - return regex_subscription_dict +def regex_subscription_dict(regex_subscription_dict_base, output_directory): + return mergedeep.merge( + regex_subscription_dict_base, + { + "regex": { + # tests that skip_if_match_fails defaults to True + "from": { + "title": { + "match": [ + "should not cap (.+) - (.+)", + ".*\\[(.+) - (Feb.+)]", # should filter out march video + ], + "capture_group_names": ["title_type", "title_date"], + }, + }, + }, + "nfo_tags": { + "tags": { + "title_cap_1": "{title_type}", + "title_cap_1_sanitized": "{title_type_sanitized}", + "title_cap_2": "{title_date}", + "desc_cap": "{description_website}", + "upload_date_both_caps": "{upload_captured_year} and {upload_captured_month}", + "override_with_capture_variable": "{contains_regex_default}", + "override_with_capture_variable_sanitized": "{contains_regex_sanitized_default}", + } + }, + "overrides": { + "contains_regex_default": "contains {title_type}", + "contains_regex_sanitized_default": "contains {title_type_sanitized}", + }, + }, + ) + + +@pytest.fixture +def regex_subscription_dict_exclude(regex_subscription_dict_base, output_directory): + return mergedeep.merge( + regex_subscription_dict_base, + { + "regex": { + # tests that skip_if_match_fails defaults to True + "from": { + "title": { + "exclude": [ + "should not cap", + ".*Feb.*", # should filter out march video + ], + }, + }, + }, + }, + ) + + +@pytest.fixture +def regex_subscription_dict_match_and_exclude(regex_subscription_dict_base, output_directory): + return mergedeep.merge( + regex_subscription_dict_base, + { + "regex": { + # tests that skip_if_match_fails defaults to True + "from": { + "title": { + "match": [ + "should not cap (.+) - (.+)", + ".*\\[(.+) - (Feb.+)]", # should filter out march video + ], + "capture_group_names": ["title_type", "title_date"], + "exclude": [ + "should not cap", + ".*27.*", # should filter out Feb 27th video + ], + }, + }, + }, + "nfo_tags": { + "tags": { + "title_cap_1": "{title_type}", + "title_cap_1_sanitized": "{title_type_sanitized}", + "title_cap_2": "{title_date}", + "desc_cap": "{description_website}", + "upload_date_both_caps": "{upload_captured_year} and {upload_captured_month}", + "override_with_capture_variable": "{contains_regex_default}", + "override_with_capture_variable_sanitized": "{contains_regex_sanitized_default}", + } + }, + "overrides": { + "contains_regex_default": "contains {title_type}", + "contains_regex_sanitized_default": "contains {title_type_sanitized}", + }, + }, + ) @pytest.fixture def playlist_subscription(music_video_config, regex_subscription_dict): - playlist_preset = Preset.from_dict( + return Subscription.from_dict( config=music_video_config, preset_name="regex_capture_playlist_test", preset_dict=regex_subscription_dict, ) - return Subscription.from_preset( - preset=playlist_preset, + +@pytest.fixture +def playlist_subscription_no_match_fails( + music_video_config: ConfigFile, regex_subscription_dict: Dict[str, Any] +): + regex_subscription_dict["regex"]["skip_if_match_fails"] = False + + return Subscription.from_dict( config=music_video_config, + preset_name="regex_capture_playlist_test", + preset_dict=regex_subscription_dict, ) @pytest.fixture -def playlist_subscription_no_match_fails( - music_video_config, regex_subscription_dict_no_match_fails -): - playlist_preset = Preset.from_dict( +def playlist_subscription_exclude( + music_video_config: ConfigFile, regex_subscription_dict_exclude: Dict[str, Any] +) -> Subscription: + return Subscription.from_dict( config=music_video_config, - preset_name="regex_capture_playlist_test", - preset_dict=regex_subscription_dict_no_match_fails, + preset_name="regex_exclude_playlist_test", + preset_dict=regex_subscription_dict_exclude, ) - return Subscription.from_preset( - preset=playlist_preset, + +@pytest.fixture +def playlist_subscription_match_and_exclude( + music_video_config: ConfigFile, regex_subscription_dict_match_and_exclude: Dict[str, Any] +) -> Subscription: + return Subscription.from_dict( config=music_video_config, + preset_name="regex_match_and_exclude_playlist_test", + preset_dict=regex_subscription_dict_match_and_exclude, ) @@ -113,6 +200,27 @@ class TestRegex: transaction_log_summary_file_name="plugins/test_regex.txt", ) + def test_regex_excludes_success(self, playlist_subscription_exclude, output_directory): + # Should only contain the march video + transaction_log = playlist_subscription_exclude.download(dry_run=True) + assert_transaction_log_matches( + output_directory=output_directory, + transaction_log=transaction_log, + transaction_log_summary_file_name="plugins/test_regex_exclude.txt", + ) + + def test_regex_match_and_excludes_success( + self, playlist_subscription_match_and_exclude, output_directory + ): + # Should only contain the Feb 1st video + transaction_log = playlist_subscription_match_and_exclude.download(dry_run=True) + assert_transaction_log_matches( + output_directory=output_directory, + transaction_log=transaction_log, + transaction_log_summary_file_name="plugins/test_regex_match_and_exclude.txt", + regenerate_transaction_log=True, + ) + def test_regex_fails_no_match(self, playlist_subscription_no_match_fails, output_directory): with pytest.raises( RegexNoMatchException, @@ -122,6 +230,34 @@ class TestRegex: ): _ = playlist_subscription_no_match_fails.download(dry_run=True) + def test_regex_fails_capture_group_with_only_excludes( + self, regex_subscription_dict_exclude, music_video_config + ): + regex_subscription_dict_exclude["regex"]["from"]["title"]["capture_group_names"] = ["uid"] + with pytest.raises( + ValidationException, + match=re.escape( + "capture group parameters requires at least one `match` to be specified" + ), + ): + _ = Subscription.from_dict( + config=music_video_config, + preset_name="test_regex_fails_capture_group_is_source_variable", + preset_dict=regex_subscription_dict_exclude, + ) + + def test_regex_fails_no_match_or_exclude(self, regex_subscription_dict, music_video_config): + del regex_subscription_dict["regex"]["from"]["title"]["match"] + with pytest.raises( + ValidationException, + match=re.escape("must specify either `match` or `exclude`"), + ): + _ = Subscription.from_dict( + config=music_video_config, + preset_name="test_regex_fails_capture_group_is_source_variable", + preset_dict=regex_subscription_dict, + ) + def test_regex_fails_capture_group_is_source_variable( self, regex_subscription_dict, music_video_config ): diff --git a/tests/resources/transaction_log_summaries/plugins/test_regex_exclude.txt b/tests/resources/transaction_log_summaries/plugins/test_regex_exclude.txt new file mode 100644 index 00000000..f82556b6 --- /dev/null +++ b/tests/resources/transaction_log_summaries/plugins/test_regex_exclude.txt @@ -0,0 +1,15 @@ +Files created: +---------------------------------------- +{output_directory} + .ytdl-sub-regex_exclude_playlist_test-download-archive.json +{output_directory}/Project Zombie + Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21]-thumb.jpg + Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].info.json + Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].mp4 + Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].nfo + NFO tags: + musicvideo: + album: Music Videos + artist: Project Zombie + title: Jesse's Minecraft Server [Trailer - Mar.21] + year: 2011 \ No newline at end of file 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 new file mode 100644 index 00000000..6a23ffab --- /dev/null +++ b/tests/resources/transaction_log_summaries/plugins/test_regex_match_and_exclude.txt @@ -0,0 +1,22 @@ +Files created: +---------------------------------------- +{output_directory} + .ytdl-sub-regex_match_and_exclude_playlist_test-download-archive.json +{output_directory}/Project Zombie + Project Zombie - Jesse's Minecraft Server [Trailer - Feb.1]-thumb.jpg + Project Zombie - Jesse's Minecraft Server [Trailer - Feb.1].info.json + Project Zombie - Jesse's Minecraft Server [Trailer - Feb.1].mp4 + Project Zombie - Jesse's Minecraft Server [Trailer - Feb.1].nfo + NFO tags: + musicvideo: + album: Music Videos + artist: Project Zombie + desc_cap: www.jesseminecraft.webs + override_with_capture_variable: contains Trailer + override_with_capture_variable_sanitized: contains Trailer + title: Jesse's Minecraft Server [Trailer - Feb.1] + title_cap_1: Trailer + title_cap_1_sanitized: Trailer + title_cap_2: Feb.1 + upload_date_both_caps: First and Second containing in regex default + year: 2011 \ No newline at end of file From ac5080f273385aa08656876b80cc3cf08eff2613 Mon Sep 17 00:00:00 2001 From: Alex Leahu Date: Mon, 22 May 2023 20:43:12 -0500 Subject: [PATCH 09/42] [DOCS] Fix --update-with-info-json message (#618) * Fix --update-with-info-json message * Run black with --preview to fix pylint error --- src/ytdl_sub/cli/main.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ytdl_sub/cli/main.py b/src/ytdl_sub/cli/main.py index a8491b5e..8e9e247d 100644 --- a/src/ytdl_sub/cli/main.py +++ b/src/ytdl_sub/cli/main.py @@ -316,8 +316,9 @@ def main() -> List[Tuple[Subscription, FileHandlerTransactionLog]]: and not config.config_options.experimental.enable_update_with_info_json ): raise ExperimentalFeatureNotEnabled( - "--update-with-info-json requires setting " - "configuration.experimental.update_with_info_json to True. This feature is ", + "--update-with-info-json requires setting" + " configuration.experimental.enable_update_with_info_json to True. This" + " feature is ", "still being tested and has the ability to destroy files. Ensure you have a ", "full backup before usage. You have been warned!", ) From 465a290f8bd6fd0e6fbcd98016ede90990200c01 Mon Sep 17 00:00:00 2001 From: costaht <50637431+costaht@users.noreply.github.com> Date: Sun, 28 May 2023 01:03:45 -0400 Subject: [PATCH 10/42] [BUGFIX] Add line break to transaction logs (#622) * add line break to logs * Update main.py --- src/ytdl_sub/cli/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ytdl_sub/cli/main.py b/src/ytdl_sub/cli/main.py index 8e9e247d..acb615ae 100644 --- a/src/ytdl_sub/cli/main.py +++ b/src/ytdl_sub/cli/main.py @@ -199,7 +199,7 @@ def _output_transaction_log( transaction_log_file_contents = "" for subscription, transaction_log in transaction_logs: if transaction_log.is_empty: - transaction_log_contents = f"No files changed for {subscription.name}" + transaction_log_contents = f"\nNo files changed for {subscription.name}" else: transaction_log_contents = ( f"Transaction log for {subscription.name}:\n" From 7816c2fe59dc5674bcf4204fb749a7af5dfbdce6 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Tue, 30 May 2023 23:20:40 -0700 Subject: [PATCH 11/42] [BUGFIX] Add `check_formats` on download retry (#623) --- src/ytdl_sub/downloaders/ytdlp.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ytdl_sub/downloaders/ytdlp.py b/src/ytdl_sub/downloaders/ytdlp.py index 8b2b74ff..d66f0c80 100644 --- a/src/ytdl_sub/downloaders/ytdlp.py +++ b/src/ytdl_sub/downloaders/ytdlp.py @@ -102,6 +102,10 @@ class YTDLP: if is_downloaded and is_thumbnail_downloaded: return entry_dict + # Always add check_formats + # See https://github.com/yt-dlp/yt-dlp/issues/502 + copied_ytdl_options_overrides["check_formats"] = True + # If the video file is downloaded but the thumbnail is not, then do not download # the video again if is_downloaded and not is_thumbnail_downloaded: From ac5561cb2eabcd962a5aa9d88a2cb397f9b70cb2 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Sat, 3 Jun 2023 07:42:16 -0700 Subject: [PATCH 12/42] [FEATURE] Content rating override variable (#626) * [FEATURE] Content rating override variable * docs --- docs/presets.rst | 1 + .../prebuilt_presets/tv_show/episode.yaml | 5 ++ .../chapters/test_chapters_from_comments.json | 4 +- .../date_range/test_channel_recent.json | 10 ++-- .../test_channel_rolling_recent.json | 6 +-- .../plugins/file_convert/output.json | 2 +- .../file_convert/output_custom_ffmpeg.json | 2 +- .../test_match_filters_partial.json | 2 +- .../test_chapters_sb_and_embedded_subs.json | 4 +- .../plugins/test_subtitles_embedded.json | 2 +- .../test_subtitles_embedded_and_file.json | 2 +- .../is_yt_0.json | 18 +++---- .../is_yt_0_many_urls.json | 34 ++++++------- .../is_yt_1.json | 18 +++---- .../is_yt_1_many_urls.json | 34 ++++++------- .../is_yt_0.json | 18 +++---- .../is_yt_0_many_urls.json | 34 ++++++------- .../is_yt_1.json | 18 +++---- .../is_yt_1_many_urls.json | 34 ++++++------- .../is_yt_0.json | 18 +++---- .../is_yt_0_many_urls.json | 34 ++++++------- .../is_yt_1.json | 18 +++---- .../is_yt_1_many_urls.json | 34 ++++++------- .../is_yt_0.json | 18 +++---- .../is_yt_0_many_urls.json | 34 ++++++------- .../is_yt_1.json | 18 +++---- .../is_yt_1_many_urls.json | 34 ++++++------- .../s_1/is_yt_0.json | 18 +++---- .../s_1/is_yt_1.json | 18 +++---- .../s_2/is_yt_0.json | 34 ++++++------- .../s_2/is_yt_1.json | 34 ++++++------- .../s_1/is_yt_0.json | 18 +++---- .../s_1/is_yt_1.json | 18 +++---- .../s_2/is_yt_0.json | 34 ++++++------- .../s_2/is_yt_1.json | 34 ++++++------- .../s_1/is_yt_0.json | 18 +++---- .../s_1/is_yt_1.json | 18 +++---- .../s_2/is_yt_0.json | 34 ++++++------- .../s_2/is_yt_1.json | 34 ++++++------- .../s_1/is_yt_0.json | 18 +++---- .../s_1/is_yt_1.json | 18 +++---- .../s_2/is_yt_0.json | 34 ++++++------- .../s_2/is_yt_1.json | 34 ++++++------- .../is_yt_0.json | 18 +++---- .../is_yt_0_many_urls.json | 34 ++++++------- .../is_yt_1.json | 18 +++---- .../is_yt_1_many_urls.json | 34 ++++++------- .../is_yt_0.json | 18 +++---- .../is_yt_0_many_urls.json | 34 ++++++------- .../is_yt_1.json | 18 +++---- .../is_yt_1_many_urls.json | 34 ++++++------- .../is_yt_0.json | 18 +++---- .../is_yt_0_many_urls.json | 34 ++++++------- .../is_yt_1.json | 18 +++---- .../is_yt_1_many_urls.json | 34 ++++++------- .../is_yt_0.json | 18 +++---- .../is_yt_0_many_urls.json | 34 ++++++------- .../is_yt_1.json | 18 +++---- .../is_yt_1_many_urls.json | 34 ++++++------- .../s_1/is_yt_0.json | 18 +++---- .../s_1/is_yt_1.json | 18 +++---- .../s_2/is_yt_0.json | 34 ++++++------- .../s_2/is_yt_1.json | 34 ++++++------- .../s_1/is_yt_0.json | 18 +++---- .../s_1/is_yt_1.json | 18 +++---- .../s_2/is_yt_0.json | 34 ++++++------- .../s_2/is_yt_1.json | 34 ++++++------- .../s_1/is_yt_0.json | 18 +++---- .../s_1/is_yt_1.json | 18 +++---- .../s_2/is_yt_0.json | 34 ++++++------- .../s_2/is_yt_1.json | 34 ++++++------- .../s_1/is_yt_0.json | 18 +++---- .../s_1/is_yt_1.json | 18 +++---- .../s_2/is_yt_0.json | 34 ++++++------- .../s_2/is_yt_1.json | 34 ++++++------- .../is_yt_0.json | 8 +-- .../is_yt_0_many_urls.json | 16 +++--- .../is_yt_1.json | 8 +-- .../is_yt_1_many_urls.json | 16 +++--- .../is_yt_0.json | 8 +-- .../is_yt_0_many_urls.json | 16 +++--- .../is_yt_1.json | 8 +-- .../is_yt_1_many_urls.json | 16 +++--- .../is_yt_0.json | 8 +-- .../is_yt_0_many_urls.json | 16 +++--- .../is_yt_1.json | 8 +-- .../is_yt_1_many_urls.json | 16 +++--- .../is_yt_0.json | 8 +-- .../is_yt_0_many_urls.json | 16 +++--- .../is_yt_1.json | 8 +-- .../is_yt_1_many_urls.json | 16 +++--- .../s_1/is_yt_0.json | 8 +-- .../s_1/is_yt_1.json | 8 +-- .../s_2/is_yt_0.json | 16 +++--- .../s_2/is_yt_1.json | 16 +++--- .../s_1/is_yt_0.json | 8 +-- .../s_1/is_yt_1.json | 8 +-- .../s_2/is_yt_0.json | 16 +++--- .../s_2/is_yt_1.json | 16 +++--- .../s_1/is_yt_0.json | 8 +-- .../s_1/is_yt_1.json | 8 +-- .../s_2/is_yt_0.json | 16 +++--- .../s_2/is_yt_1.json | 16 +++--- .../s_1/is_yt_0.json | 8 +-- .../s_1/is_yt_1.json | 8 +-- .../s_2/is_yt_0.json | 16 +++--- .../s_2/is_yt_1.json | 16 +++--- .../youtube/test_channel_full.json | 50 +++++++++---------- .../youtube/test_playlist.json | 14 +++--- .../youtube/test_video.json | 2 +- .../youtube/test_video_cli.json | 2 +- .../date_range/test_channel_recent.txt | 5 ++ .../is_yt_0.txt | 9 ++++ .../is_yt_0_many_urls.txt | 17 +++++++ .../is_yt_1.txt | 9 ++++ .../is_yt_1_many_urls.txt | 17 +++++++ .../is_yt_0.txt | 9 ++++ .../is_yt_0_many_urls.txt | 17 +++++++ ...son_by_year__episode_by_download_index.txt | 16 ++++++ ...son_by_year__episode_by_download_index.txt | 8 +++ .../is_yt_1.txt | 9 ++++ .../is_yt_1_many_urls.txt | 17 +++++++ ...son_by_year__episode_by_download_index.txt | 16 ++++++ ...son_by_year__episode_by_download_index.txt | 8 +++ .../is_yt_0.txt | 9 ++++ .../is_yt_0_many_urls.txt | 17 +++++++ ...son_by_year__episode_by_download_index.txt | 16 ++++++ ...son_by_year__episode_by_download_index.txt | 8 +++ .../is_yt_1.txt | 9 ++++ .../is_yt_1_many_urls.txt | 17 +++++++ ...son_by_year__episode_by_download_index.txt | 16 ++++++ ...son_by_year__episode_by_download_index.txt | 8 +++ .../is_yt_0.txt | 9 ++++ .../is_yt_0_many_urls.txt | 17 +++++++ ...son_by_year__episode_by_download_index.txt | 16 ++++++ ...son_by_year__episode_by_download_index.txt | 8 +++ .../is_yt_1.txt | 9 ++++ .../is_yt_1_many_urls.txt | 17 +++++++ ...son_by_year__episode_by_download_index.txt | 16 ++++++ ...son_by_year__episode_by_download_index.txt | 8 +++ .../s_1/is_yt_0.txt | 9 ++++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_1/is_yt_1.txt | 9 ++++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_2/is_yt_0.txt | 17 +++++++ ...on__episode_by_playlist_index_reversed.txt | 14 ++++++ .../s_2/is_yt_1.txt | 17 +++++++ ...on__episode_by_playlist_index_reversed.txt | 14 ++++++ .../s_1/is_yt_0.txt | 9 ++++ .../s_1/is_yt_1.txt | 9 ++++ .../s_2/is_yt_0.txt | 17 +++++++ .../s_2/is_yt_1.txt | 17 +++++++ .../s_1/is_yt_0.txt | 9 ++++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_1/is_yt_1.txt | 9 ++++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_2/is_yt_0.txt | 17 +++++++ ...on__episode_by_playlist_index_reversed.txt | 16 ++++++ .../s_2/is_yt_1.txt | 17 +++++++ ...on__episode_by_playlist_index_reversed.txt | 16 ++++++ .../s_1/is_yt_0.txt | 9 ++++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_1/is_yt_1.txt | 9 ++++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_2/is_yt_0.txt | 17 +++++++ ...on__episode_by_playlist_index_reversed.txt | 16 ++++++ .../s_2/is_yt_1.txt | 17 +++++++ ...on__episode_by_playlist_index_reversed.txt | 16 ++++++ .../is_yt_0.txt | 9 ++++ .../is_yt_0_many_urls.txt | 17 +++++++ .../is_yt_1.txt | 9 ++++ .../is_yt_1_many_urls.txt | 17 +++++++ .../is_yt_0.txt | 9 ++++ .../is_yt_0_many_urls.txt | 17 +++++++ ...son_by_year__episode_by_download_index.txt | 16 ++++++ ...son_by_year__episode_by_download_index.txt | 8 +++ .../is_yt_1.txt | 9 ++++ .../is_yt_1_many_urls.txt | 17 +++++++ ...son_by_year__episode_by_download_index.txt | 16 ++++++ ...son_by_year__episode_by_download_index.txt | 8 +++ .../is_yt_0.txt | 9 ++++ .../is_yt_0_many_urls.txt | 17 +++++++ ...son_by_year__episode_by_download_index.txt | 16 ++++++ ...son_by_year__episode_by_download_index.txt | 8 +++ .../is_yt_1.txt | 9 ++++ .../is_yt_1_many_urls.txt | 17 +++++++ ...son_by_year__episode_by_download_index.txt | 16 ++++++ ...son_by_year__episode_by_download_index.txt | 8 +++ .../is_yt_0.txt | 9 ++++ .../is_yt_0_many_urls.txt | 17 +++++++ ...son_by_year__episode_by_download_index.txt | 16 ++++++ ...son_by_year__episode_by_download_index.txt | 8 +++ .../is_yt_1.txt | 9 ++++ .../is_yt_1_many_urls.txt | 17 +++++++ ...son_by_year__episode_by_download_index.txt | 16 ++++++ ...son_by_year__episode_by_download_index.txt | 8 +++ .../s_1/is_yt_0.txt | 9 ++++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_1/is_yt_1.txt | 9 ++++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_2/is_yt_0.txt | 17 +++++++ ...on__episode_by_playlist_index_reversed.txt | 14 ++++++ .../s_2/is_yt_1.txt | 17 +++++++ ...on__episode_by_playlist_index_reversed.txt | 14 ++++++ .../s_1/is_yt_0.txt | 9 ++++ .../s_1/is_yt_1.txt | 9 ++++ .../s_2/is_yt_0.txt | 17 +++++++ .../s_2/is_yt_1.txt | 17 +++++++ .../s_1/is_yt_0.txt | 9 ++++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_1/is_yt_1.txt | 9 ++++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_2/is_yt_0.txt | 17 +++++++ ...on__episode_by_playlist_index_reversed.txt | 16 ++++++ .../s_2/is_yt_1.txt | 17 +++++++ ...on__episode_by_playlist_index_reversed.txt | 16 ++++++ .../s_1/is_yt_0.txt | 9 ++++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_1/is_yt_1.txt | 9 ++++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_2/is_yt_0.txt | 17 +++++++ ...on__episode_by_playlist_index_reversed.txt | 16 ++++++ .../s_2/is_yt_1.txt | 17 +++++++ ...on__episode_by_playlist_index_reversed.txt | 16 ++++++ .../is_yt_0.txt | 4 ++ .../is_yt_0_many_urls.txt | 8 +++ .../is_yt_1.txt | 4 ++ .../is_yt_1_many_urls.txt | 8 +++ .../is_yt_0.txt | 4 ++ .../is_yt_0_many_urls.txt | 8 +++ ...son_by_year__episode_by_download_index.txt | 8 +++ ...son_by_year__episode_by_download_index.txt | 4 ++ .../is_yt_1.txt | 4 ++ .../is_yt_1_many_urls.txt | 8 +++ ...son_by_year__episode_by_download_index.txt | 8 +++ ...son_by_year__episode_by_download_index.txt | 4 ++ .../is_yt_0.txt | 4 ++ .../is_yt_0_many_urls.txt | 8 +++ ...son_by_year__episode_by_download_index.txt | 8 +++ ...son_by_year__episode_by_download_index.txt | 4 ++ .../is_yt_1.txt | 4 ++ .../is_yt_1_many_urls.txt | 8 +++ ...son_by_year__episode_by_download_index.txt | 8 +++ ...son_by_year__episode_by_download_index.txt | 4 ++ .../is_yt_0.txt | 4 ++ .../is_yt_0_many_urls.txt | 8 +++ ...son_by_year__episode_by_download_index.txt | 8 +++ ...son_by_year__episode_by_download_index.txt | 4 ++ .../is_yt_1.txt | 4 ++ .../is_yt_1_many_urls.txt | 8 +++ ...son_by_year__episode_by_download_index.txt | 8 +++ ...son_by_year__episode_by_download_index.txt | 4 ++ .../s_1/is_yt_0.txt | 4 ++ ...on__episode_by_playlist_index_reversed.txt | 4 ++ .../s_1/is_yt_1.txt | 4 ++ ...on__episode_by_playlist_index_reversed.txt | 4 ++ .../s_2/is_yt_0.txt | 8 +++ ...on__episode_by_playlist_index_reversed.txt | 7 +++ .../s_2/is_yt_1.txt | 8 +++ ...on__episode_by_playlist_index_reversed.txt | 7 +++ .../s_1/is_yt_0.txt | 4 ++ .../s_1/is_yt_1.txt | 4 ++ .../s_2/is_yt_0.txt | 8 +++ .../s_2/is_yt_1.txt | 8 +++ .../s_1/is_yt_0.txt | 4 ++ ...on__episode_by_playlist_index_reversed.txt | 4 ++ .../s_1/is_yt_1.txt | 4 ++ ...on__episode_by_playlist_index_reversed.txt | 4 ++ .../s_2/is_yt_0.txt | 8 +++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_2/is_yt_1.txt | 8 +++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_1/is_yt_0.txt | 4 ++ ...on__episode_by_playlist_index_reversed.txt | 4 ++ .../s_1/is_yt_1.txt | 4 ++ ...on__episode_by_playlist_index_reversed.txt | 4 ++ .../s_2/is_yt_0.txt | 8 +++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../s_2/is_yt_1.txt | 8 +++ ...on__episode_by_playlist_index_reversed.txt | 8 +++ .../youtube/test_channel_full.txt | 25 ++++++++++ .../youtube/test_playlist.txt | 7 +++ .../youtube/test_video_nulled_values.txt | 5 ++ 283 files changed, 2857 insertions(+), 1075 deletions(-) diff --git a/docs/presets.rst b/docs/presets.rst index 12e3b629..584a14ba 100644 --- a/docs/presets.rst +++ b/docs/presets.rst @@ -55,6 +55,7 @@ and overriding the following variables: url: "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw" # can be modified from their default value # tv_show_genre: "ytdl-sub" + # tv_show_content_rating: "TV-14" # episode_title: "{upload_date_standardized} - {title}" # episode_description: "{webpage_url}" diff --git a/src/ytdl_sub/prebuilt_presets/tv_show/episode.yaml b/src/ytdl_sub/prebuilt_presets/tv_show/episode.yaml index 9af22b5b..c50ca842 100644 --- a/src/ytdl_sub/prebuilt_presets/tv_show/episode.yaml +++ b/src/ytdl_sub/prebuilt_presets/tv_show/episode.yaml @@ -26,10 +26,12 @@ presets: # episode_number # episode_number_padded tv_show_genre: "ytdl-sub" + tv_show_content_rating: "TV-14" season_title: "{season_number_padded}" episode_title: "{upload_date_standardized} - {title}" episode_plot: "{webpage_url}\n\n{description}" episode_year: "{upload_year}" + episode_content_rating: "{tv_show_content_rating}" episode_date_standardized: "{upload_date_standardized}" episode_file_name: "s{season_number_padded}.e{episode_number_padded} - {file_title}" episode_file_path: "Season {season_number_padded}/{episode_file_name}" @@ -44,6 +46,7 @@ presets: synopsis: "{episode_plot}" year: "{episode_year}" date: "{episode_date_standardized}" + contentRating: "{episode_content_rating}" _episode_nfo_tags: nfo_tags: @@ -58,6 +61,7 @@ presets: plot: "{episode_plot}" year: "{episode_year}" aired: "{episode_date_standardized}" + mpaa: "{episode_content_rating}" output_directory_nfo_tags: nfo_name: "tvshow.nfo" @@ -66,6 +70,7 @@ presets: title: "{tv_show_name}" genre: - "{tv_show_genre}" + mpaa: "{tv_show_content_rating}" #################################################################################################### 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 7bbb4514..83aa189f 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,7 +1,7 @@ { ".ytdl-sub-chapters_from_comments-download-archive.json": "122723ce8d257eebb05178daa26141f6", "JMC/JMC - Move 78 - Automated Improvisation [Full Album]-thumb.jpg": "c12e6a6f242680d1096a1a99d74a62c6", - "JMC/JMC - Move 78 - Automated Improvisation [Full Album].info.json": "207f8c8aa7a383aa1acb99a6836f2fb6", - "JMC/JMC - Move 78 - Automated Improvisation [Full Album].mp4": "40a74798dddf486a656c761516eb0528", + "JMC/JMC - Move 78 - Automated Improvisation [Full Album].info.json": "8fe1b8c97290084a9e6149fed460cd51", + "JMC/JMC - Move 78 - Automated Improvisation [Full Album].mp4": "23b5ff14853bab45c0d44c6c5e136f72", "JMC/JMC - Move 78 - Automated Improvisation [Full Album].nfo": "7a65b184d24c68fc0ec5380432250f5b" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_recent.json b/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_recent.json index f346967f..36dace10 100644 --- a/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_recent.json +++ b/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_recent.json @@ -1,14 +1,14 @@ { "Project ⧸ Zombie/.ytdl-sub-recent-download-archive.json": "ca7275efd7f2ebe489b8ca4007dc5361", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer-thumb.jpg": "705ca4e0d99b37e9ecdf6bfe4b90c59b", - "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json": "a8bc452d1b2075d761f5f2bf3812ecb9", + "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json": "26f8296166a30aa9b8a198ef2541475e", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.mp4": "dbb140af8676f34fb701d5199e8708ea", - "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.nfo": "bb868035301eed6afea636f7f7bddaf5", + "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.nfo": "ee5bee94667ed4f1d47af08384418d3c", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg": "28d852ede73b879b9ebf9a061cfc7d46", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "abd80bd5828a3b986f41ec0bd8d497c1", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "d54f92d33e4b9486c509913598730605", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "083e2e77e3e01218419531c08795c9c0", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "6cbd3a26974aa3be8ab73578e748e013", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "c2f06f9eb5b42c777808a35587e5941e", "Project ⧸ Zombie/fanart.jpg": "129c6639b47299bc48062f0365e670ee", "Project ⧸ Zombie/poster.jpg": "5de28eea5a921a041452ab3ce1041f73", - "Project ⧸ Zombie/tvshow.nfo": "3adb1769f4ca5a0c4dd59a9f662a4780" + "Project ⧸ Zombie/tvshow.nfo": "bc3d17c23371da3af6db1108faea5a84" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_rolling_recent.json b/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_rolling_recent.json index a13be5ff..c0237256 100644 --- a/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_rolling_recent.json +++ b/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_rolling_recent.json @@ -1,10 +1,10 @@ { "Project ⧸ Zombie/.ytdl-sub-recent-download-archive.json": "46170edaf7cc51e5f59ef5d4c0476200", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg": "28d852ede73b879b9ebf9a061cfc7d46", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "abd80bd5828a3b986f41ec0bd8d497c1", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "d54f92d33e4b9486c509913598730605", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "083e2e77e3e01218419531c08795c9c0", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "6cbd3a26974aa3be8ab73578e748e013", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "c2f06f9eb5b42c777808a35587e5941e", "Project ⧸ Zombie/fanart.jpg": "129c6639b47299bc48062f0365e670ee", "Project ⧸ Zombie/poster.jpg": "5de28eea5a921a041452ab3ce1041f73", - "Project ⧸ Zombie/tvshow.nfo": "3adb1769f4ca5a0c4dd59a9f662a4780" + "Project ⧸ Zombie/tvshow.nfo": "bc3d17c23371da3af6db1108faea5a84" } \ 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 6bc6c19d..0e06c5a4 100644 --- a/tests/resources/expected_downloads_summaries/plugins/file_convert/output.json +++ b/tests/resources/expected_downloads_summaries/plugins/file_convert/output.json @@ -1,7 +1,7 @@ { ".ytdl-sub-file_convert_test-download-archive.json": "65aa49c7345f9fc201e42ddc4a96b19b", "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3-thumb.jpg": "662fcaadf6e80d63591bac19a5fdffb0", - "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.info.json": "cc013e7b638b49e51970e855bcf821c8", + "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.info.json": "f1d7f68e7fff921508dbcae121dcf33c", "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.mp4": "390177bcc076e309d1534b8bb5afdcc7", "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.nfo": "cacf09ab38f9b3085da9c5af516cf22a" } \ 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 2649fb5c..f6fd09c3 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,7 +1,7 @@ { ".ytdl-sub-file_convert_test-download-archive.json": "74813dccf4e9732e49f5dc3c2d66f3be", "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3-thumb.jpg": "662fcaadf6e80d63591bac19a5fdffb0", - "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.info.json": "848617cf0fa5f9e51b929de72d594d78", + "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.info.json": "6c60af5a3ff079bfdbe62782c4afbbab", "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.mkv": "b5f248b560f89f3f2a83fcdcd197d486", "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.nfo": "cacf09ab38f9b3085da9c5af516cf22a" } \ No newline at end of file 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 fe968a5e..05c2cae7 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,7 +1,7 @@ { ".ytdl-sub-match_filter_test-download-archive.json": "6017105735dd8fdfe18932c9c048dccf", "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21]-thumb.jpg": "e7830aa8a64b0cde65ba3f7e5fc56530", - "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "ddfda0c60aafd9779da692d6c165385b", + "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "8c572fd9c3e7a16add30b5cfc4a93594", "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].nfo": "17c303f07e9b3af77c90975f843c95bd", "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].webm": "ad90ebef1ea6cbdb924670cdd7d1b9b9" } \ No newline at end of file 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 777a1242..f44caa26 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,7 +1,7 @@ { ".ytdl-sub-sponsorblock_with_embedded_subs_test-download-archive.json": "40abc64a8fe93a10406bff1548a2cbe2", "JMC/JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case-thumb.jpg": "b5353a824a4800cc26f884e3025ed969", - "JMC/JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.info.json": "970c6f6a3b34851fa6fcbe7e9b7b21d0", - "JMC/JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.mp4": "03696a5cf4491c2a3649c7022801a14a", + "JMC/JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.info.json": "9dc7bee59041a2dfb82f91d29bc444b4", + "JMC/JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.mp4": "c9fac07c04da7606c98b6cdd391c539a", "JMC/JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.nfo": "b9bd35e4f260c728774d8dd31f83637c" } \ 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 463a197b..17bb35ec 100644 --- a/tests/resources/expected_downloads_summaries/plugins/test_subtitles_embedded.json +++ b/tests/resources/expected_downloads_summaries/plugins/test_subtitles_embedded.json @@ -1,7 +1,7 @@ { ".ytdl-sub-subtitles_embedded_test-download-archive.json": "1aa35c1d2663ac721f33f8374c00af1a", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind-thumb.jpg": "50ee47c80f679029f5d3503bb91b045a", - "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.info.json": "24ee80a0b78191fbc091b29901ca7067", + "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.info.json": "ea72e1cc74c1623bea92ba8140fa749d", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.mp4": "1f1f91f85b162c20596a2413e704b809", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.nfo": "c64964fab07574080e5da3242e3bfd48" } \ No newline at end of file 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 43fc3874..c3fab12c 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 @@ -3,7 +3,7 @@ "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind-thumb.jpg": "50ee47c80f679029f5d3503bb91b045a", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.de.srt": "b343c3bb9257b7ee7ba38f570a115b37", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.en.srt": "fe8c6ee92cae6e059fd80fd61691adbe", - "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.info.json": "b295080aa389e023026d4127e8ab0a06", + "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.info.json": "d8263cbb0e6a99e05e3631d1696c8042", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.mp4": "1f1f91f85b162c20596a2413e704b809", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.nfo": "c64964fab07574080e5da3242e3bfd48" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.json index 1b54e4fe..25f45aba 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.json @@ -1,20 +1,20 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "456d8882fc5e35d74f19b386d1d9a059", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "f1315ac907d99c567839ac982b396f51", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "44a703e77c8285e81fec57ed9000bb0c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.mp4": "5f221fdf07f200a297427b5df953d96f", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "1925f7654bf0243736c7b32bc013c0d9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "dbe61f2c8ae41041773f713ba5376726", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "559c970f2fde6db18d42850b65f038b4", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "3fe91099a510c9dc820a0a7adba98868", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.mp4": "240eb2e4df1abb10290f957d75f2522c", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "7a39d8c24ee8df26bc72ac4b2753715b", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "0f071078c9fa2569bbcb998664d40681", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "6e712b8c5b40f3622732f087127d75f3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "e780d5e9e678d4aae5b131a5f3603695", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.mp4": "0c58e78e7727c893226b9fcbe39b1791", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "a9e5d5d21b6ca5574ffecee859413923", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "837a61dca11bbe1874ea07cb8ef8a7c9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "61d42a2f8aa085eae5758206ff853538", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "4a4d542da434d5b3ff8d304f0e077469", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.mp4": "8b75d7f6f6f84cccf1867a91d15044a6", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "7e79fad2f197644c02bfd35c29b46029", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "8ee3845c514a411425b7e9198666b61c", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.json index 822bb000..d27004ac 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.json @@ -1,36 +1,36 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "2bf8edeaf8b5658c4a42a9faa9bb2f60", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "4b04325397e3b9ed0ee51f319ce07353", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "3caee440547dd4ed46ec3cdca46978f2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.mp4": "5f221fdf07f200a297427b5df953d96f", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "1925f7654bf0243736c7b32bc013c0d9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "dbe61f2c8ae41041773f713ba5376726", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "729ca4dba26539e6d8c04443c9aa67ab", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "0b180b38ac673e7e320e9e615974fe41", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.mp4": "240eb2e4df1abb10290f957d75f2522c", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "7a39d8c24ee8df26bc72ac4b2753715b", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "0f071078c9fa2569bbcb998664d40681", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "075f2c2ce8c995195decf755fc980c89", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "5b26edd07c0534d53884d6a42908f8db", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.mp4": "0c58e78e7727c893226b9fcbe39b1791", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "a9e5d5d21b6ca5574ffecee859413923", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "837a61dca11bbe1874ea07cb8ef8a7c9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.info.json": "e3b5da94c5a86db003633570af47d1a9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.info.json": "629fb263cff2e93b7ec67769ebbc75e0", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.mp4": "e8b77ffd826f8f7233b875e311adaf34", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.nfo": "17489dad8935540598d3c5f873eb11f8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.nfo": "c1f5925e1eab8bd21e077df560879d94", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.info.json": "c572cf9767af2221f4e88b40ab11e7dd", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.info.json": "0a3998c019cc33845be703ca1bb448f9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.mp4": "4343e692b53f0abce80559b59ef2fa0c", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.nfo": "5be336b1d5e9db676bc864081dd0a20c", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.nfo": "9fdbaa70187252b0d303d128123c4e83", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.info.json": "4fe8ba1b78f29c9e578d84d3ef6e8caa", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.info.json": "e891c1960d5c29b5e1e73c98ecf2e7f6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.mp4": "dea5d69ae35e47aa78a51f464088a6ad", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.nfo": "296ac9d9371ba73e4361ace900de3056", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.nfo": "5e5815bbc8b471df94d8536b117409f4", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.info.json": "943a66e92c610b032471cf684fa2cdf0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.info.json": "fe18c65b99ca8942e65d777c9a498577", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.mp4": "b2f03dcefe44b8afc65b2500c873aec2", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.nfo": "acd99e3536227ce1fbfdb0323a180418", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.nfo": "a86c62cd14e6a42dd79639a6155165fe", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "fc9484dbc42b6fd6149fdcacc235e206", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "aeeb1be477400f34485799112a8121c2", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.mp4": "8b75d7f6f6f84cccf1867a91d15044a6", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "7e79fad2f197644c02bfd35c29b46029", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "8ee3845c514a411425b7e9198666b61c", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.json index e672558c..06337329 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.json @@ -1,22 +1,22 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "456d8882fc5e35d74f19b386d1d9a059", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "044162512a1982b573a0d6f19646801a", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "bebd3dafb168c976a8c817e83a550ce2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.mp4": "5f221fdf07f200a297427b5df953d96f", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "1925f7654bf0243736c7b32bc013c0d9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "dbe61f2c8ae41041773f713ba5376726", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "d6e1d8a486125f87d04959607e2dc515", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "7543d21dcf2bd220a9ce4cd15f1e1578", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.mp4": "240eb2e4df1abb10290f957d75f2522c", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "7a39d8c24ee8df26bc72ac4b2753715b", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "0f071078c9fa2569bbcb998664d40681", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "5632b6ac9992ee07bf6052e9c87a02c5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "921a343cf11be7cc492678459dbdd926", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.mp4": "0c58e78e7727c893226b9fcbe39b1791", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "a9e5d5d21b6ca5574ffecee859413923", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "837a61dca11bbe1874ea07cb8ef8a7c9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "aa1269526f1e384b25d630c7db17860e", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "5757f06de01c68c5104ec7a7b0c6a69b", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.mp4": "8b75d7f6f6f84cccf1867a91d15044a6", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "7e79fad2f197644c02bfd35c29b46029", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "8ee3845c514a411425b7e9198666b61c", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.json index 495ec203..14e104a3 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "2bf8edeaf8b5658c4a42a9faa9bb2f60", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "b8f3acff3cb18657dfa8a37b037c78f1", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "3a613f0724932930ab746bcf9f8bdf42", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.mp4": "5f221fdf07f200a297427b5df953d96f", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "1925f7654bf0243736c7b32bc013c0d9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "dbe61f2c8ae41041773f713ba5376726", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "e4efb3ea481b6936d188470ace4d6bae", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "a702f2b8e66c348ceb3ec1fd65956024", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.mp4": "240eb2e4df1abb10290f957d75f2522c", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "7a39d8c24ee8df26bc72ac4b2753715b", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "0f071078c9fa2569bbcb998664d40681", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "683d44d82d8854b1bed529196dc091c9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "455e6a6bce2b8630d1a53e11c5554362", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.mp4": "0c58e78e7727c893226b9fcbe39b1791", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "a9e5d5d21b6ca5574ffecee859413923", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "837a61dca11bbe1874ea07cb8ef8a7c9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.info.json": "f2ab803ea763a11fb271d7a36b2eb340", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.info.json": "04c2a406e17fb509e849c3d5ccac8b5e", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.mp4": "e8b77ffd826f8f7233b875e311adaf34", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.nfo": "17489dad8935540598d3c5f873eb11f8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.nfo": "c1f5925e1eab8bd21e077df560879d94", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.info.json": "6e010415351d9d94f64624607d7ad831", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.info.json": "b5960c859c450da1c40fe68951499a8f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.mp4": "4343e692b53f0abce80559b59ef2fa0c", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.nfo": "5be336b1d5e9db676bc864081dd0a20c", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.nfo": "9fdbaa70187252b0d303d128123c4e83", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.info.json": "7214c68d8bd6f3c714dee034a5e04fa8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.info.json": "1892550ced3033c5b779324e39ef77ac", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.mp4": "dea5d69ae35e47aa78a51f464088a6ad", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.nfo": "296ac9d9371ba73e4361ace900de3056", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.nfo": "5e5815bbc8b471df94d8536b117409f4", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.info.json": "d04117d103932f217a50e1a28db42962", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.info.json": "03254329cabbac6a887801d1a3a4a9fc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.mp4": "b2f03dcefe44b8afc65b2500c873aec2", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.nfo": "acd99e3536227ce1fbfdb0323a180418", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.nfo": "a86c62cd14e6a42dd79639a6155165fe", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "e33b506e3e441ad05af03826b8ccb758", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "09b731b1e404368cf7ce3fe8197e1de9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.mp4": "8b75d7f6f6f84cccf1867a91d15044a6", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "7e79fad2f197644c02bfd35c29b46029", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "8ee3845c514a411425b7e9198666b61c", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.json index da16227c..1d91c9bd 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.json @@ -1,20 +1,20 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "e30d83126c2c6981c936ed894a6f159b", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "f1315ac907d99c567839ac982b396f51", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "44a703e77c8285e81fec57ed9000bb0c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.mp4": "72205b53c6e2d477372e3d5bb3d35fff", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "c2e446ade2fe21cffe3e9e4b79a1ed1f", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "7c0f2a9d38bf617377e474fcb9bf2bc2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "559c970f2fde6db18d42850b65f038b4", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "3fe91099a510c9dc820a0a7adba98868", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.mp4": "bc7ffede56ed138f592d76a3a02681ae", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "8d64a2d4c30483f6e032df52f7911dad", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "1f4dec756555ee345cd9d6489b63e070", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "6e712b8c5b40f3622732f087127d75f3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "e780d5e9e678d4aae5b131a5f3603695", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.mp4": "4825194cd6a037b79997cfb2d08ed444", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "0b9391e992b88c4cef32a6892609ef4c", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "f6f704ae3ae0c4055590a147eb425609", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "61d42a2f8aa085eae5758206ff853538", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "4a4d542da434d5b3ff8d304f0e077469", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.mp4": "efd9d3b1f941386c031e5899aa3042ed", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c64a1ce3eade3978ea2aeb0ed72eb5f5", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c6e0d368bfe9d70134e5a2ff2d3dccc6", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.json index f6c1ae5a..904d771d 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.json @@ -1,36 +1,36 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "126aec3c19ad3a56faceed442515faf5", "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.info.json": "e3b5da94c5a86db003633570af47d1a9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.info.json": "629fb263cff2e93b7ec67769ebbc75e0", "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.mp4": "a44c49a4adb03fc619ff10a37025c09d", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.nfo": "9ee9c7df9a719d90bc6218f0d06af136", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.nfo": "c4311723a97b1b299342aca9c079ffbc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.info.json": "c572cf9767af2221f4e88b40ab11e7dd", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.info.json": "0a3998c019cc33845be703ca1bb448f9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.mp4": "ca2a1e878e543c73e5d95c983580ea66", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.nfo": "130944ece25592f7dc7d3b395ec1cee5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.nfo": "2d3b121869944eeef9919765b6d10ec3", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.info.json": "4fe8ba1b78f29c9e578d84d3ef6e8caa", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.info.json": "e891c1960d5c29b5e1e73c98ecf2e7f6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.mp4": "1ed7951cb4414e79f78f48176f9fc2c2", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.nfo": "0e10bead605b29b3939de12bcfc68039", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.nfo": "3b507ba7e4482c16ccd5b1a832c205eb", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.info.json": "943a66e92c610b032471cf684fa2cdf0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.info.json": "fe18c65b99ca8942e65d777c9a498577", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.mp4": "fdc41ef1aceab35f2f229962ec4bb66a", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.nfo": "885a2381f1dab6b02cb21176fdf958ce", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.nfo": "27e19fdc5941b870320b68f189e2c2ec", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "4b04325397e3b9ed0ee51f319ce07353", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "3caee440547dd4ed46ec3cdca46978f2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.mp4": "72205b53c6e2d477372e3d5bb3d35fff", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "c2e446ade2fe21cffe3e9e4b79a1ed1f", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "7c0f2a9d38bf617377e474fcb9bf2bc2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "729ca4dba26539e6d8c04443c9aa67ab", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "0b180b38ac673e7e320e9e615974fe41", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.mp4": "bc7ffede56ed138f592d76a3a02681ae", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "8d64a2d4c30483f6e032df52f7911dad", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "1f4dec756555ee345cd9d6489b63e070", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "075f2c2ce8c995195decf755fc980c89", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "5b26edd07c0534d53884d6a42908f8db", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.mp4": "4825194cd6a037b79997cfb2d08ed444", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "0b9391e992b88c4cef32a6892609ef4c", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "f6f704ae3ae0c4055590a147eb425609", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "fc9484dbc42b6fd6149fdcacc235e206", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "aeeb1be477400f34485799112a8121c2", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.mp4": "efd9d3b1f941386c031e5899aa3042ed", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c64a1ce3eade3978ea2aeb0ed72eb5f5", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c6e0d368bfe9d70134e5a2ff2d3dccc6", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.json index 9519f8a3..c0e80ea9 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.json @@ -1,22 +1,22 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "e30d83126c2c6981c936ed894a6f159b", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "044162512a1982b573a0d6f19646801a", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "bebd3dafb168c976a8c817e83a550ce2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.mp4": "72205b53c6e2d477372e3d5bb3d35fff", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "c2e446ade2fe21cffe3e9e4b79a1ed1f", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "7c0f2a9d38bf617377e474fcb9bf2bc2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "d6e1d8a486125f87d04959607e2dc515", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "7543d21dcf2bd220a9ce4cd15f1e1578", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.mp4": "bc7ffede56ed138f592d76a3a02681ae", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "8d64a2d4c30483f6e032df52f7911dad", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "1f4dec756555ee345cd9d6489b63e070", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "5632b6ac9992ee07bf6052e9c87a02c5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "921a343cf11be7cc492678459dbdd926", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.mp4": "4825194cd6a037b79997cfb2d08ed444", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "0b9391e992b88c4cef32a6892609ef4c", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "f6f704ae3ae0c4055590a147eb425609", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "aa1269526f1e384b25d630c7db17860e", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "5757f06de01c68c5104ec7a7b0c6a69b", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.mp4": "efd9d3b1f941386c031e5899aa3042ed", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c64a1ce3eade3978ea2aeb0ed72eb5f5", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c6e0d368bfe9d70134e5a2ff2d3dccc6", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.json index 59dde2b0..ffde50eb 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "126aec3c19ad3a56faceed442515faf5", "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.info.json": "f2ab803ea763a11fb271d7a36b2eb340", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.info.json": "04c2a406e17fb509e849c3d5ccac8b5e", "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.mp4": "a44c49a4adb03fc619ff10a37025c09d", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.nfo": "9ee9c7df9a719d90bc6218f0d06af136", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.nfo": "c4311723a97b1b299342aca9c079ffbc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.info.json": "6e010415351d9d94f64624607d7ad831", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.info.json": "b5960c859c450da1c40fe68951499a8f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.mp4": "ca2a1e878e543c73e5d95c983580ea66", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.nfo": "130944ece25592f7dc7d3b395ec1cee5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.nfo": "2d3b121869944eeef9919765b6d10ec3", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.info.json": "7214c68d8bd6f3c714dee034a5e04fa8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.info.json": "1892550ced3033c5b779324e39ef77ac", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.mp4": "1ed7951cb4414e79f78f48176f9fc2c2", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.nfo": "0e10bead605b29b3939de12bcfc68039", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.nfo": "3b507ba7e4482c16ccd5b1a832c205eb", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.info.json": "d04117d103932f217a50e1a28db42962", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.info.json": "03254329cabbac6a887801d1a3a4a9fc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.mp4": "fdc41ef1aceab35f2f229962ec4bb66a", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.nfo": "885a2381f1dab6b02cb21176fdf958ce", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.nfo": "27e19fdc5941b870320b68f189e2c2ec", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "b8f3acff3cb18657dfa8a37b037c78f1", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "3a613f0724932930ab746bcf9f8bdf42", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.mp4": "72205b53c6e2d477372e3d5bb3d35fff", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "c2e446ade2fe21cffe3e9e4b79a1ed1f", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "7c0f2a9d38bf617377e474fcb9bf2bc2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "e4efb3ea481b6936d188470ace4d6bae", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "a702f2b8e66c348ceb3ec1fd65956024", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.mp4": "bc7ffede56ed138f592d76a3a02681ae", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "8d64a2d4c30483f6e032df52f7911dad", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "1f4dec756555ee345cd9d6489b63e070", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "683d44d82d8854b1bed529196dc091c9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "455e6a6bce2b8630d1a53e11c5554362", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.mp4": "4825194cd6a037b79997cfb2d08ed444", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "0b9391e992b88c4cef32a6892609ef4c", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "f6f704ae3ae0c4055590a147eb425609", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "e33b506e3e441ad05af03826b8ccb758", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "09b731b1e404368cf7ce3fe8197e1de9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.mp4": "efd9d3b1f941386c031e5899aa3042ed", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c64a1ce3eade3978ea2aeb0ed72eb5f5", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c6e0d368bfe9d70134e5a2ff2d3dccc6", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.json index a17cf60e..b62515c8 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.json @@ -1,20 +1,20 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "05539b932348da7e949a63eb71f77efc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "6e712b8c5b40f3622732f087127d75f3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "e780d5e9e678d4aae5b131a5f3603695", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.mp4": "5eafeb7a1c616dfe02c28fc902ce00fb", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "57a07df96fb016c59a292b5cd1d22e10", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "88fee5353ad7eecd96865b34654bbde6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "559c970f2fde6db18d42850b65f038b4", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "3fe91099a510c9dc820a0a7adba98868", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.mp4": "e4a7144efa7039a03ae69460361ae518", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "473a638408eff688582ec8572ba955b2", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "d781b80ef24916acbf3bf181ab32ddea", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "f1315ac907d99c567839ac982b396f51", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "44a703e77c8285e81fec57ed9000bb0c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.mp4": "7566491129c54183e337e83455ab5bda", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "b1070f080d4448a08cbead85540f370d", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "252b3639b4d1686f8c79476943f89439", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "61d42a2f8aa085eae5758206ff853538", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "4a4d542da434d5b3ff8d304f0e077469", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.mp4": "e94af7eed1fe7d2512d042979ca878dd", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "7f90134d9346efe476cc5a1e531f8ecd", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "e7374b766d9ec0599ecf209a0f78c0ba", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.json index fae1c419..80921182 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.json @@ -1,36 +1,36 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "6baee42e9095883c0ed77e6b5829e2c2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "075f2c2ce8c995195decf755fc980c89", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "5b26edd07c0534d53884d6a42908f8db", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.mp4": "5eafeb7a1c616dfe02c28fc902ce00fb", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "57a07df96fb016c59a292b5cd1d22e10", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "88fee5353ad7eecd96865b34654bbde6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "729ca4dba26539e6d8c04443c9aa67ab", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "0b180b38ac673e7e320e9e615974fe41", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.mp4": "e4a7144efa7039a03ae69460361ae518", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "473a638408eff688582ec8572ba955b2", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "d781b80ef24916acbf3bf181ab32ddea", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "4b04325397e3b9ed0ee51f319ce07353", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "3caee440547dd4ed46ec3cdca46978f2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.mp4": "7566491129c54183e337e83455ab5bda", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "b1070f080d4448a08cbead85540f370d", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "252b3639b4d1686f8c79476943f89439", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.info.json": "943a66e92c610b032471cf684fa2cdf0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.info.json": "fe18c65b99ca8942e65d777c9a498577", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.mp4": "0850f53dd2335ba57632128b9bb9d112", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.nfo": "ed439adf2aa5eb4ba741934791ca99e5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.nfo": "4edc04aaea3799ef24bafe6afe4017e5", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.info.json": "4fe8ba1b78f29c9e578d84d3ef6e8caa", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.info.json": "e891c1960d5c29b5e1e73c98ecf2e7f6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.mp4": "0dcd1a017948164d217f0bde59551655", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.nfo": "a59a0fa2cef91dea9c1416f3c1abd3e0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.nfo": "d7d3005d7a8b3feb7465e697cfb4cad4", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.info.json": "c572cf9767af2221f4e88b40ab11e7dd", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.info.json": "0a3998c019cc33845be703ca1bb448f9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.mp4": "6c4b98bd5e32fbffef033f268d8587ae", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.nfo": "d33cdac7ddd02bb601add35e4dce0173", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.nfo": "1832889c5a8010c28914ef5c9845e14f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.info.json": "e3b5da94c5a86db003633570af47d1a9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.info.json": "629fb263cff2e93b7ec67769ebbc75e0", "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.mp4": "386aa9718db383c17aafc9a00d61d0f0", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.nfo": "1c65b21f8bd5a52dab41ae2d297925e3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.nfo": "75a73feabcd828d88768c453ab13718e", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "fc9484dbc42b6fd6149fdcacc235e206", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "aeeb1be477400f34485799112a8121c2", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.mp4": "e94af7eed1fe7d2512d042979ca878dd", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "7f90134d9346efe476cc5a1e531f8ecd", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "e7374b766d9ec0599ecf209a0f78c0ba", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.json index cb97d639..cbff4a38 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.json @@ -1,22 +1,22 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "05539b932348da7e949a63eb71f77efc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "5632b6ac9992ee07bf6052e9c87a02c5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "921a343cf11be7cc492678459dbdd926", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.mp4": "5eafeb7a1c616dfe02c28fc902ce00fb", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "57a07df96fb016c59a292b5cd1d22e10", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "88fee5353ad7eecd96865b34654bbde6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "d6e1d8a486125f87d04959607e2dc515", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "7543d21dcf2bd220a9ce4cd15f1e1578", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.mp4": "e4a7144efa7039a03ae69460361ae518", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "473a638408eff688582ec8572ba955b2", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "d781b80ef24916acbf3bf181ab32ddea", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "044162512a1982b573a0d6f19646801a", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "bebd3dafb168c976a8c817e83a550ce2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.mp4": "7566491129c54183e337e83455ab5bda", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "b1070f080d4448a08cbead85540f370d", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "252b3639b4d1686f8c79476943f89439", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "aa1269526f1e384b25d630c7db17860e", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "5757f06de01c68c5104ec7a7b0c6a69b", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.mp4": "e94af7eed1fe7d2512d042979ca878dd", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "7f90134d9346efe476cc5a1e531f8ecd", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "e7374b766d9ec0599ecf209a0f78c0ba", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.json index 993278e1..4e30603b 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "6baee42e9095883c0ed77e6b5829e2c2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "683d44d82d8854b1bed529196dc091c9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "455e6a6bce2b8630d1a53e11c5554362", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.mp4": "5eafeb7a1c616dfe02c28fc902ce00fb", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "57a07df96fb016c59a292b5cd1d22e10", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "88fee5353ad7eecd96865b34654bbde6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "e4efb3ea481b6936d188470ace4d6bae", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "a702f2b8e66c348ceb3ec1fd65956024", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.mp4": "e4a7144efa7039a03ae69460361ae518", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "473a638408eff688582ec8572ba955b2", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "d781b80ef24916acbf3bf181ab32ddea", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "b8f3acff3cb18657dfa8a37b037c78f1", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "3a613f0724932930ab746bcf9f8bdf42", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.mp4": "7566491129c54183e337e83455ab5bda", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "b1070f080d4448a08cbead85540f370d", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "252b3639b4d1686f8c79476943f89439", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.info.json": "d04117d103932f217a50e1a28db42962", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.info.json": "03254329cabbac6a887801d1a3a4a9fc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.mp4": "0850f53dd2335ba57632128b9bb9d112", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.nfo": "ed439adf2aa5eb4ba741934791ca99e5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.nfo": "4edc04aaea3799ef24bafe6afe4017e5", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.info.json": "7214c68d8bd6f3c714dee034a5e04fa8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.info.json": "1892550ced3033c5b779324e39ef77ac", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.mp4": "0dcd1a017948164d217f0bde59551655", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.nfo": "a59a0fa2cef91dea9c1416f3c1abd3e0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.nfo": "d7d3005d7a8b3feb7465e697cfb4cad4", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.info.json": "6e010415351d9d94f64624607d7ad831", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.info.json": "b5960c859c450da1c40fe68951499a8f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.mp4": "6c4b98bd5e32fbffef033f268d8587ae", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.nfo": "d33cdac7ddd02bb601add35e4dce0173", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.nfo": "1832889c5a8010c28914ef5c9845e14f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.info.json": "f2ab803ea763a11fb271d7a36b2eb340", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.info.json": "04c2a406e17fb509e849c3d5ccac8b5e", "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.mp4": "386aa9718db383c17aafc9a00d61d0f0", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.nfo": "1c65b21f8bd5a52dab41ae2d297925e3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.nfo": "75a73feabcd828d88768c453ab13718e", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "e33b506e3e441ad05af03826b8ccb758", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "09b731b1e404368cf7ce3fe8197e1de9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.mp4": "e94af7eed1fe7d2512d042979ca878dd", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "7f90134d9346efe476cc5a1e531f8ecd", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "e7374b766d9ec0599ecf209a0f78c0ba", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.json index 73eae87b..e42787c7 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.json @@ -1,20 +1,20 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "5269b5e9e4fad7b63b6fdb3fef477b1e", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "f1315ac907d99c567839ac982b396f51", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "44a703e77c8285e81fec57ed9000bb0c", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.mp4": "776af67f6507b05700ff573ef9560aba", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "f618eb52397bd44f7efa2ee7dae5da74", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "4ba0e01c1e7295952c3f5e6b9b251d7d", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "559c970f2fde6db18d42850b65f038b4", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "3fe91099a510c9dc820a0a7adba98868", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.mp4": "d83e7a55c37f8a5f3d18c4578bfc65af", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "da44a5409d2010d47918864aefe2e5bc", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "db9196b729c7b2cd26e3f0fc649b39f0", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "6e712b8c5b40f3622732f087127d75f3", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "e780d5e9e678d4aae5b131a5f3603695", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.mp4": "c1e00927a15da4afa48cdcb514610156", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "0a08b970bfb64345ff96a8b8447479a9", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "ba4a387d9462f416ba176c31c1c55316", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "61d42a2f8aa085eae5758206ff853538", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "4a4d542da434d5b3ff8d304f0e077469", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.mp4": "e1955b69689826e841c9b034209b7437", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "f329f4258d783fc36baedf35c0e540d4", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "93dd5c4c493422f9a60e61a6b965b39a", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.json index d1015262..0ece0c45 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.json @@ -1,36 +1,36 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "5c7b84a74e98bbbc6f5897742ba6dfec", "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.info.json": "e3b5da94c5a86db003633570af47d1a9", + "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.info.json": "629fb263cff2e93b7ec67769ebbc75e0", "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.mp4": "201f4f7a4cfb745b8befe75af83ef289", - "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.nfo": "d32e8ce5be43532924d42ca50f47c36c", + "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.nfo": "2742789534cd28d2b2c498df19b01070", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.info.json": "c572cf9767af2221f4e88b40ab11e7dd", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.info.json": "0a3998c019cc33845be703ca1bb448f9", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.mp4": "3acc0b8ad17afdf9396a3f7600307899", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.nfo": "de7ded8e978a48a48edfe7d4b9644ce9", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.nfo": "a6c28bd2c7dece677bdfe342e1691a34", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.info.json": "4fe8ba1b78f29c9e578d84d3ef6e8caa", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.info.json": "e891c1960d5c29b5e1e73c98ecf2e7f6", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.mp4": "58fbeaa3e51e59ef3405464ab3bc46f1", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.nfo": "eec44bf9043055fc73041bb2e103ed53", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.nfo": "7a3a3d341795ab8b8f1faa5499ebe55c", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.info.json": "943a66e92c610b032471cf684fa2cdf0", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.info.json": "fe18c65b99ca8942e65d777c9a498577", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.mp4": "aa76dff1662eda9596791ca5076a8385", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.nfo": "6fe63a62e84f5e4c875110af87cc5488", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.nfo": "0d38c0fe0b0bbbfd3fe78cb71e9b65f4", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "4b04325397e3b9ed0ee51f319ce07353", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "3caee440547dd4ed46ec3cdca46978f2", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.mp4": "776af67f6507b05700ff573ef9560aba", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "f618eb52397bd44f7efa2ee7dae5da74", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "4ba0e01c1e7295952c3f5e6b9b251d7d", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "729ca4dba26539e6d8c04443c9aa67ab", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "0b180b38ac673e7e320e9e615974fe41", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.mp4": "d83e7a55c37f8a5f3d18c4578bfc65af", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "da44a5409d2010d47918864aefe2e5bc", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "db9196b729c7b2cd26e3f0fc649b39f0", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "075f2c2ce8c995195decf755fc980c89", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "5b26edd07c0534d53884d6a42908f8db", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.mp4": "c1e00927a15da4afa48cdcb514610156", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "0a08b970bfb64345ff96a8b8447479a9", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "ba4a387d9462f416ba176c31c1c55316", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "fc9484dbc42b6fd6149fdcacc235e206", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "aeeb1be477400f34485799112a8121c2", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.mp4": "e1955b69689826e841c9b034209b7437", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "f329f4258d783fc36baedf35c0e540d4", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "93dd5c4c493422f9a60e61a6b965b39a", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.json index a912154b..c66cb322 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.json @@ -1,22 +1,22 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "5269b5e9e4fad7b63b6fdb3fef477b1e", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "044162512a1982b573a0d6f19646801a", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "bebd3dafb168c976a8c817e83a550ce2", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.mp4": "776af67f6507b05700ff573ef9560aba", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "f618eb52397bd44f7efa2ee7dae5da74", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "4ba0e01c1e7295952c3f5e6b9b251d7d", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "d6e1d8a486125f87d04959607e2dc515", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "7543d21dcf2bd220a9ce4cd15f1e1578", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.mp4": "d83e7a55c37f8a5f3d18c4578bfc65af", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "da44a5409d2010d47918864aefe2e5bc", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "db9196b729c7b2cd26e3f0fc649b39f0", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "5632b6ac9992ee07bf6052e9c87a02c5", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "921a343cf11be7cc492678459dbdd926", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.mp4": "c1e00927a15da4afa48cdcb514610156", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "0a08b970bfb64345ff96a8b8447479a9", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "ba4a387d9462f416ba176c31c1c55316", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "aa1269526f1e384b25d630c7db17860e", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "5757f06de01c68c5104ec7a7b0c6a69b", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.mp4": "e1955b69689826e841c9b034209b7437", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "f329f4258d783fc36baedf35c0e540d4", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "93dd5c4c493422f9a60e61a6b965b39a", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.json index 53c9c924..9a3bf3a6 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "5c7b84a74e98bbbc6f5897742ba6dfec", "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.info.json": "f2ab803ea763a11fb271d7a36b2eb340", + "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.info.json": "04c2a406e17fb509e849c3d5ccac8b5e", "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.mp4": "201f4f7a4cfb745b8befe75af83ef289", - "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.nfo": "d32e8ce5be43532924d42ca50f47c36c", + "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.nfo": "2742789534cd28d2b2c498df19b01070", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.info.json": "6e010415351d9d94f64624607d7ad831", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.info.json": "b5960c859c450da1c40fe68951499a8f", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.mp4": "3acc0b8ad17afdf9396a3f7600307899", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.nfo": "de7ded8e978a48a48edfe7d4b9644ce9", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.nfo": "a6c28bd2c7dece677bdfe342e1691a34", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.info.json": "7214c68d8bd6f3c714dee034a5e04fa8", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.info.json": "1892550ced3033c5b779324e39ef77ac", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.mp4": "58fbeaa3e51e59ef3405464ab3bc46f1", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.nfo": "eec44bf9043055fc73041bb2e103ed53", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.nfo": "7a3a3d341795ab8b8f1faa5499ebe55c", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.info.json": "d04117d103932f217a50e1a28db42962", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.info.json": "03254329cabbac6a887801d1a3a4a9fc", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.mp4": "aa76dff1662eda9596791ca5076a8385", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.nfo": "6fe63a62e84f5e4c875110af87cc5488", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.nfo": "0d38c0fe0b0bbbfd3fe78cb71e9b65f4", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "b8f3acff3cb18657dfa8a37b037c78f1", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "3a613f0724932930ab746bcf9f8bdf42", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.mp4": "776af67f6507b05700ff573ef9560aba", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "f618eb52397bd44f7efa2ee7dae5da74", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "4ba0e01c1e7295952c3f5e6b9b251d7d", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "e4efb3ea481b6936d188470ace4d6bae", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "a702f2b8e66c348ceb3ec1fd65956024", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.mp4": "d83e7a55c37f8a5f3d18c4578bfc65af", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "da44a5409d2010d47918864aefe2e5bc", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "db9196b729c7b2cd26e3f0fc649b39f0", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "683d44d82d8854b1bed529196dc091c9", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "455e6a6bce2b8630d1a53e11c5554362", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.mp4": "c1e00927a15da4afa48cdcb514610156", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "0a08b970bfb64345ff96a8b8447479a9", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "ba4a387d9462f416ba176c31c1c55316", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "e33b506e3e441ad05af03826b8ccb758", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "09b731b1e404368cf7ce3fe8197e1de9", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.mp4": "e1955b69689826e841c9b034209b7437", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "f329f4258d783fc36baedf35c0e540d4", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "93dd5c4c493422f9a60e61a6b965b39a", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.json index e536e91b..201488ea 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.json @@ -1,21 +1,21 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "4e5ef7394c029e7fe230f82dfe134e4c", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.info.json": "1a658e535689ba3312a79251d0603abb", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.info.json": "eaa3f351703b80239f15c03c5b727f31", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.mp4": "838968aa64d56f99166bc2867879da0d", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.nfo": "9a8129ac68f9e1b9a1e766e86b299ea7", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.nfo": "2a3d9b51221a541fefc29eebffe47cd4", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.info.json": "c030e9ec6c67e24845a1f80e60c49c2a", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.info.json": "e8acab0ed714ef96a6d1463154996a5b", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.mp4": "1109271e45e1c7ce0652b4e8e567d6bb", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.nfo": "a35880dc1d39def398a142ffc3bc411b", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.nfo": "ec57b2c78058e18cdc015813e8a14b9d", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.info.json": "2573381bab5b0c84d39def520326ff01", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.info.json": "893ed940046b8a650af0072029292899", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.mp4": "57644342b3e0f8697328fff415fd9bd6", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.nfo": "9b724eed832dd7c96e37bc1cefca5d3f", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.nfo": "cd919caf88b0eed99fd2a595c1afa6b1", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.info.json": "c68ed4baf5360c98bda46de2c3129e17", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.info.json": "001f7b61786b4ecb207cdf45fc6838e8", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.mp4": "bae6a68cab905f3d67fe95de2c0b11b4", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.nfo": "50e0837f2083a35006c61b5f5ebb79e4", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.nfo": "7c4b28456fe5d398b7dad966eb194421", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.json index cd85de16..b9bc0ef0 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.json @@ -1,23 +1,23 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "4e5ef7394c029e7fe230f82dfe134e4c", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.info.json": "9111eb8be07d8fce5cab4257a049bd16", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.info.json": "23ea4fc60be000f224c60911133445c4", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.mp4": "838968aa64d56f99166bc2867879da0d", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.nfo": "9a8129ac68f9e1b9a1e766e86b299ea7", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.nfo": "2a3d9b51221a541fefc29eebffe47cd4", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.info.json": "6d8e82812ee2d93109372468802f625b", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.info.json": "473f212008eabbff7614e092e39c0e83", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.mp4": "1109271e45e1c7ce0652b4e8e567d6bb", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.nfo": "a35880dc1d39def398a142ffc3bc411b", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.nfo": "ec57b2c78058e18cdc015813e8a14b9d", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.info.json": "657cfbc1acf4e35060f1e8dc53910dad", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.info.json": "2ee2edf10085b2aa3a3a1cd1850cfab1", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.mp4": "57644342b3e0f8697328fff415fd9bd6", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.nfo": "9b724eed832dd7c96e37bc1cefca5d3f", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.nfo": "cd919caf88b0eed99fd2a595c1afa6b1", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.info.json": "60f7a22320435d0f3930ea9d8f0df6f0", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.info.json": "37c636ccbbbde5211290aa40e86c95ca", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.mp4": "bae6a68cab905f3d67fe95de2c0b11b4", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.nfo": "50e0837f2083a35006c61b5f5ebb79e4", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.nfo": "7c4b28456fe5d398b7dad966eb194421", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.json index 1fb4cf8f..474fa3cc 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "c7c2427315924db344d4659a60c59bc9", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.info.json": "b3d16c01cdf9680ebe60808f2f500ee9", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.info.json": "28de4c86761f962a274f877676273f42", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.mp4": "3abb120022201c52f187795e5382e7d8", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.nfo": "6eba1138f978d7e0e032a8ff11a78a20", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.nfo": "7d8f03bdcd8ee66fd1578a86f20365cc", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "255dd9d2e566d4951c228c333c88de34", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "9ec937cc60b7e8fef0a6741033d539e3", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.mp4": "f955993d7c3bd19a3f1974f9ca8fa8d5", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "ec8d3183eb5cde222f50d61a8cfebc0c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "7f71bd60012d850ece38fa644eeddc5e", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.info.json": "9ca487486489a07f45a3671833b46200", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.info.json": "9cc088e0502239894663985c73cbb8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.mp4": "65278e617ec6faae1fa5e1cc150b40bc", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.nfo": "014128496d2665bd25cbcd1b58057201", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.nfo": "39996f43e9761247dce614247f99c808", "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.info.json": "3c5529c60a981d3004dec4be0dd44386", + "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.info.json": "376f0187fb4be474af0634cab27a94a3", "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.mp4": "ae68c2c53268d732849149196e531935", - "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.nfo": "3054d8425b5c427641f2b6d041ed60f6", + "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.nfo": "cae377877c966dad492eaa3f224b86ba", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.info.json": "055914a06fdd556c4b8a7d9ba6868b5c", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.info.json": "753590baac8c807337d7be2c6a1bee17", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.mp4": "838968aa64d56f99166bc2867879da0d", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.nfo": "0bff78c767cc262ecd417de4e5dc6d87", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.nfo": "974bb83bd43b9579ab1716f66589ccc1", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.info.json": "12e7c2ce72158a89a185b1860c7dc7d2", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.info.json": "eafd4c6ae0be81da688c25c305de550a", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.mp4": "1109271e45e1c7ce0652b4e8e567d6bb", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.nfo": "44b60f61267af80173b12bf6f6da2a08", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.nfo": "b12dcb09ffad7f23f21d350e1f60f128", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.info.json": "65473bcb02396628d81ab3c51dac6b05", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.info.json": "776544b88a36a0ed7842ad34b462947c", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.mp4": "57644342b3e0f8697328fff415fd9bd6", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.nfo": "99b0bceefaa906c65eb8ad692dee99bf", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.nfo": "e6fd0fc3e95b77c595d1a77c2060fd98", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.info.json": "406629e815a560ee1078a2d2f0e2eabc", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.info.json": "fac6137b97e4db79621f55694fd5ed07", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.mp4": "bae6a68cab905f3d67fe95de2c0b11b4", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.nfo": "b4d3075e68a25f9229537ddf3427fd53", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.nfo": "23386ea27c1e64afcecdb235acb81b79", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.json index cff1d95b..20b995d6 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.json @@ -1,40 +1,40 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "c7c2427315924db344d4659a60c59bc9", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.info.json": "53e336dc82cf7a65fc62b0783c581059", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.info.json": "d699b2e091b389dd470a8d6719b87d00", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.mp4": "3abb120022201c52f187795e5382e7d8", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.nfo": "6eba1138f978d7e0e032a8ff11a78a20", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.nfo": "7d8f03bdcd8ee66fd1578a86f20365cc", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "88f6e9dd1573dbd3388432c9a04a0e09", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "8318cac15f71dfaa373ebb8470288f82", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.mp4": "f955993d7c3bd19a3f1974f9ca8fa8d5", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "ec8d3183eb5cde222f50d61a8cfebc0c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "7f71bd60012d850ece38fa644eeddc5e", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.info.json": "8310c540da3f4d8449d93b849f63dbdd", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.info.json": "d7e89687663d7251635f6011acf76ca2", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.mp4": "65278e617ec6faae1fa5e1cc150b40bc", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.nfo": "014128496d2665bd25cbcd1b58057201", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.nfo": "39996f43e9761247dce614247f99c808", "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.info.json": "231bcbd664181d6c59f8b4d9eefec368", + "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.info.json": "d27c625857e68c56ffa89a199d21c1a2", "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.mp4": "ae68c2c53268d732849149196e531935", - "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.nfo": "3054d8425b5c427641f2b6d041ed60f6", + "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.nfo": "cae377877c966dad492eaa3f224b86ba", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.info.json": "46447ae5b21700bf7e71cf9674a50287", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.info.json": "eb87faf31e9521949e1d46caa9bdaeba", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.mp4": "838968aa64d56f99166bc2867879da0d", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.nfo": "0bff78c767cc262ecd417de4e5dc6d87", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.nfo": "974bb83bd43b9579ab1716f66589ccc1", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.info.json": "32d815d4e3a6ed68514ea871cb684359", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.info.json": "f9b1724b674ce5fe90ca3da72b9dce50", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.mp4": "1109271e45e1c7ce0652b4e8e567d6bb", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.nfo": "44b60f61267af80173b12bf6f6da2a08", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.nfo": "b12dcb09ffad7f23f21d350e1f60f128", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.info.json": "995e67fcd1b2615d8c594cf8e65e6d56", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.info.json": "c21e448042a9ce3f81651726f8ac8586", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.mp4": "57644342b3e0f8697328fff415fd9bd6", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.nfo": "99b0bceefaa906c65eb8ad692dee99bf", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.nfo": "e6fd0fc3e95b77c595d1a77c2060fd98", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.info.json": "7bbd18cae95324d002f8a1fe68ceadf0", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.info.json": "1ff4454ef2e877c2bb857da26aa59a0d", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.mp4": "bae6a68cab905f3d67fe95de2c0b11b4", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.nfo": "b4d3075e68a25f9229537ddf3427fd53", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.nfo": "23386ea27c1e64afcecdb235acb81b79", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.json index e91bc46c..2bb3afa5 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.json @@ -1,21 +1,21 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "809885e6c29bba06215b840516628090", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.info.json": "c68ed4baf5360c98bda46de2c3129e17", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.info.json": "001f7b61786b4ecb207cdf45fc6838e8", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.mp4": "82258d5ed3062fc8fd986ec9bedec888", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.nfo": "d98e09fe2cdc240f71bfce032de2718d", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.nfo": "ddf2763f976aaa79199bddbfd3b66501", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.info.json": "2573381bab5b0c84d39def520326ff01", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.info.json": "893ed940046b8a650af0072029292899", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.mp4": "d3c9d4918af48a3da67baabab3535e20", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.nfo": "0701fef77bec0832582d7ba9ef27673d", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.nfo": "cda58b9d5b7ee05d5e4d5144ebfe0f94", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.info.json": "c030e9ec6c67e24845a1f80e60c49c2a", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.info.json": "e8acab0ed714ef96a6d1463154996a5b", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.mp4": "a464e06a6679b3de0dd332b0022aa7bb", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.nfo": "89b788b16e3cf45a20c6a5fcfafa130c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.nfo": "4d5775492f2731cb5dc04a84ebcb029d", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.info.json": "1a658e535689ba3312a79251d0603abb", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.info.json": "eaa3f351703b80239f15c03c5b727f31", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.mp4": "555fdada3339f0d359656478d9d171d2", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.nfo": "93f63d6bf1d7dcc9c6cdc674164affeb", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.nfo": "2980b224863465a8b8a465c9d381d1f4", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.json index 6b9e3948..79ada9c0 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.json @@ -1,23 +1,23 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "809885e6c29bba06215b840516628090", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.info.json": "60f7a22320435d0f3930ea9d8f0df6f0", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.info.json": "37c636ccbbbde5211290aa40e86c95ca", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.mp4": "82258d5ed3062fc8fd986ec9bedec888", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.nfo": "d98e09fe2cdc240f71bfce032de2718d", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.nfo": "ddf2763f976aaa79199bddbfd3b66501", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.info.json": "657cfbc1acf4e35060f1e8dc53910dad", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.info.json": "2ee2edf10085b2aa3a3a1cd1850cfab1", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.mp4": "d3c9d4918af48a3da67baabab3535e20", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.nfo": "0701fef77bec0832582d7ba9ef27673d", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.nfo": "cda58b9d5b7ee05d5e4d5144ebfe0f94", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.info.json": "6d8e82812ee2d93109372468802f625b", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.info.json": "473f212008eabbff7614e092e39c0e83", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.mp4": "a464e06a6679b3de0dd332b0022aa7bb", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.nfo": "89b788b16e3cf45a20c6a5fcfafa130c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.nfo": "4d5775492f2731cb5dc04a84ebcb029d", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.info.json": "9111eb8be07d8fce5cab4257a049bd16", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.info.json": "23ea4fc60be000f224c60911133445c4", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.mp4": "555fdada3339f0d359656478d9d171d2", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.nfo": "93f63d6bf1d7dcc9c6cdc674164affeb", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.nfo": "2980b224863465a8b8a465c9d381d1f4", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.json index 573ef879..44bc8efd 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "7331c3a7cc0b43cd547b82af4ec35a3f", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.info.json": "3c5529c60a981d3004dec4be0dd44386", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.info.json": "376f0187fb4be474af0634cab27a94a3", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.mp4": "6ba89f1f4436cc71bbe572bcf5a4c077", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.nfo": "a20944ff3b93d969fe24f8e8b36fdbe3", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.nfo": "42ad110e3f608de3edb94735631d39a7", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.info.json": "9ca487486489a07f45a3671833b46200", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.info.json": "9cc088e0502239894663985c73cbb8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.mp4": "86158254bbe1cd4de61f2f03d63c4afc", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.nfo": "1f06a876e72883b43c1b31eb70dba10c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.nfo": "ea4dee97b5bb9e49cb72f0942f851feb", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "255dd9d2e566d4951c228c333c88de34", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "9ec937cc60b7e8fef0a6741033d539e3", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.mp4": "f955993d7c3bd19a3f1974f9ca8fa8d5", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "ec8d3183eb5cde222f50d61a8cfebc0c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "7f71bd60012d850ece38fa644eeddc5e", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.info.json": "b3d16c01cdf9680ebe60808f2f500ee9", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.info.json": "28de4c86761f962a274f877676273f42", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.mp4": "68380cbe2709d869c965a8aee21217f9", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.nfo": "01e3dae366e239640e7f27e3d40893c4", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.nfo": "c487f013b8d5adc399a793bc803b898f", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.info.json": "406629e815a560ee1078a2d2f0e2eabc", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.info.json": "fac6137b97e4db79621f55694fd5ed07", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.mp4": "82258d5ed3062fc8fd986ec9bedec888", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.nfo": "19bacafcb4e9125bec9f804a6dc4318e", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.nfo": "4eedc1c0e99858530e6228001d024766", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.info.json": "65473bcb02396628d81ab3c51dac6b05", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.info.json": "776544b88a36a0ed7842ad34b462947c", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.mp4": "d3c9d4918af48a3da67baabab3535e20", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.nfo": "ccdea0447b933e4e3affe6ec5aa45aae", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.nfo": "cc1541a65508fcbfd9f024042cb6b6ce", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.info.json": "12e7c2ce72158a89a185b1860c7dc7d2", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.info.json": "eafd4c6ae0be81da688c25c305de550a", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.mp4": "a464e06a6679b3de0dd332b0022aa7bb", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.nfo": "5cb40adc85b43314bf6458f34e77e61b", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.nfo": "d5fa573faf1d29c367117917417df62c", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.info.json": "055914a06fdd556c4b8a7d9ba6868b5c", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.info.json": "753590baac8c807337d7be2c6a1bee17", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.mp4": "555fdada3339f0d359656478d9d171d2", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.nfo": "237e0ff3ec6927277f7e7a4f98c51fc7", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.nfo": "6c40cd5d13c8d088e57906e809a591f8", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.json index c58a397a..09b810fd 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.json @@ -1,40 +1,40 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "7331c3a7cc0b43cd547b82af4ec35a3f", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.info.json": "231bcbd664181d6c59f8b4d9eefec368", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.info.json": "d27c625857e68c56ffa89a199d21c1a2", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.mp4": "6ba89f1f4436cc71bbe572bcf5a4c077", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.nfo": "a20944ff3b93d969fe24f8e8b36fdbe3", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.nfo": "42ad110e3f608de3edb94735631d39a7", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.info.json": "8310c540da3f4d8449d93b849f63dbdd", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.info.json": "d7e89687663d7251635f6011acf76ca2", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.mp4": "86158254bbe1cd4de61f2f03d63c4afc", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.nfo": "1f06a876e72883b43c1b31eb70dba10c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.nfo": "ea4dee97b5bb9e49cb72f0942f851feb", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "88f6e9dd1573dbd3388432c9a04a0e09", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "8318cac15f71dfaa373ebb8470288f82", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.mp4": "f955993d7c3bd19a3f1974f9ca8fa8d5", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "ec8d3183eb5cde222f50d61a8cfebc0c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "7f71bd60012d850ece38fa644eeddc5e", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.info.json": "53e336dc82cf7a65fc62b0783c581059", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.info.json": "d699b2e091b389dd470a8d6719b87d00", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.mp4": "68380cbe2709d869c965a8aee21217f9", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.nfo": "01e3dae366e239640e7f27e3d40893c4", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.nfo": "c487f013b8d5adc399a793bc803b898f", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.info.json": "7bbd18cae95324d002f8a1fe68ceadf0", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.info.json": "1ff4454ef2e877c2bb857da26aa59a0d", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.mp4": "82258d5ed3062fc8fd986ec9bedec888", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.nfo": "19bacafcb4e9125bec9f804a6dc4318e", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.nfo": "4eedc1c0e99858530e6228001d024766", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.info.json": "995e67fcd1b2615d8c594cf8e65e6d56", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.info.json": "c21e448042a9ce3f81651726f8ac8586", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.mp4": "d3c9d4918af48a3da67baabab3535e20", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.nfo": "ccdea0447b933e4e3affe6ec5aa45aae", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.nfo": "cc1541a65508fcbfd9f024042cb6b6ce", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.info.json": "32d815d4e3a6ed68514ea871cb684359", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.info.json": "f9b1724b674ce5fe90ca3da72b9dce50", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.mp4": "a464e06a6679b3de0dd332b0022aa7bb", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.nfo": "5cb40adc85b43314bf6458f34e77e61b", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.nfo": "d5fa573faf1d29c367117917417df62c", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.info.json": "46447ae5b21700bf7e71cf9674a50287", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.info.json": "eb87faf31e9521949e1d46caa9bdaeba", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.mp4": "555fdada3339f0d359656478d9d171d2", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.nfo": "237e0ff3ec6927277f7e7a4f98c51fc7", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.nfo": "6c40cd5d13c8d088e57906e809a591f8", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.json index d7ad2fb8..b5e89d16 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.json @@ -1,21 +1,21 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "ede1deeba072bae50f7f7039deca0543", "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.info.json": "c68ed4baf5360c98bda46de2c3129e17", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.info.json": "001f7b61786b4ecb207cdf45fc6838e8", "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.mp4": "2ed76a1c5ca5aefc99cafbe45beb7968", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.nfo": "a36e38ad59df8bded30088536d84ebc4", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.nfo": "043c6de15ab09f32e64414d1f4a8a89c", "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.info.json": "2573381bab5b0c84d39def520326ff01", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.info.json": "893ed940046b8a650af0072029292899", "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.mp4": "e98fdf4ba39fa60c6349152c65352df7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.nfo": "a291af8fe16b1f299ac2300750328f53", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.nfo": "4fb018858502fe2c7a0d3dcb89145a8d", "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.info.json": "c030e9ec6c67e24845a1f80e60c49c2a", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.info.json": "e8acab0ed714ef96a6d1463154996a5b", "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.mp4": "1dd828f81bcb808ad91f6d1da8cce235", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.nfo": "edadbfb231f45c802411cc4455f7a2bf", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.nfo": "6ac2ee3bd87b453d56bd90b42bbf52a0", "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.info.json": "1a658e535689ba3312a79251d0603abb", + "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.info.json": "eaa3f351703b80239f15c03c5b727f31", "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.mp4": "052709f404d1ec6a33c8a0b52e133c83", - "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.nfo": "08aec54e062efb6805c0f5c58b630131", + "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.nfo": "d54ba1888f0083f8de6f401e399ad379", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.json index 4e320bd2..18df52ea 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.json @@ -1,23 +1,23 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "ede1deeba072bae50f7f7039deca0543", "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.info.json": "60f7a22320435d0f3930ea9d8f0df6f0", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.info.json": "37c636ccbbbde5211290aa40e86c95ca", "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.mp4": "2ed76a1c5ca5aefc99cafbe45beb7968", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.nfo": "a36e38ad59df8bded30088536d84ebc4", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.nfo": "043c6de15ab09f32e64414d1f4a8a89c", "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.info.json": "657cfbc1acf4e35060f1e8dc53910dad", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.info.json": "2ee2edf10085b2aa3a3a1cd1850cfab1", "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.mp4": "e98fdf4ba39fa60c6349152c65352df7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.nfo": "a291af8fe16b1f299ac2300750328f53", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.nfo": "4fb018858502fe2c7a0d3dcb89145a8d", "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.info.json": "6d8e82812ee2d93109372468802f625b", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.info.json": "473f212008eabbff7614e092e39c0e83", "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.mp4": "1dd828f81bcb808ad91f6d1da8cce235", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.nfo": "edadbfb231f45c802411cc4455f7a2bf", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.nfo": "6ac2ee3bd87b453d56bd90b42bbf52a0", "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.info.json": "9111eb8be07d8fce5cab4257a049bd16", + "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.info.json": "23ea4fc60be000f224c60911133445c4", "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.mp4": "052709f404d1ec6a33c8a0b52e133c83", - "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.nfo": "08aec54e062efb6805c0f5c58b630131", + "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.nfo": "d54ba1888f0083f8de6f401e399ad379", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.json index bfb31e9b..41295381 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "9b9e26ff3d036f450501bf5adb979aeb", "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.info.json": "3c5529c60a981d3004dec4be0dd44386", + "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.info.json": "376f0187fb4be474af0634cab27a94a3", "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.mp4": "98da10d4278b3b4fbc3a52a57ce8faea", - "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.nfo": "1b62ea9dfd8c7c72450e08be11d5f475", + "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.nfo": "9ceac835c0166bf4f7354106379e6d17", "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.info.json": "9ca487486489a07f45a3671833b46200", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.info.json": "9cc088e0502239894663985c73cbb8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.mp4": "2d964ed943027358d440b2c6faf00f56", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.nfo": "a25eccc9148803dd3e7ef562454525ac", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.nfo": "35f15e5437cae813095fe2ca3bd2ca18", "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.info.json": "255dd9d2e566d4951c228c333c88de34", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.info.json": "9ec937cc60b7e8fef0a6741033d539e3", "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.mp4": "9a1a761fafc7213e30aedf7ba01e192e", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.nfo": "bade06f775dbc7dcd78a05401787568f", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.nfo": "9aa69e4c86bb282ac57b2024ec2fbd34", "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.info.json": "b3d16c01cdf9680ebe60808f2f500ee9", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.info.json": "28de4c86761f962a274f877676273f42", "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.mp4": "2d09a282c18e12c7b435ec9b0fcd83ba", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.nfo": "519a116ad532dcb5766341ba3e0561c7", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.nfo": "709533b6b8f501196db0d98dfe2b2b16", "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.info.json": "406629e815a560ee1078a2d2f0e2eabc", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.info.json": "fac6137b97e4db79621f55694fd5ed07", "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.mp4": "2ed76a1c5ca5aefc99cafbe45beb7968", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.nfo": "d11af1164318f6b808e3be82dd7d8de5", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.nfo": "05f34cd0e6be4b09ea96134faec892f6", "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.info.json": "65473bcb02396628d81ab3c51dac6b05", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.info.json": "776544b88a36a0ed7842ad34b462947c", "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.mp4": "e98fdf4ba39fa60c6349152c65352df7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.nfo": "95642748ab236e4ceaf5e99498cf9370", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.nfo": "54b4f84daf25626703f7b3a36b0dea49", "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.info.json": "12e7c2ce72158a89a185b1860c7dc7d2", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.info.json": "eafd4c6ae0be81da688c25c305de550a", "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.mp4": "1dd828f81bcb808ad91f6d1da8cce235", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.nfo": "48943588e41681e2d6991cca776ef662", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.nfo": "3d2644161e57b94cfac5e95732864cc3", "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.info.json": "055914a06fdd556c4b8a7d9ba6868b5c", + "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.info.json": "753590baac8c807337d7be2c6a1bee17", "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.mp4": "052709f404d1ec6a33c8a0b52e133c83", - "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.nfo": "8b5963cf45877c576de8f533171ebaf2", + "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.nfo": "fd91adb2089d0fcdbb2e568a10ac880e", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.json index 830154d8..20ac9c05 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.json @@ -1,40 +1,40 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "9b9e26ff3d036f450501bf5adb979aeb", "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.info.json": "231bcbd664181d6c59f8b4d9eefec368", + "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.info.json": "d27c625857e68c56ffa89a199d21c1a2", "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.mp4": "98da10d4278b3b4fbc3a52a57ce8faea", - "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.nfo": "1b62ea9dfd8c7c72450e08be11d5f475", + "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.nfo": "9ceac835c0166bf4f7354106379e6d17", "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.info.json": "8310c540da3f4d8449d93b849f63dbdd", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.info.json": "d7e89687663d7251635f6011acf76ca2", "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.mp4": "2d964ed943027358d440b2c6faf00f56", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.nfo": "a25eccc9148803dd3e7ef562454525ac", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.nfo": "35f15e5437cae813095fe2ca3bd2ca18", "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.info.json": "88f6e9dd1573dbd3388432c9a04a0e09", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.info.json": "8318cac15f71dfaa373ebb8470288f82", "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.mp4": "9a1a761fafc7213e30aedf7ba01e192e", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.nfo": "bade06f775dbc7dcd78a05401787568f", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.nfo": "9aa69e4c86bb282ac57b2024ec2fbd34", "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.info.json": "53e336dc82cf7a65fc62b0783c581059", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.info.json": "d699b2e091b389dd470a8d6719b87d00", "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.mp4": "2d09a282c18e12c7b435ec9b0fcd83ba", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.nfo": "519a116ad532dcb5766341ba3e0561c7", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.nfo": "709533b6b8f501196db0d98dfe2b2b16", "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.info.json": "7bbd18cae95324d002f8a1fe68ceadf0", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.info.json": "1ff4454ef2e877c2bb857da26aa59a0d", "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.mp4": "2ed76a1c5ca5aefc99cafbe45beb7968", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.nfo": "d11af1164318f6b808e3be82dd7d8de5", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.nfo": "05f34cd0e6be4b09ea96134faec892f6", "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.info.json": "995e67fcd1b2615d8c594cf8e65e6d56", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.info.json": "c21e448042a9ce3f81651726f8ac8586", "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.mp4": "e98fdf4ba39fa60c6349152c65352df7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.nfo": "95642748ab236e4ceaf5e99498cf9370", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.nfo": "54b4f84daf25626703f7b3a36b0dea49", "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.info.json": "32d815d4e3a6ed68514ea871cb684359", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.info.json": "f9b1724b674ce5fe90ca3da72b9dce50", "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.mp4": "1dd828f81bcb808ad91f6d1da8cce235", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.nfo": "48943588e41681e2d6991cca776ef662", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.nfo": "3d2644161e57b94cfac5e95732864cc3", "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.info.json": "46447ae5b21700bf7e71cf9674a50287", + "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.info.json": "eb87faf31e9521949e1d46caa9bdaeba", "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.mp4": "052709f404d1ec6a33c8a0b52e133c83", - "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.nfo": "8b5963cf45877c576de8f533171ebaf2", + "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.nfo": "fd91adb2089d0fcdbb2e568a10ac880e", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.json index 94e8623c..fc39e99c 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.json @@ -1,21 +1,21 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "e26598ffd47b150e6bf09e5490546e94", "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.info.json": "1a658e535689ba3312a79251d0603abb", + "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.info.json": "eaa3f351703b80239f15c03c5b727f31", "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.mp4": "d885df2112e5fdd5b0f20876851ef438", - "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.nfo": "7db44b51e23c9837643e8673d1283508", + "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.nfo": "a7e21040a3fcb264f287e4eba1853f94", "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.info.json": "c030e9ec6c67e24845a1f80e60c49c2a", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.info.json": "e8acab0ed714ef96a6d1463154996a5b", "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.mp4": "456a1778941f9abf6ee3b515e44ab8d1", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.nfo": "3bb75efbd42767816433b91e7a9831a1", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.nfo": "78c08ad76d004a74cdba012f0b746c22", "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.info.json": "2573381bab5b0c84d39def520326ff01", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.info.json": "893ed940046b8a650af0072029292899", "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.mp4": "4319b061434ab13ee20ac4d64980025b", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.nfo": "ab53bc2d39b3fe8c48c9a2778e294ba4", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.nfo": "d9031d8608d12742c40a3279138c8371", "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.info.json": "c68ed4baf5360c98bda46de2c3129e17", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.info.json": "001f7b61786b4ecb207cdf45fc6838e8", "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.mp4": "b0777c0678763c456fdb9fbbf90c371a", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.nfo": "0bda771e2b8b36add309ea42f331cbc4", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.nfo": "74bd8dc59c5b76ae112d90638977c464", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.json index 6d18ec0c..b6a15609 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.json @@ -1,23 +1,23 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "e26598ffd47b150e6bf09e5490546e94", "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.info.json": "9111eb8be07d8fce5cab4257a049bd16", + "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.info.json": "23ea4fc60be000f224c60911133445c4", "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.mp4": "d885df2112e5fdd5b0f20876851ef438", - "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.nfo": "7db44b51e23c9837643e8673d1283508", + "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.nfo": "a7e21040a3fcb264f287e4eba1853f94", "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.info.json": "6d8e82812ee2d93109372468802f625b", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.info.json": "473f212008eabbff7614e092e39c0e83", "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.mp4": "456a1778941f9abf6ee3b515e44ab8d1", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.nfo": "3bb75efbd42767816433b91e7a9831a1", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.nfo": "78c08ad76d004a74cdba012f0b746c22", "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.info.json": "657cfbc1acf4e35060f1e8dc53910dad", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.info.json": "2ee2edf10085b2aa3a3a1cd1850cfab1", "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.mp4": "4319b061434ab13ee20ac4d64980025b", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.nfo": "ab53bc2d39b3fe8c48c9a2778e294ba4", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.nfo": "d9031d8608d12742c40a3279138c8371", "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.info.json": "60f7a22320435d0f3930ea9d8f0df6f0", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.info.json": "37c636ccbbbde5211290aa40e86c95ca", "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.mp4": "b0777c0678763c456fdb9fbbf90c371a", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.nfo": "0bda771e2b8b36add309ea42f331cbc4", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.nfo": "74bd8dc59c5b76ae112d90638977c464", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.json index edd8aaa7..91b9ac43 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "2990d95213df5a6c87825a28daa970f4", "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.info.json": "b3d16c01cdf9680ebe60808f2f500ee9", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.info.json": "28de4c86761f962a274f877676273f42", "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.mp4": "5f700d73364bb0c1ccfa34987abf5b4a", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.nfo": "4c7e90f8299dc8937db757b9b6c36bd6", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.nfo": "0242d92e5e0d26745948b42c25eecfba", "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.info.json": "255dd9d2e566d4951c228c333c88de34", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.info.json": "9ec937cc60b7e8fef0a6741033d539e3", "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.mp4": "938c64fafcc01d68811729cc6277364b", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.nfo": "5fa52bcd59ed344c6c27e8dd9352c292", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.nfo": "52b17bcad30adb6eaef4c3b21c1af76b", "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.info.json": "9ca487486489a07f45a3671833b46200", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.info.json": "9cc088e0502239894663985c73cbb8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.mp4": "7e62cec1dd4ab9d6dc429684b12bd8a6", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.nfo": "ec78bfbb517097f0189803a1c8e8625e", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.nfo": "31fb72d089fd680fea1340f3d3c41d64", "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.info.json": "3c5529c60a981d3004dec4be0dd44386", + "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.info.json": "376f0187fb4be474af0634cab27a94a3", "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.mp4": "75df3f9f617361c65178484d87625789", - "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.nfo": "615f8e861c468182f1c1f14403484291", + "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.nfo": "df65227ee260219883ff618c9fbdf1d4", "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.info.json": "055914a06fdd556c4b8a7d9ba6868b5c", + "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.info.json": "753590baac8c807337d7be2c6a1bee17", "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.mp4": "d885df2112e5fdd5b0f20876851ef438", - "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.nfo": "a0370f0b5d293588ab19fea2d8fe761d", + "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.nfo": "0e4ea058d6a1e8760c80d3a02d25aafc", "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.info.json": "12e7c2ce72158a89a185b1860c7dc7d2", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.info.json": "eafd4c6ae0be81da688c25c305de550a", "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.mp4": "456a1778941f9abf6ee3b515e44ab8d1", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.nfo": "015251bbd9010955553dfdd6df510107", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.nfo": "1095322364e512dff963a44b2beffe30", "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.info.json": "65473bcb02396628d81ab3c51dac6b05", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.info.json": "776544b88a36a0ed7842ad34b462947c", "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.mp4": "4319b061434ab13ee20ac4d64980025b", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.nfo": "622464af168f066ca0129ac7de341a2b", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.nfo": "5130c71d99f1c0726fee8cb8c9d82ba7", "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.info.json": "406629e815a560ee1078a2d2f0e2eabc", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.info.json": "fac6137b97e4db79621f55694fd5ed07", "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.mp4": "b0777c0678763c456fdb9fbbf90c371a", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.nfo": "53b6d9b4580a28c0a6b6ff4d770b1eaf", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.nfo": "bde2a5401c49b58de0eacea4145d91ae", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.json index 1e82640e..c29ae1ad 100644 --- a/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.json @@ -1,40 +1,40 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "2990d95213df5a6c87825a28daa970f4", "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.info.json": "53e336dc82cf7a65fc62b0783c581059", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.info.json": "d699b2e091b389dd470a8d6719b87d00", "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.mp4": "5f700d73364bb0c1ccfa34987abf5b4a", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.nfo": "4c7e90f8299dc8937db757b9b6c36bd6", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.nfo": "0242d92e5e0d26745948b42c25eecfba", "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.info.json": "88f6e9dd1573dbd3388432c9a04a0e09", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.info.json": "8318cac15f71dfaa373ebb8470288f82", "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.mp4": "938c64fafcc01d68811729cc6277364b", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.nfo": "5fa52bcd59ed344c6c27e8dd9352c292", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.nfo": "52b17bcad30adb6eaef4c3b21c1af76b", "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.info.json": "8310c540da3f4d8449d93b849f63dbdd", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.info.json": "d7e89687663d7251635f6011acf76ca2", "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.mp4": "7e62cec1dd4ab9d6dc429684b12bd8a6", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.nfo": "ec78bfbb517097f0189803a1c8e8625e", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.nfo": "31fb72d089fd680fea1340f3d3c41d64", "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.info.json": "231bcbd664181d6c59f8b4d9eefec368", + "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.info.json": "d27c625857e68c56ffa89a199d21c1a2", "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.mp4": "75df3f9f617361c65178484d87625789", - "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.nfo": "615f8e861c468182f1c1f14403484291", + "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.nfo": "df65227ee260219883ff618c9fbdf1d4", "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.info.json": "46447ae5b21700bf7e71cf9674a50287", + "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.info.json": "eb87faf31e9521949e1d46caa9bdaeba", "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.mp4": "d885df2112e5fdd5b0f20876851ef438", - "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.nfo": "a0370f0b5d293588ab19fea2d8fe761d", + "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.nfo": "0e4ea058d6a1e8760c80d3a02d25aafc", "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.info.json": "32d815d4e3a6ed68514ea871cb684359", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.info.json": "f9b1724b674ce5fe90ca3da72b9dce50", "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.mp4": "456a1778941f9abf6ee3b515e44ab8d1", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.nfo": "015251bbd9010955553dfdd6df510107", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.nfo": "1095322364e512dff963a44b2beffe30", "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.info.json": "995e67fcd1b2615d8c594cf8e65e6d56", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.info.json": "c21e448042a9ce3f81651726f8ac8586", "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.mp4": "4319b061434ab13ee20ac4d64980025b", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.nfo": "622464af168f066ca0129ac7de341a2b", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.nfo": "5130c71d99f1c0726fee8cb8c9d82ba7", "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.info.json": "7bbd18cae95324d002f8a1fe68ceadf0", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.info.json": "1ff4454ef2e877c2bb857da26aa59a0d", "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.mp4": "b0777c0678763c456fdb9fbbf90c371a", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.nfo": "53b6d9b4580a28c0a6b6ff4d770b1eaf", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.nfo": "bde2a5401c49b58de0eacea4145d91ae", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.json index 1b54e4fe..25f45aba 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.json @@ -1,20 +1,20 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "456d8882fc5e35d74f19b386d1d9a059", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "f1315ac907d99c567839ac982b396f51", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "44a703e77c8285e81fec57ed9000bb0c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.mp4": "5f221fdf07f200a297427b5df953d96f", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "1925f7654bf0243736c7b32bc013c0d9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "dbe61f2c8ae41041773f713ba5376726", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "559c970f2fde6db18d42850b65f038b4", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "3fe91099a510c9dc820a0a7adba98868", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.mp4": "240eb2e4df1abb10290f957d75f2522c", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "7a39d8c24ee8df26bc72ac4b2753715b", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "0f071078c9fa2569bbcb998664d40681", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "6e712b8c5b40f3622732f087127d75f3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "e780d5e9e678d4aae5b131a5f3603695", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.mp4": "0c58e78e7727c893226b9fcbe39b1791", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "a9e5d5d21b6ca5574ffecee859413923", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "837a61dca11bbe1874ea07cb8ef8a7c9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "61d42a2f8aa085eae5758206ff853538", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "4a4d542da434d5b3ff8d304f0e077469", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.mp4": "8b75d7f6f6f84cccf1867a91d15044a6", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "7e79fad2f197644c02bfd35c29b46029", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "8ee3845c514a411425b7e9198666b61c", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.json index 822bb000..d27004ac 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.json @@ -1,36 +1,36 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "2bf8edeaf8b5658c4a42a9faa9bb2f60", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "4b04325397e3b9ed0ee51f319ce07353", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "3caee440547dd4ed46ec3cdca46978f2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.mp4": "5f221fdf07f200a297427b5df953d96f", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "1925f7654bf0243736c7b32bc013c0d9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "dbe61f2c8ae41041773f713ba5376726", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "729ca4dba26539e6d8c04443c9aa67ab", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "0b180b38ac673e7e320e9e615974fe41", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.mp4": "240eb2e4df1abb10290f957d75f2522c", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "7a39d8c24ee8df26bc72ac4b2753715b", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "0f071078c9fa2569bbcb998664d40681", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "075f2c2ce8c995195decf755fc980c89", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "5b26edd07c0534d53884d6a42908f8db", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.mp4": "0c58e78e7727c893226b9fcbe39b1791", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "a9e5d5d21b6ca5574ffecee859413923", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "837a61dca11bbe1874ea07cb8ef8a7c9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.info.json": "e3b5da94c5a86db003633570af47d1a9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.info.json": "629fb263cff2e93b7ec67769ebbc75e0", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.mp4": "e8b77ffd826f8f7233b875e311adaf34", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.nfo": "17489dad8935540598d3c5f873eb11f8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.nfo": "c1f5925e1eab8bd21e077df560879d94", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.info.json": "c572cf9767af2221f4e88b40ab11e7dd", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.info.json": "0a3998c019cc33845be703ca1bb448f9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.mp4": "4343e692b53f0abce80559b59ef2fa0c", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.nfo": "5be336b1d5e9db676bc864081dd0a20c", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.nfo": "9fdbaa70187252b0d303d128123c4e83", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.info.json": "4fe8ba1b78f29c9e578d84d3ef6e8caa", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.info.json": "e891c1960d5c29b5e1e73c98ecf2e7f6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.mp4": "dea5d69ae35e47aa78a51f464088a6ad", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.nfo": "296ac9d9371ba73e4361ace900de3056", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.nfo": "5e5815bbc8b471df94d8536b117409f4", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.info.json": "943a66e92c610b032471cf684fa2cdf0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.info.json": "fe18c65b99ca8942e65d777c9a498577", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.mp4": "b2f03dcefe44b8afc65b2500c873aec2", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.nfo": "acd99e3536227ce1fbfdb0323a180418", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.nfo": "a86c62cd14e6a42dd79639a6155165fe", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "fc9484dbc42b6fd6149fdcacc235e206", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "aeeb1be477400f34485799112a8121c2", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.mp4": "8b75d7f6f6f84cccf1867a91d15044a6", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "7e79fad2f197644c02bfd35c29b46029", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "8ee3845c514a411425b7e9198666b61c", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.json index e672558c..06337329 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.json @@ -1,22 +1,22 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "456d8882fc5e35d74f19b386d1d9a059", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "044162512a1982b573a0d6f19646801a", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "bebd3dafb168c976a8c817e83a550ce2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.mp4": "5f221fdf07f200a297427b5df953d96f", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "1925f7654bf0243736c7b32bc013c0d9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "dbe61f2c8ae41041773f713ba5376726", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "d6e1d8a486125f87d04959607e2dc515", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "7543d21dcf2bd220a9ce4cd15f1e1578", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.mp4": "240eb2e4df1abb10290f957d75f2522c", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "7a39d8c24ee8df26bc72ac4b2753715b", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "0f071078c9fa2569bbcb998664d40681", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "5632b6ac9992ee07bf6052e9c87a02c5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "921a343cf11be7cc492678459dbdd926", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.mp4": "0c58e78e7727c893226b9fcbe39b1791", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "a9e5d5d21b6ca5574ffecee859413923", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "837a61dca11bbe1874ea07cb8ef8a7c9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "aa1269526f1e384b25d630c7db17860e", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "5757f06de01c68c5104ec7a7b0c6a69b", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.mp4": "8b75d7f6f6f84cccf1867a91d15044a6", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "7e79fad2f197644c02bfd35c29b46029", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "8ee3845c514a411425b7e9198666b61c", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.json index 495ec203..14e104a3 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "2bf8edeaf8b5658c4a42a9faa9bb2f60", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "b8f3acff3cb18657dfa8a37b037c78f1", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "3a613f0724932930ab746bcf9f8bdf42", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.mp4": "5f221fdf07f200a297427b5df953d96f", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "1925f7654bf0243736c7b32bc013c0d9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.nfo": "dbe61f2c8ae41041773f713ba5376726", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "e4efb3ea481b6936d188470ace4d6bae", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "a702f2b8e66c348ceb3ec1fd65956024", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.mp4": "240eb2e4df1abb10290f957d75f2522c", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "7a39d8c24ee8df26bc72ac4b2753715b", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.nfo": "0f071078c9fa2569bbcb998664d40681", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "683d44d82d8854b1bed529196dc091c9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "455e6a6bce2b8630d1a53e11c5554362", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.mp4": "0c58e78e7727c893226b9fcbe39b1791", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "a9e5d5d21b6ca5574ffecee859413923", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.nfo": "837a61dca11bbe1874ea07cb8ef8a7c9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.info.json": "f2ab803ea763a11fb271d7a36b2eb340", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.info.json": "04c2a406e17fb509e849c3d5ccac8b5e", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.mp4": "e8b77ffd826f8f7233b875e311adaf34", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.nfo": "17489dad8935540598d3c5f873eb11f8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.nfo": "c1f5925e1eab8bd21e077df560879d94", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.info.json": "6e010415351d9d94f64624607d7ad831", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.info.json": "b5960c859c450da1c40fe68951499a8f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.mp4": "4343e692b53f0abce80559b59ef2fa0c", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.nfo": "5be336b1d5e9db676bc864081dd0a20c", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.nfo": "9fdbaa70187252b0d303d128123c4e83", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.info.json": "7214c68d8bd6f3c714dee034a5e04fa8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.info.json": "1892550ced3033c5b779324e39ef77ac", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.mp4": "dea5d69ae35e47aa78a51f464088a6ad", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.nfo": "296ac9d9371ba73e4361ace900de3056", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.nfo": "5e5815bbc8b471df94d8536b117409f4", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.info.json": "d04117d103932f217a50e1a28db42962", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.info.json": "03254329cabbac6a887801d1a3a4a9fc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.mp4": "b2f03dcefe44b8afc65b2500c873aec2", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.nfo": "acd99e3536227ce1fbfdb0323a180418", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.nfo": "a86c62cd14e6a42dd79639a6155165fe", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "e33b506e3e441ad05af03826b8ccb758", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "09b731b1e404368cf7ce3fe8197e1de9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.mp4": "8b75d7f6f6f84cccf1867a91d15044a6", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "7e79fad2f197644c02bfd35c29b46029", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.nfo": "8ee3845c514a411425b7e9198666b61c", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.json index da16227c..1d91c9bd 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.json @@ -1,20 +1,20 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "e30d83126c2c6981c936ed894a6f159b", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "f1315ac907d99c567839ac982b396f51", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "44a703e77c8285e81fec57ed9000bb0c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.mp4": "72205b53c6e2d477372e3d5bb3d35fff", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "c2e446ade2fe21cffe3e9e4b79a1ed1f", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "7c0f2a9d38bf617377e474fcb9bf2bc2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "559c970f2fde6db18d42850b65f038b4", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "3fe91099a510c9dc820a0a7adba98868", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.mp4": "bc7ffede56ed138f592d76a3a02681ae", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "8d64a2d4c30483f6e032df52f7911dad", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "1f4dec756555ee345cd9d6489b63e070", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "6e712b8c5b40f3622732f087127d75f3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "e780d5e9e678d4aae5b131a5f3603695", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.mp4": "4825194cd6a037b79997cfb2d08ed444", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "0b9391e992b88c4cef32a6892609ef4c", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "f6f704ae3ae0c4055590a147eb425609", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "61d42a2f8aa085eae5758206ff853538", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "4a4d542da434d5b3ff8d304f0e077469", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.mp4": "efd9d3b1f941386c031e5899aa3042ed", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c64a1ce3eade3978ea2aeb0ed72eb5f5", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c6e0d368bfe9d70134e5a2ff2d3dccc6", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.json index f6c1ae5a..904d771d 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.json @@ -1,36 +1,36 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "126aec3c19ad3a56faceed442515faf5", "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.info.json": "e3b5da94c5a86db003633570af47d1a9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.info.json": "629fb263cff2e93b7ec67769ebbc75e0", "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.mp4": "a44c49a4adb03fc619ff10a37025c09d", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.nfo": "9ee9c7df9a719d90bc6218f0d06af136", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.nfo": "c4311723a97b1b299342aca9c079ffbc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.info.json": "c572cf9767af2221f4e88b40ab11e7dd", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.info.json": "0a3998c019cc33845be703ca1bb448f9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.mp4": "ca2a1e878e543c73e5d95c983580ea66", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.nfo": "130944ece25592f7dc7d3b395ec1cee5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.nfo": "2d3b121869944eeef9919765b6d10ec3", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.info.json": "4fe8ba1b78f29c9e578d84d3ef6e8caa", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.info.json": "e891c1960d5c29b5e1e73c98ecf2e7f6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.mp4": "1ed7951cb4414e79f78f48176f9fc2c2", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.nfo": "0e10bead605b29b3939de12bcfc68039", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.nfo": "3b507ba7e4482c16ccd5b1a832c205eb", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.info.json": "943a66e92c610b032471cf684fa2cdf0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.info.json": "fe18c65b99ca8942e65d777c9a498577", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.mp4": "fdc41ef1aceab35f2f229962ec4bb66a", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.nfo": "885a2381f1dab6b02cb21176fdf958ce", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.nfo": "27e19fdc5941b870320b68f189e2c2ec", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "4b04325397e3b9ed0ee51f319ce07353", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "3caee440547dd4ed46ec3cdca46978f2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.mp4": "72205b53c6e2d477372e3d5bb3d35fff", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "c2e446ade2fe21cffe3e9e4b79a1ed1f", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "7c0f2a9d38bf617377e474fcb9bf2bc2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "729ca4dba26539e6d8c04443c9aa67ab", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "0b180b38ac673e7e320e9e615974fe41", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.mp4": "bc7ffede56ed138f592d76a3a02681ae", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "8d64a2d4c30483f6e032df52f7911dad", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "1f4dec756555ee345cd9d6489b63e070", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "075f2c2ce8c995195decf755fc980c89", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "5b26edd07c0534d53884d6a42908f8db", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.mp4": "4825194cd6a037b79997cfb2d08ed444", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "0b9391e992b88c4cef32a6892609ef4c", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "f6f704ae3ae0c4055590a147eb425609", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "fc9484dbc42b6fd6149fdcacc235e206", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "aeeb1be477400f34485799112a8121c2", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.mp4": "efd9d3b1f941386c031e5899aa3042ed", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c64a1ce3eade3978ea2aeb0ed72eb5f5", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c6e0d368bfe9d70134e5a2ff2d3dccc6", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.json index 9519f8a3..c0e80ea9 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.json @@ -1,22 +1,22 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "e30d83126c2c6981c936ed894a6f159b", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "044162512a1982b573a0d6f19646801a", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "bebd3dafb168c976a8c817e83a550ce2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.mp4": "72205b53c6e2d477372e3d5bb3d35fff", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "c2e446ade2fe21cffe3e9e4b79a1ed1f", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "7c0f2a9d38bf617377e474fcb9bf2bc2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "d6e1d8a486125f87d04959607e2dc515", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "7543d21dcf2bd220a9ce4cd15f1e1578", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.mp4": "bc7ffede56ed138f592d76a3a02681ae", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "8d64a2d4c30483f6e032df52f7911dad", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "1f4dec756555ee345cd9d6489b63e070", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "5632b6ac9992ee07bf6052e9c87a02c5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "921a343cf11be7cc492678459dbdd926", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.mp4": "4825194cd6a037b79997cfb2d08ed444", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "0b9391e992b88c4cef32a6892609ef4c", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "f6f704ae3ae0c4055590a147eb425609", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "aa1269526f1e384b25d630c7db17860e", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "5757f06de01c68c5104ec7a7b0c6a69b", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.mp4": "efd9d3b1f941386c031e5899aa3042ed", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c64a1ce3eade3978ea2aeb0ed72eb5f5", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c6e0d368bfe9d70134e5a2ff2d3dccc6", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.json index 59dde2b0..ffde50eb 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "126aec3c19ad3a56faceed442515faf5", "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.info.json": "f2ab803ea763a11fb271d7a36b2eb340", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.info.json": "04c2a406e17fb509e849c3d5ccac8b5e", "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.mp4": "a44c49a4adb03fc619ff10a37025c09d", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.nfo": "9ee9c7df9a719d90bc6218f0d06af136", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.nfo": "c4311723a97b1b299342aca9c079ffbc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.info.json": "6e010415351d9d94f64624607d7ad831", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.info.json": "b5960c859c450da1c40fe68951499a8f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.mp4": "ca2a1e878e543c73e5d95c983580ea66", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.nfo": "130944ece25592f7dc7d3b395ec1cee5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.nfo": "2d3b121869944eeef9919765b6d10ec3", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.info.json": "7214c68d8bd6f3c714dee034a5e04fa8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.info.json": "1892550ced3033c5b779324e39ef77ac", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.mp4": "1ed7951cb4414e79f78f48176f9fc2c2", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.nfo": "0e10bead605b29b3939de12bcfc68039", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.nfo": "3b507ba7e4482c16ccd5b1a832c205eb", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.info.json": "d04117d103932f217a50e1a28db42962", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.info.json": "03254329cabbac6a887801d1a3a4a9fc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.mp4": "fdc41ef1aceab35f2f229962ec4bb66a", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.nfo": "885a2381f1dab6b02cb21176fdf958ce", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.nfo": "27e19fdc5941b870320b68f189e2c2ec", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "b8f3acff3cb18657dfa8a37b037c78f1", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "3a613f0724932930ab746bcf9f8bdf42", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.mp4": "72205b53c6e2d477372e3d5bb3d35fff", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "c2e446ade2fe21cffe3e9e4b79a1ed1f", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.nfo": "7c0f2a9d38bf617377e474fcb9bf2bc2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "e4efb3ea481b6936d188470ace4d6bae", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "a702f2b8e66c348ceb3ec1fd65956024", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.mp4": "bc7ffede56ed138f592d76a3a02681ae", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "8d64a2d4c30483f6e032df52f7911dad", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.nfo": "1f4dec756555ee345cd9d6489b63e070", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "683d44d82d8854b1bed529196dc091c9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "455e6a6bce2b8630d1a53e11c5554362", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.mp4": "4825194cd6a037b79997cfb2d08ed444", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "0b9391e992b88c4cef32a6892609ef4c", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.nfo": "f6f704ae3ae0c4055590a147eb425609", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "e33b506e3e441ad05af03826b8ccb758", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "09b731b1e404368cf7ce3fe8197e1de9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.mp4": "efd9d3b1f941386c031e5899aa3042ed", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c64a1ce3eade3978ea2aeb0ed72eb5f5", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.nfo": "c6e0d368bfe9d70134e5a2ff2d3dccc6", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.json index a17cf60e..b62515c8 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.json @@ -1,20 +1,20 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "05539b932348da7e949a63eb71f77efc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "6e712b8c5b40f3622732f087127d75f3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "e780d5e9e678d4aae5b131a5f3603695", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.mp4": "5eafeb7a1c616dfe02c28fc902ce00fb", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "57a07df96fb016c59a292b5cd1d22e10", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "88fee5353ad7eecd96865b34654bbde6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "559c970f2fde6db18d42850b65f038b4", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "3fe91099a510c9dc820a0a7adba98868", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.mp4": "e4a7144efa7039a03ae69460361ae518", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "473a638408eff688582ec8572ba955b2", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "d781b80ef24916acbf3bf181ab32ddea", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "f1315ac907d99c567839ac982b396f51", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "44a703e77c8285e81fec57ed9000bb0c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.mp4": "7566491129c54183e337e83455ab5bda", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "b1070f080d4448a08cbead85540f370d", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "252b3639b4d1686f8c79476943f89439", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "61d42a2f8aa085eae5758206ff853538", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "4a4d542da434d5b3ff8d304f0e077469", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.mp4": "e94af7eed1fe7d2512d042979ca878dd", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "7f90134d9346efe476cc5a1e531f8ecd", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "e7374b766d9ec0599ecf209a0f78c0ba", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.json index fae1c419..80921182 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.json @@ -1,36 +1,36 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "6baee42e9095883c0ed77e6b5829e2c2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "075f2c2ce8c995195decf755fc980c89", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "5b26edd07c0534d53884d6a42908f8db", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.mp4": "5eafeb7a1c616dfe02c28fc902ce00fb", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "57a07df96fb016c59a292b5cd1d22e10", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "88fee5353ad7eecd96865b34654bbde6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "729ca4dba26539e6d8c04443c9aa67ab", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "0b180b38ac673e7e320e9e615974fe41", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.mp4": "e4a7144efa7039a03ae69460361ae518", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "473a638408eff688582ec8572ba955b2", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "d781b80ef24916acbf3bf181ab32ddea", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "4b04325397e3b9ed0ee51f319ce07353", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "3caee440547dd4ed46ec3cdca46978f2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.mp4": "7566491129c54183e337e83455ab5bda", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "b1070f080d4448a08cbead85540f370d", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "252b3639b4d1686f8c79476943f89439", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.info.json": "943a66e92c610b032471cf684fa2cdf0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.info.json": "fe18c65b99ca8942e65d777c9a498577", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.mp4": "0850f53dd2335ba57632128b9bb9d112", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.nfo": "ed439adf2aa5eb4ba741934791ca99e5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.nfo": "4edc04aaea3799ef24bafe6afe4017e5", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.info.json": "4fe8ba1b78f29c9e578d84d3ef6e8caa", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.info.json": "e891c1960d5c29b5e1e73c98ecf2e7f6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.mp4": "0dcd1a017948164d217f0bde59551655", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.nfo": "a59a0fa2cef91dea9c1416f3c1abd3e0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.nfo": "d7d3005d7a8b3feb7465e697cfb4cad4", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.info.json": "c572cf9767af2221f4e88b40ab11e7dd", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.info.json": "0a3998c019cc33845be703ca1bb448f9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.mp4": "6c4b98bd5e32fbffef033f268d8587ae", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.nfo": "d33cdac7ddd02bb601add35e4dce0173", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.nfo": "1832889c5a8010c28914ef5c9845e14f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.info.json": "e3b5da94c5a86db003633570af47d1a9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.info.json": "629fb263cff2e93b7ec67769ebbc75e0", "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.mp4": "386aa9718db383c17aafc9a00d61d0f0", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.nfo": "1c65b21f8bd5a52dab41ae2d297925e3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.nfo": "75a73feabcd828d88768c453ab13718e", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "fc9484dbc42b6fd6149fdcacc235e206", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "aeeb1be477400f34485799112a8121c2", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.mp4": "e94af7eed1fe7d2512d042979ca878dd", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "7f90134d9346efe476cc5a1e531f8ecd", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "e7374b766d9ec0599ecf209a0f78c0ba", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.json index cb97d639..cbff4a38 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.json @@ -1,22 +1,22 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "05539b932348da7e949a63eb71f77efc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "5632b6ac9992ee07bf6052e9c87a02c5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "921a343cf11be7cc492678459dbdd926", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.mp4": "5eafeb7a1c616dfe02c28fc902ce00fb", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "57a07df96fb016c59a292b5cd1d22e10", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "88fee5353ad7eecd96865b34654bbde6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "d6e1d8a486125f87d04959607e2dc515", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "7543d21dcf2bd220a9ce4cd15f1e1578", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.mp4": "e4a7144efa7039a03ae69460361ae518", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "473a638408eff688582ec8572ba955b2", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "d781b80ef24916acbf3bf181ab32ddea", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "044162512a1982b573a0d6f19646801a", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "bebd3dafb168c976a8c817e83a550ce2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.mp4": "7566491129c54183e337e83455ab5bda", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "b1070f080d4448a08cbead85540f370d", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "252b3639b4d1686f8c79476943f89439", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "aa1269526f1e384b25d630c7db17860e", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "5757f06de01c68c5104ec7a7b0c6a69b", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.mp4": "e94af7eed1fe7d2512d042979ca878dd", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "7f90134d9346efe476cc5a1e531f8ecd", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "e7374b766d9ec0599ecf209a0f78c0ba", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.json index 993278e1..4e30603b 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "6baee42e9095883c0ed77e6b5829e2c2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "683d44d82d8854b1bed529196dc091c9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "455e6a6bce2b8630d1a53e11c5554362", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.mp4": "5eafeb7a1c616dfe02c28fc902ce00fb", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "57a07df96fb016c59a292b5cd1d22e10", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.nfo": "88fee5353ad7eecd96865b34654bbde6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "e4efb3ea481b6936d188470ace4d6bae", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "a702f2b8e66c348ceb3ec1fd65956024", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.mp4": "e4a7144efa7039a03ae69460361ae518", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "473a638408eff688582ec8572ba955b2", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.nfo": "d781b80ef24916acbf3bf181ab32ddea", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "b8f3acff3cb18657dfa8a37b037c78f1", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "3a613f0724932930ab746bcf9f8bdf42", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.mp4": "7566491129c54183e337e83455ab5bda", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "b1070f080d4448a08cbead85540f370d", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.nfo": "252b3639b4d1686f8c79476943f89439", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.info.json": "d04117d103932f217a50e1a28db42962", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.info.json": "03254329cabbac6a887801d1a3a4a9fc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.mp4": "0850f53dd2335ba57632128b9bb9d112", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.nfo": "ed439adf2aa5eb4ba741934791ca99e5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.nfo": "4edc04aaea3799ef24bafe6afe4017e5", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.info.json": "7214c68d8bd6f3c714dee034a5e04fa8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.info.json": "1892550ced3033c5b779324e39ef77ac", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.mp4": "0dcd1a017948164d217f0bde59551655", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.nfo": "a59a0fa2cef91dea9c1416f3c1abd3e0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.nfo": "d7d3005d7a8b3feb7465e697cfb4cad4", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.info.json": "6e010415351d9d94f64624607d7ad831", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.info.json": "b5960c859c450da1c40fe68951499a8f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.mp4": "6c4b98bd5e32fbffef033f268d8587ae", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.nfo": "d33cdac7ddd02bb601add35e4dce0173", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.nfo": "1832889c5a8010c28914ef5c9845e14f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.info.json": "f2ab803ea763a11fb271d7a36b2eb340", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.info.json": "04c2a406e17fb509e849c3d5ccac8b5e", "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.mp4": "386aa9718db383c17aafc9a00d61d0f0", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.nfo": "1c65b21f8bd5a52dab41ae2d297925e3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.nfo": "75a73feabcd828d88768c453ab13718e", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "e33b506e3e441ad05af03826b8ccb758", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "09b731b1e404368cf7ce3fe8197e1de9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.mp4": "e94af7eed1fe7d2512d042979ca878dd", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "7f90134d9346efe476cc5a1e531f8ecd", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.nfo": "e7374b766d9ec0599ecf209a0f78c0ba", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.json index 73eae87b..e42787c7 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.json @@ -1,20 +1,20 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "5269b5e9e4fad7b63b6fdb3fef477b1e", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "f1315ac907d99c567839ac982b396f51", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "44a703e77c8285e81fec57ed9000bb0c", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.mp4": "776af67f6507b05700ff573ef9560aba", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "f618eb52397bd44f7efa2ee7dae5da74", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "4ba0e01c1e7295952c3f5e6b9b251d7d", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "559c970f2fde6db18d42850b65f038b4", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "3fe91099a510c9dc820a0a7adba98868", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.mp4": "d83e7a55c37f8a5f3d18c4578bfc65af", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "da44a5409d2010d47918864aefe2e5bc", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "db9196b729c7b2cd26e3f0fc649b39f0", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "6e712b8c5b40f3622732f087127d75f3", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "e780d5e9e678d4aae5b131a5f3603695", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.mp4": "c1e00927a15da4afa48cdcb514610156", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "0a08b970bfb64345ff96a8b8447479a9", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "ba4a387d9462f416ba176c31c1c55316", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "61d42a2f8aa085eae5758206ff853538", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "4a4d542da434d5b3ff8d304f0e077469", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.mp4": "e1955b69689826e841c9b034209b7437", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "f329f4258d783fc36baedf35c0e540d4", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "93dd5c4c493422f9a60e61a6b965b39a", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.json index d1015262..0ece0c45 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.json @@ -1,36 +1,36 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "5c7b84a74e98bbbc6f5897742ba6dfec", "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.info.json": "e3b5da94c5a86db003633570af47d1a9", + "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.info.json": "629fb263cff2e93b7ec67769ebbc75e0", "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.mp4": "201f4f7a4cfb745b8befe75af83ef289", - "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.nfo": "d32e8ce5be43532924d42ca50f47c36c", + "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.nfo": "2742789534cd28d2b2c498df19b01070", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.info.json": "c572cf9767af2221f4e88b40ab11e7dd", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.info.json": "0a3998c019cc33845be703ca1bb448f9", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.mp4": "3acc0b8ad17afdf9396a3f7600307899", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.nfo": "de7ded8e978a48a48edfe7d4b9644ce9", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.nfo": "a6c28bd2c7dece677bdfe342e1691a34", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.info.json": "4fe8ba1b78f29c9e578d84d3ef6e8caa", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.info.json": "e891c1960d5c29b5e1e73c98ecf2e7f6", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.mp4": "58fbeaa3e51e59ef3405464ab3bc46f1", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.nfo": "eec44bf9043055fc73041bb2e103ed53", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.nfo": "7a3a3d341795ab8b8f1faa5499ebe55c", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.info.json": "943a66e92c610b032471cf684fa2cdf0", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.info.json": "fe18c65b99ca8942e65d777c9a498577", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.mp4": "aa76dff1662eda9596791ca5076a8385", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.nfo": "6fe63a62e84f5e4c875110af87cc5488", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.nfo": "0d38c0fe0b0bbbfd3fe78cb71e9b65f4", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "4b04325397e3b9ed0ee51f319ce07353", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "3caee440547dd4ed46ec3cdca46978f2", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.mp4": "776af67f6507b05700ff573ef9560aba", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "f618eb52397bd44f7efa2ee7dae5da74", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "4ba0e01c1e7295952c3f5e6b9b251d7d", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "729ca4dba26539e6d8c04443c9aa67ab", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "0b180b38ac673e7e320e9e615974fe41", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.mp4": "d83e7a55c37f8a5f3d18c4578bfc65af", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "da44a5409d2010d47918864aefe2e5bc", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "db9196b729c7b2cd26e3f0fc649b39f0", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "075f2c2ce8c995195decf755fc980c89", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "5b26edd07c0534d53884d6a42908f8db", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.mp4": "c1e00927a15da4afa48cdcb514610156", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "0a08b970bfb64345ff96a8b8447479a9", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "ba4a387d9462f416ba176c31c1c55316", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "fc9484dbc42b6fd6149fdcacc235e206", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "aeeb1be477400f34485799112a8121c2", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.mp4": "e1955b69689826e841c9b034209b7437", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "f329f4258d783fc36baedf35c0e540d4", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "93dd5c4c493422f9a60e61a6b965b39a", + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.json index a912154b..c66cb322 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.json @@ -1,22 +1,22 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "5269b5e9e4fad7b63b6fdb3fef477b1e", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "044162512a1982b573a0d6f19646801a", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "bebd3dafb168c976a8c817e83a550ce2", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.mp4": "776af67f6507b05700ff573ef9560aba", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "f618eb52397bd44f7efa2ee7dae5da74", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "4ba0e01c1e7295952c3f5e6b9b251d7d", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "d6e1d8a486125f87d04959607e2dc515", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "7543d21dcf2bd220a9ce4cd15f1e1578", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.mp4": "d83e7a55c37f8a5f3d18c4578bfc65af", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "da44a5409d2010d47918864aefe2e5bc", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "db9196b729c7b2cd26e3f0fc649b39f0", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "5632b6ac9992ee07bf6052e9c87a02c5", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "921a343cf11be7cc492678459dbdd926", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.mp4": "c1e00927a15da4afa48cdcb514610156", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "0a08b970bfb64345ff96a8b8447479a9", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "ba4a387d9462f416ba176c31c1c55316", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "aa1269526f1e384b25d630c7db17860e", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "5757f06de01c68c5104ec7a7b0c6a69b", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.mp4": "e1955b69689826e841c9b034209b7437", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "f329f4258d783fc36baedf35c0e540d4", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "93dd5c4c493422f9a60e61a6b965b39a", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.json index 53c9c924..9a3bf3a6 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "5c7b84a74e98bbbc6f5897742ba6dfec", "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.info.json": "f2ab803ea763a11fb271d7a36b2eb340", + "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.info.json": "04c2a406e17fb509e849c3d5ccac8b5e", "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.mp4": "201f4f7a4cfb745b8befe75af83ef289", - "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.nfo": "d32e8ce5be43532924d42ca50f47c36c", + "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.nfo": "2742789534cd28d2b2c498df19b01070", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.info.json": "6e010415351d9d94f64624607d7ad831", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.info.json": "b5960c859c450da1c40fe68951499a8f", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.mp4": "3acc0b8ad17afdf9396a3f7600307899", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.nfo": "de7ded8e978a48a48edfe7d4b9644ce9", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.nfo": "a6c28bd2c7dece677bdfe342e1691a34", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.info.json": "7214c68d8bd6f3c714dee034a5e04fa8", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.info.json": "1892550ced3033c5b779324e39ef77ac", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.mp4": "58fbeaa3e51e59ef3405464ab3bc46f1", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.nfo": "eec44bf9043055fc73041bb2e103ed53", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.nfo": "7a3a3d341795ab8b8f1faa5499ebe55c", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.info.json": "d04117d103932f217a50e1a28db42962", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.info.json": "03254329cabbac6a887801d1a3a4a9fc", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.mp4": "aa76dff1662eda9596791ca5076a8385", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.nfo": "6fe63a62e84f5e4c875110af87cc5488", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.nfo": "0d38c0fe0b0bbbfd3fe78cb71e9b65f4", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "b8f3acff3cb18657dfa8a37b037c78f1", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "3a613f0724932930ab746bcf9f8bdf42", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.mp4": "776af67f6507b05700ff573ef9560aba", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "f618eb52397bd44f7efa2ee7dae5da74", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.nfo": "4ba0e01c1e7295952c3f5e6b9b251d7d", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "e4efb3ea481b6936d188470ace4d6bae", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "a702f2b8e66c348ceb3ec1fd65956024", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.mp4": "d83e7a55c37f8a5f3d18c4578bfc65af", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "da44a5409d2010d47918864aefe2e5bc", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.nfo": "db9196b729c7b2cd26e3f0fc649b39f0", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "683d44d82d8854b1bed529196dc091c9", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "455e6a6bce2b8630d1a53e11c5554362", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.mp4": "c1e00927a15da4afa48cdcb514610156", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "0a08b970bfb64345ff96a8b8447479a9", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.nfo": "ba4a387d9462f416ba176c31c1c55316", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "e33b506e3e441ad05af03826b8ccb758", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "09b731b1e404368cf7ce3fe8197e1de9", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.mp4": "e1955b69689826e841c9b034209b7437", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "f329f4258d783fc36baedf35c0e540d4", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.nfo": "93dd5c4c493422f9a60e61a6b965b39a", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", - "Best Prebuilt TV Show by Date/tvshow.nfo": "59c4a3a046d43a9350f2e95e2f401039" + "Best Prebuilt TV Show by Date/tvshow.nfo": "2439ebc18e46a67064956cb940c992e9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.json index e536e91b..201488ea 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.json @@ -1,21 +1,21 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "4e5ef7394c029e7fe230f82dfe134e4c", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.info.json": "1a658e535689ba3312a79251d0603abb", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.info.json": "eaa3f351703b80239f15c03c5b727f31", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.mp4": "838968aa64d56f99166bc2867879da0d", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.nfo": "9a8129ac68f9e1b9a1e766e86b299ea7", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.nfo": "2a3d9b51221a541fefc29eebffe47cd4", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.info.json": "c030e9ec6c67e24845a1f80e60c49c2a", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.info.json": "e8acab0ed714ef96a6d1463154996a5b", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.mp4": "1109271e45e1c7ce0652b4e8e567d6bb", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.nfo": "a35880dc1d39def398a142ffc3bc411b", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.nfo": "ec57b2c78058e18cdc015813e8a14b9d", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.info.json": "2573381bab5b0c84d39def520326ff01", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.info.json": "893ed940046b8a650af0072029292899", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.mp4": "57644342b3e0f8697328fff415fd9bd6", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.nfo": "9b724eed832dd7c96e37bc1cefca5d3f", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.nfo": "cd919caf88b0eed99fd2a595c1afa6b1", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.info.json": "c68ed4baf5360c98bda46de2c3129e17", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.info.json": "001f7b61786b4ecb207cdf45fc6838e8", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.mp4": "bae6a68cab905f3d67fe95de2c0b11b4", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.nfo": "50e0837f2083a35006c61b5f5ebb79e4", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.nfo": "7c4b28456fe5d398b7dad966eb194421", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.json index cd85de16..b9bc0ef0 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.json @@ -1,23 +1,23 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "4e5ef7394c029e7fe230f82dfe134e4c", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.info.json": "9111eb8be07d8fce5cab4257a049bd16", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.info.json": "23ea4fc60be000f224c60911133445c4", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.mp4": "838968aa64d56f99166bc2867879da0d", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.nfo": "9a8129ac68f9e1b9a1e766e86b299ea7", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.nfo": "2a3d9b51221a541fefc29eebffe47cd4", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.info.json": "6d8e82812ee2d93109372468802f625b", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.info.json": "473f212008eabbff7614e092e39c0e83", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.mp4": "1109271e45e1c7ce0652b4e8e567d6bb", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.nfo": "a35880dc1d39def398a142ffc3bc411b", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.nfo": "ec57b2c78058e18cdc015813e8a14b9d", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.info.json": "657cfbc1acf4e35060f1e8dc53910dad", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.info.json": "2ee2edf10085b2aa3a3a1cd1850cfab1", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.mp4": "57644342b3e0f8697328fff415fd9bd6", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.nfo": "9b724eed832dd7c96e37bc1cefca5d3f", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.nfo": "cd919caf88b0eed99fd2a595c1afa6b1", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.info.json": "60f7a22320435d0f3930ea9d8f0df6f0", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.info.json": "37c636ccbbbde5211290aa40e86c95ca", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.mp4": "bae6a68cab905f3d67fe95de2c0b11b4", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.nfo": "50e0837f2083a35006c61b5f5ebb79e4", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.nfo": "7c4b28456fe5d398b7dad966eb194421", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.json index 1fb4cf8f..474fa3cc 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "c7c2427315924db344d4659a60c59bc9", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.info.json": "b3d16c01cdf9680ebe60808f2f500ee9", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.info.json": "28de4c86761f962a274f877676273f42", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.mp4": "3abb120022201c52f187795e5382e7d8", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.nfo": "6eba1138f978d7e0e032a8ff11a78a20", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.nfo": "7d8f03bdcd8ee66fd1578a86f20365cc", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "255dd9d2e566d4951c228c333c88de34", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "9ec937cc60b7e8fef0a6741033d539e3", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.mp4": "f955993d7c3bd19a3f1974f9ca8fa8d5", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "ec8d3183eb5cde222f50d61a8cfebc0c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "7f71bd60012d850ece38fa644eeddc5e", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.info.json": "9ca487486489a07f45a3671833b46200", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.info.json": "9cc088e0502239894663985c73cbb8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.mp4": "65278e617ec6faae1fa5e1cc150b40bc", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.nfo": "014128496d2665bd25cbcd1b58057201", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.nfo": "39996f43e9761247dce614247f99c808", "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.info.json": "3c5529c60a981d3004dec4be0dd44386", + "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.info.json": "376f0187fb4be474af0634cab27a94a3", "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.mp4": "ae68c2c53268d732849149196e531935", - "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.nfo": "3054d8425b5c427641f2b6d041ed60f6", + "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.nfo": "cae377877c966dad492eaa3f224b86ba", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.info.json": "055914a06fdd556c4b8a7d9ba6868b5c", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.info.json": "753590baac8c807337d7be2c6a1bee17", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.mp4": "838968aa64d56f99166bc2867879da0d", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.nfo": "0bff78c767cc262ecd417de4e5dc6d87", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.nfo": "974bb83bd43b9579ab1716f66589ccc1", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.info.json": "12e7c2ce72158a89a185b1860c7dc7d2", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.info.json": "eafd4c6ae0be81da688c25c305de550a", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.mp4": "1109271e45e1c7ce0652b4e8e567d6bb", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.nfo": "44b60f61267af80173b12bf6f6da2a08", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.nfo": "b12dcb09ffad7f23f21d350e1f60f128", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.info.json": "65473bcb02396628d81ab3c51dac6b05", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.info.json": "776544b88a36a0ed7842ad34b462947c", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.mp4": "57644342b3e0f8697328fff415fd9bd6", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.nfo": "99b0bceefaa906c65eb8ad692dee99bf", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.nfo": "e6fd0fc3e95b77c595d1a77c2060fd98", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.info.json": "406629e815a560ee1078a2d2f0e2eabc", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.info.json": "fac6137b97e4db79621f55694fd5ed07", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.mp4": "bae6a68cab905f3d67fe95de2c0b11b4", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.nfo": "b4d3075e68a25f9229537ddf3427fd53", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.nfo": "23386ea27c1e64afcecdb235acb81b79", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.json index cff1d95b..20b995d6 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.json @@ -1,40 +1,40 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "c7c2427315924db344d4659a60c59bc9", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.info.json": "53e336dc82cf7a65fc62b0783c581059", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.info.json": "d699b2e091b389dd470a8d6719b87d00", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.mp4": "3abb120022201c52f187795e5382e7d8", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.nfo": "6eba1138f978d7e0e032a8ff11a78a20", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.nfo": "7d8f03bdcd8ee66fd1578a86f20365cc", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "88f6e9dd1573dbd3388432c9a04a0e09", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "8318cac15f71dfaa373ebb8470288f82", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.mp4": "f955993d7c3bd19a3f1974f9ca8fa8d5", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "ec8d3183eb5cde222f50d61a8cfebc0c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "7f71bd60012d850ece38fa644eeddc5e", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.info.json": "8310c540da3f4d8449d93b849f63dbdd", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.info.json": "d7e89687663d7251635f6011acf76ca2", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.mp4": "65278e617ec6faae1fa5e1cc150b40bc", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.nfo": "014128496d2665bd25cbcd1b58057201", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.nfo": "39996f43e9761247dce614247f99c808", "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.info.json": "231bcbd664181d6c59f8b4d9eefec368", + "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.info.json": "d27c625857e68c56ffa89a199d21c1a2", "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.mp4": "ae68c2c53268d732849149196e531935", - "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.nfo": "3054d8425b5c427641f2b6d041ed60f6", + "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.nfo": "cae377877c966dad492eaa3f224b86ba", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.info.json": "46447ae5b21700bf7e71cf9674a50287", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.info.json": "eb87faf31e9521949e1d46caa9bdaeba", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.mp4": "838968aa64d56f99166bc2867879da0d", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.nfo": "0bff78c767cc262ecd417de4e5dc6d87", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.nfo": "974bb83bd43b9579ab1716f66589ccc1", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.info.json": "32d815d4e3a6ed68514ea871cb684359", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.info.json": "f9b1724b674ce5fe90ca3da72b9dce50", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.mp4": "1109271e45e1c7ce0652b4e8e567d6bb", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.nfo": "44b60f61267af80173b12bf6f6da2a08", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.nfo": "b12dcb09ffad7f23f21d350e1f60f128", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.info.json": "995e67fcd1b2615d8c594cf8e65e6d56", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.info.json": "c21e448042a9ce3f81651726f8ac8586", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.mp4": "57644342b3e0f8697328fff415fd9bd6", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.nfo": "99b0bceefaa906c65eb8ad692dee99bf", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.nfo": "e6fd0fc3e95b77c595d1a77c2060fd98", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.info.json": "7bbd18cae95324d002f8a1fe68ceadf0", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.info.json": "1ff4454ef2e877c2bb857da26aa59a0d", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.mp4": "bae6a68cab905f3d67fe95de2c0b11b4", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.nfo": "b4d3075e68a25f9229537ddf3427fd53", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.nfo": "23386ea27c1e64afcecdb235acb81b79", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.json index e91bc46c..2bb3afa5 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.json @@ -1,21 +1,21 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "809885e6c29bba06215b840516628090", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.info.json": "c68ed4baf5360c98bda46de2c3129e17", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.info.json": "001f7b61786b4ecb207cdf45fc6838e8", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.mp4": "82258d5ed3062fc8fd986ec9bedec888", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.nfo": "d98e09fe2cdc240f71bfce032de2718d", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.nfo": "ddf2763f976aaa79199bddbfd3b66501", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.info.json": "2573381bab5b0c84d39def520326ff01", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.info.json": "893ed940046b8a650af0072029292899", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.mp4": "d3c9d4918af48a3da67baabab3535e20", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.nfo": "0701fef77bec0832582d7ba9ef27673d", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.nfo": "cda58b9d5b7ee05d5e4d5144ebfe0f94", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.info.json": "c030e9ec6c67e24845a1f80e60c49c2a", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.info.json": "e8acab0ed714ef96a6d1463154996a5b", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.mp4": "a464e06a6679b3de0dd332b0022aa7bb", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.nfo": "89b788b16e3cf45a20c6a5fcfafa130c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.nfo": "4d5775492f2731cb5dc04a84ebcb029d", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.info.json": "1a658e535689ba3312a79251d0603abb", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.info.json": "eaa3f351703b80239f15c03c5b727f31", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.mp4": "555fdada3339f0d359656478d9d171d2", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.nfo": "93f63d6bf1d7dcc9c6cdc674164affeb", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.nfo": "2980b224863465a8b8a465c9d381d1f4", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.json index 6b9e3948..79ada9c0 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.json @@ -1,23 +1,23 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "809885e6c29bba06215b840516628090", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.info.json": "60f7a22320435d0f3930ea9d8f0df6f0", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.info.json": "37c636ccbbbde5211290aa40e86c95ca", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.mp4": "82258d5ed3062fc8fd986ec9bedec888", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.nfo": "d98e09fe2cdc240f71bfce032de2718d", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.nfo": "ddf2763f976aaa79199bddbfd3b66501", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.info.json": "657cfbc1acf4e35060f1e8dc53910dad", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.info.json": "2ee2edf10085b2aa3a3a1cd1850cfab1", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.mp4": "d3c9d4918af48a3da67baabab3535e20", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.nfo": "0701fef77bec0832582d7ba9ef27673d", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.nfo": "cda58b9d5b7ee05d5e4d5144ebfe0f94", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.info.json": "6d8e82812ee2d93109372468802f625b", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.info.json": "473f212008eabbff7614e092e39c0e83", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.mp4": "a464e06a6679b3de0dd332b0022aa7bb", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.nfo": "89b788b16e3cf45a20c6a5fcfafa130c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.nfo": "4d5775492f2731cb5dc04a84ebcb029d", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.info.json": "9111eb8be07d8fce5cab4257a049bd16", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.info.json": "23ea4fc60be000f224c60911133445c4", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.mp4": "555fdada3339f0d359656478d9d171d2", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.nfo": "93f63d6bf1d7dcc9c6cdc674164affeb", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.nfo": "2980b224863465a8b8a465c9d381d1f4", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.json index 573ef879..44bc8efd 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "7331c3a7cc0b43cd547b82af4ec35a3f", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.info.json": "3c5529c60a981d3004dec4be0dd44386", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.info.json": "376f0187fb4be474af0634cab27a94a3", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.mp4": "6ba89f1f4436cc71bbe572bcf5a4c077", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.nfo": "a20944ff3b93d969fe24f8e8b36fdbe3", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.nfo": "42ad110e3f608de3edb94735631d39a7", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.info.json": "9ca487486489a07f45a3671833b46200", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.info.json": "9cc088e0502239894663985c73cbb8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.mp4": "86158254bbe1cd4de61f2f03d63c4afc", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.nfo": "1f06a876e72883b43c1b31eb70dba10c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.nfo": "ea4dee97b5bb9e49cb72f0942f851feb", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "255dd9d2e566d4951c228c333c88de34", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "9ec937cc60b7e8fef0a6741033d539e3", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.mp4": "f955993d7c3bd19a3f1974f9ca8fa8d5", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "ec8d3183eb5cde222f50d61a8cfebc0c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "7f71bd60012d850ece38fa644eeddc5e", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.info.json": "b3d16c01cdf9680ebe60808f2f500ee9", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.info.json": "28de4c86761f962a274f877676273f42", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.mp4": "68380cbe2709d869c965a8aee21217f9", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.nfo": "01e3dae366e239640e7f27e3d40893c4", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.nfo": "c487f013b8d5adc399a793bc803b898f", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.info.json": "406629e815a560ee1078a2d2f0e2eabc", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.info.json": "fac6137b97e4db79621f55694fd5ed07", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.mp4": "82258d5ed3062fc8fd986ec9bedec888", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.nfo": "19bacafcb4e9125bec9f804a6dc4318e", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.nfo": "4eedc1c0e99858530e6228001d024766", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.info.json": "65473bcb02396628d81ab3c51dac6b05", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.info.json": "776544b88a36a0ed7842ad34b462947c", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.mp4": "d3c9d4918af48a3da67baabab3535e20", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.nfo": "ccdea0447b933e4e3affe6ec5aa45aae", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.nfo": "cc1541a65508fcbfd9f024042cb6b6ce", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.info.json": "12e7c2ce72158a89a185b1860c7dc7d2", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.info.json": "eafd4c6ae0be81da688c25c305de550a", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.mp4": "a464e06a6679b3de0dd332b0022aa7bb", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.nfo": "5cb40adc85b43314bf6458f34e77e61b", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.nfo": "d5fa573faf1d29c367117917417df62c", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.info.json": "055914a06fdd556c4b8a7d9ba6868b5c", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.info.json": "753590baac8c807337d7be2c6a1bee17", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.mp4": "555fdada3339f0d359656478d9d171d2", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.nfo": "237e0ff3ec6927277f7e7a4f98c51fc7", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.nfo": "6c40cd5d13c8d088e57906e809a591f8", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.json index c58a397a..09b810fd 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.json @@ -1,40 +1,40 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "7331c3a7cc0b43cd547b82af4ec35a3f", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.info.json": "231bcbd664181d6c59f8b4d9eefec368", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.info.json": "d27c625857e68c56ffa89a199d21c1a2", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.mp4": "6ba89f1f4436cc71bbe572bcf5a4c077", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.nfo": "a20944ff3b93d969fe24f8e8b36fdbe3", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.nfo": "42ad110e3f608de3edb94735631d39a7", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.info.json": "8310c540da3f4d8449d93b849f63dbdd", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.info.json": "d7e89687663d7251635f6011acf76ca2", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.mp4": "86158254bbe1cd4de61f2f03d63c4afc", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.nfo": "1f06a876e72883b43c1b31eb70dba10c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.nfo": "ea4dee97b5bb9e49cb72f0942f851feb", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "88f6e9dd1573dbd3388432c9a04a0e09", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "8318cac15f71dfaa373ebb8470288f82", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.mp4": "f955993d7c3bd19a3f1974f9ca8fa8d5", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "ec8d3183eb5cde222f50d61a8cfebc0c", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.nfo": "7f71bd60012d850ece38fa644eeddc5e", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.info.json": "53e336dc82cf7a65fc62b0783c581059", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.info.json": "d699b2e091b389dd470a8d6719b87d00", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.mp4": "68380cbe2709d869c965a8aee21217f9", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.nfo": "01e3dae366e239640e7f27e3d40893c4", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.nfo": "c487f013b8d5adc399a793bc803b898f", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.info.json": "7bbd18cae95324d002f8a1fe68ceadf0", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.info.json": "1ff4454ef2e877c2bb857da26aa59a0d", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.mp4": "82258d5ed3062fc8fd986ec9bedec888", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.nfo": "19bacafcb4e9125bec9f804a6dc4318e", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.nfo": "4eedc1c0e99858530e6228001d024766", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.info.json": "995e67fcd1b2615d8c594cf8e65e6d56", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.info.json": "c21e448042a9ce3f81651726f8ac8586", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.mp4": "d3c9d4918af48a3da67baabab3535e20", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.nfo": "ccdea0447b933e4e3affe6ec5aa45aae", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.nfo": "cc1541a65508fcbfd9f024042cb6b6ce", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.info.json": "32d815d4e3a6ed68514ea871cb684359", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.info.json": "f9b1724b674ce5fe90ca3da72b9dce50", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.mp4": "a464e06a6679b3de0dd332b0022aa7bb", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.nfo": "5cb40adc85b43314bf6458f34e77e61b", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.nfo": "d5fa573faf1d29c367117917417df62c", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.info.json": "46447ae5b21700bf7e71cf9674a50287", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.info.json": "eb87faf31e9521949e1d46caa9bdaeba", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.mp4": "555fdada3339f0d359656478d9d171d2", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.nfo": "237e0ff3ec6927277f7e7a4f98c51fc7", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.nfo": "6c40cd5d13c8d088e57906e809a591f8", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.json index d7ad2fb8..b5e89d16 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.json @@ -1,21 +1,21 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "ede1deeba072bae50f7f7039deca0543", "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.info.json": "c68ed4baf5360c98bda46de2c3129e17", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.info.json": "001f7b61786b4ecb207cdf45fc6838e8", "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.mp4": "2ed76a1c5ca5aefc99cafbe45beb7968", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.nfo": "a36e38ad59df8bded30088536d84ebc4", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.nfo": "043c6de15ab09f32e64414d1f4a8a89c", "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.info.json": "2573381bab5b0c84d39def520326ff01", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.info.json": "893ed940046b8a650af0072029292899", "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.mp4": "e98fdf4ba39fa60c6349152c65352df7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.nfo": "a291af8fe16b1f299ac2300750328f53", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.nfo": "4fb018858502fe2c7a0d3dcb89145a8d", "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.info.json": "c030e9ec6c67e24845a1f80e60c49c2a", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.info.json": "e8acab0ed714ef96a6d1463154996a5b", "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.mp4": "1dd828f81bcb808ad91f6d1da8cce235", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.nfo": "edadbfb231f45c802411cc4455f7a2bf", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.nfo": "6ac2ee3bd87b453d56bd90b42bbf52a0", "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.info.json": "1a658e535689ba3312a79251d0603abb", + "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.info.json": "eaa3f351703b80239f15c03c5b727f31", "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.mp4": "052709f404d1ec6a33c8a0b52e133c83", - "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.nfo": "08aec54e062efb6805c0f5c58b630131", + "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.nfo": "d54ba1888f0083f8de6f401e399ad379", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.json index 4e320bd2..18df52ea 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.json @@ -1,23 +1,23 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "ede1deeba072bae50f7f7039deca0543", "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.info.json": "60f7a22320435d0f3930ea9d8f0df6f0", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.info.json": "37c636ccbbbde5211290aa40e86c95ca", "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.mp4": "2ed76a1c5ca5aefc99cafbe45beb7968", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.nfo": "a36e38ad59df8bded30088536d84ebc4", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.nfo": "043c6de15ab09f32e64414d1f4a8a89c", "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.info.json": "657cfbc1acf4e35060f1e8dc53910dad", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.info.json": "2ee2edf10085b2aa3a3a1cd1850cfab1", "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.mp4": "e98fdf4ba39fa60c6349152c65352df7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.nfo": "a291af8fe16b1f299ac2300750328f53", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.nfo": "4fb018858502fe2c7a0d3dcb89145a8d", "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.info.json": "6d8e82812ee2d93109372468802f625b", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.info.json": "473f212008eabbff7614e092e39c0e83", "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.mp4": "1dd828f81bcb808ad91f6d1da8cce235", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.nfo": "edadbfb231f45c802411cc4455f7a2bf", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.nfo": "6ac2ee3bd87b453d56bd90b42bbf52a0", "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.info.json": "9111eb8be07d8fce5cab4257a049bd16", + "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.info.json": "23ea4fc60be000f224c60911133445c4", "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.mp4": "052709f404d1ec6a33c8a0b52e133c83", - "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.nfo": "08aec54e062efb6805c0f5c58b630131", + "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.nfo": "d54ba1888f0083f8de6f401e399ad379", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.json index bfb31e9b..41295381 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "9b9e26ff3d036f450501bf5adb979aeb", "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.info.json": "3c5529c60a981d3004dec4be0dd44386", + "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.info.json": "376f0187fb4be474af0634cab27a94a3", "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.mp4": "98da10d4278b3b4fbc3a52a57ce8faea", - "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.nfo": "1b62ea9dfd8c7c72450e08be11d5f475", + "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.nfo": "9ceac835c0166bf4f7354106379e6d17", "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.info.json": "9ca487486489a07f45a3671833b46200", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.info.json": "9cc088e0502239894663985c73cbb8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.mp4": "2d964ed943027358d440b2c6faf00f56", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.nfo": "a25eccc9148803dd3e7ef562454525ac", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.nfo": "35f15e5437cae813095fe2ca3bd2ca18", "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.info.json": "255dd9d2e566d4951c228c333c88de34", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.info.json": "9ec937cc60b7e8fef0a6741033d539e3", "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.mp4": "9a1a761fafc7213e30aedf7ba01e192e", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.nfo": "bade06f775dbc7dcd78a05401787568f", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.nfo": "9aa69e4c86bb282ac57b2024ec2fbd34", "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.info.json": "b3d16c01cdf9680ebe60808f2f500ee9", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.info.json": "28de4c86761f962a274f877676273f42", "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.mp4": "2d09a282c18e12c7b435ec9b0fcd83ba", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.nfo": "519a116ad532dcb5766341ba3e0561c7", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.nfo": "709533b6b8f501196db0d98dfe2b2b16", "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.info.json": "406629e815a560ee1078a2d2f0e2eabc", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.info.json": "fac6137b97e4db79621f55694fd5ed07", "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.mp4": "2ed76a1c5ca5aefc99cafbe45beb7968", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.nfo": "d11af1164318f6b808e3be82dd7d8de5", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.nfo": "05f34cd0e6be4b09ea96134faec892f6", "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.info.json": "65473bcb02396628d81ab3c51dac6b05", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.info.json": "776544b88a36a0ed7842ad34b462947c", "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.mp4": "e98fdf4ba39fa60c6349152c65352df7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.nfo": "95642748ab236e4ceaf5e99498cf9370", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.nfo": "54b4f84daf25626703f7b3a36b0dea49", "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.info.json": "12e7c2ce72158a89a185b1860c7dc7d2", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.info.json": "eafd4c6ae0be81da688c25c305de550a", "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.mp4": "1dd828f81bcb808ad91f6d1da8cce235", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.nfo": "48943588e41681e2d6991cca776ef662", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.nfo": "3d2644161e57b94cfac5e95732864cc3", "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.info.json": "055914a06fdd556c4b8a7d9ba6868b5c", + "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.info.json": "753590baac8c807337d7be2c6a1bee17", "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.mp4": "052709f404d1ec6a33c8a0b52e133c83", - "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.nfo": "8b5963cf45877c576de8f533171ebaf2", + "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.nfo": "fd91adb2089d0fcdbb2e568a10ac880e", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.json index 830154d8..20ac9c05 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.json @@ -1,40 +1,40 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "9b9e26ff3d036f450501bf5adb979aeb", "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.info.json": "231bcbd664181d6c59f8b4d9eefec368", + "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.info.json": "d27c625857e68c56ffa89a199d21c1a2", "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.mp4": "98da10d4278b3b4fbc3a52a57ce8faea", - "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.nfo": "1b62ea9dfd8c7c72450e08be11d5f475", + "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.nfo": "9ceac835c0166bf4f7354106379e6d17", "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.info.json": "8310c540da3f4d8449d93b849f63dbdd", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.info.json": "d7e89687663d7251635f6011acf76ca2", "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.mp4": "2d964ed943027358d440b2c6faf00f56", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.nfo": "a25eccc9148803dd3e7ef562454525ac", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.nfo": "35f15e5437cae813095fe2ca3bd2ca18", "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.info.json": "88f6e9dd1573dbd3388432c9a04a0e09", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.info.json": "8318cac15f71dfaa373ebb8470288f82", "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.mp4": "9a1a761fafc7213e30aedf7ba01e192e", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.nfo": "bade06f775dbc7dcd78a05401787568f", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.nfo": "9aa69e4c86bb282ac57b2024ec2fbd34", "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.info.json": "53e336dc82cf7a65fc62b0783c581059", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.info.json": "d699b2e091b389dd470a8d6719b87d00", "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.mp4": "2d09a282c18e12c7b435ec9b0fcd83ba", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.nfo": "519a116ad532dcb5766341ba3e0561c7", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.nfo": "709533b6b8f501196db0d98dfe2b2b16", "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.info.json": "7bbd18cae95324d002f8a1fe68ceadf0", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.info.json": "1ff4454ef2e877c2bb857da26aa59a0d", "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.mp4": "2ed76a1c5ca5aefc99cafbe45beb7968", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.nfo": "d11af1164318f6b808e3be82dd7d8de5", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.nfo": "05f34cd0e6be4b09ea96134faec892f6", "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.info.json": "995e67fcd1b2615d8c594cf8e65e6d56", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.info.json": "c21e448042a9ce3f81651726f8ac8586", "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.mp4": "e98fdf4ba39fa60c6349152c65352df7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.nfo": "95642748ab236e4ceaf5e99498cf9370", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.nfo": "54b4f84daf25626703f7b3a36b0dea49", "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.info.json": "32d815d4e3a6ed68514ea871cb684359", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.info.json": "f9b1724b674ce5fe90ca3da72b9dce50", "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.mp4": "1dd828f81bcb808ad91f6d1da8cce235", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.nfo": "48943588e41681e2d6991cca776ef662", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.nfo": "3d2644161e57b94cfac5e95732864cc3", "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.info.json": "46447ae5b21700bf7e71cf9674a50287", + "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.info.json": "eb87faf31e9521949e1d46caa9bdaeba", "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.mp4": "052709f404d1ec6a33c8a0b52e133c83", - "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.nfo": "8b5963cf45877c576de8f533171ebaf2", + "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.nfo": "fd91adb2089d0fcdbb2e568a10ac880e", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.json index 94e8623c..fc39e99c 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.json @@ -1,21 +1,21 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "e26598ffd47b150e6bf09e5490546e94", "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.info.json": "1a658e535689ba3312a79251d0603abb", + "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.info.json": "eaa3f351703b80239f15c03c5b727f31", "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.mp4": "d885df2112e5fdd5b0f20876851ef438", - "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.nfo": "7db44b51e23c9837643e8673d1283508", + "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.nfo": "a7e21040a3fcb264f287e4eba1853f94", "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.info.json": "c030e9ec6c67e24845a1f80e60c49c2a", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.info.json": "e8acab0ed714ef96a6d1463154996a5b", "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.mp4": "456a1778941f9abf6ee3b515e44ab8d1", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.nfo": "3bb75efbd42767816433b91e7a9831a1", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.nfo": "78c08ad76d004a74cdba012f0b746c22", "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.info.json": "2573381bab5b0c84d39def520326ff01", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.info.json": "893ed940046b8a650af0072029292899", "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.mp4": "4319b061434ab13ee20ac4d64980025b", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.nfo": "ab53bc2d39b3fe8c48c9a2778e294ba4", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.nfo": "d9031d8608d12742c40a3279138c8371", "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.info.json": "c68ed4baf5360c98bda46de2c3129e17", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.info.json": "001f7b61786b4ecb207cdf45fc6838e8", "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.mp4": "b0777c0678763c456fdb9fbbf90c371a", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.nfo": "0bda771e2b8b36add309ea42f331cbc4", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.nfo": "74bd8dc59c5b76ae112d90638977c464", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.json index 6d18ec0c..b6a15609 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.json @@ -1,23 +1,23 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "e26598ffd47b150e6bf09e5490546e94", "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.info.json": "9111eb8be07d8fce5cab4257a049bd16", + "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.info.json": "23ea4fc60be000f224c60911133445c4", "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.mp4": "d885df2112e5fdd5b0f20876851ef438", - "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.nfo": "7db44b51e23c9837643e8673d1283508", + "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.nfo": "a7e21040a3fcb264f287e4eba1853f94", "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.info.json": "6d8e82812ee2d93109372468802f625b", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.info.json": "473f212008eabbff7614e092e39c0e83", "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.mp4": "456a1778941f9abf6ee3b515e44ab8d1", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.nfo": "3bb75efbd42767816433b91e7a9831a1", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.nfo": "78c08ad76d004a74cdba012f0b746c22", "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.info.json": "657cfbc1acf4e35060f1e8dc53910dad", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.info.json": "2ee2edf10085b2aa3a3a1cd1850cfab1", "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.mp4": "4319b061434ab13ee20ac4d64980025b", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.nfo": "ab53bc2d39b3fe8c48c9a2778e294ba4", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.nfo": "d9031d8608d12742c40a3279138c8371", "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.info.json": "60f7a22320435d0f3930ea9d8f0df6f0", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.info.json": "37c636ccbbbde5211290aa40e86c95ca", "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.mp4": "b0777c0678763c456fdb9fbbf90c371a", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.nfo": "0bda771e2b8b36add309ea42f331cbc4", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.nfo": "74bd8dc59c5b76ae112d90638977c464", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "74f25c32037e1a6028bfe93c1896c9c2" + "Best Prebuilt TV Show Collection/tvshow.nfo": "a3f1061135b7aa0c25e5176a271d32f0" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.json index edd8aaa7..91b9ac43 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.json @@ -1,38 +1,38 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "2990d95213df5a6c87825a28daa970f4", "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.info.json": "b3d16c01cdf9680ebe60808f2f500ee9", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.info.json": "28de4c86761f962a274f877676273f42", "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.mp4": "5f700d73364bb0c1ccfa34987abf5b4a", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.nfo": "4c7e90f8299dc8937db757b9b6c36bd6", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.nfo": "0242d92e5e0d26745948b42c25eecfba", "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.info.json": "255dd9d2e566d4951c228c333c88de34", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.info.json": "9ec937cc60b7e8fef0a6741033d539e3", "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.mp4": "938c64fafcc01d68811729cc6277364b", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.nfo": "5fa52bcd59ed344c6c27e8dd9352c292", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.nfo": "52b17bcad30adb6eaef4c3b21c1af76b", "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.info.json": "9ca487486489a07f45a3671833b46200", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.info.json": "9cc088e0502239894663985c73cbb8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.mp4": "7e62cec1dd4ab9d6dc429684b12bd8a6", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.nfo": "ec78bfbb517097f0189803a1c8e8625e", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.nfo": "31fb72d089fd680fea1340f3d3c41d64", "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.info.json": "3c5529c60a981d3004dec4be0dd44386", + "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.info.json": "376f0187fb4be474af0634cab27a94a3", "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.mp4": "75df3f9f617361c65178484d87625789", - "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.nfo": "615f8e861c468182f1c1f14403484291", + "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.nfo": "df65227ee260219883ff618c9fbdf1d4", "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.info.json": "055914a06fdd556c4b8a7d9ba6868b5c", + "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.info.json": "753590baac8c807337d7be2c6a1bee17", "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.mp4": "d885df2112e5fdd5b0f20876851ef438", - "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.nfo": "a0370f0b5d293588ab19fea2d8fe761d", + "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.nfo": "0e4ea058d6a1e8760c80d3a02d25aafc", "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.info.json": "12e7c2ce72158a89a185b1860c7dc7d2", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.info.json": "eafd4c6ae0be81da688c25c305de550a", "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.mp4": "456a1778941f9abf6ee3b515e44ab8d1", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.nfo": "015251bbd9010955553dfdd6df510107", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.nfo": "1095322364e512dff963a44b2beffe30", "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.info.json": "65473bcb02396628d81ab3c51dac6b05", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.info.json": "776544b88a36a0ed7842ad34b462947c", "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.mp4": "4319b061434ab13ee20ac4d64980025b", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.nfo": "622464af168f066ca0129ac7de341a2b", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.nfo": "5130c71d99f1c0726fee8cb8c9d82ba7", "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.info.json": "406629e815a560ee1078a2d2f0e2eabc", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.info.json": "fac6137b97e4db79621f55694fd5ed07", "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.mp4": "b0777c0678763c456fdb9fbbf90c371a", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.nfo": "53b6d9b4580a28c0a6b6ff4d770b1eaf", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.nfo": "bde2a5401c49b58de0eacea4145d91ae", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.json index 1e82640e..c29ae1ad 100644 --- a/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.json @@ -1,40 +1,40 @@ { "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "2990d95213df5a6c87825a28daa970f4", "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.info.json": "53e336dc82cf7a65fc62b0783c581059", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.info.json": "d699b2e091b389dd470a8d6719b87d00", "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.mp4": "5f700d73364bb0c1ccfa34987abf5b4a", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.nfo": "4c7e90f8299dc8937db757b9b6c36bd6", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.nfo": "0242d92e5e0d26745948b42c25eecfba", "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.info.json": "88f6e9dd1573dbd3388432c9a04a0e09", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.info.json": "8318cac15f71dfaa373ebb8470288f82", "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.mp4": "938c64fafcc01d68811729cc6277364b", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.nfo": "5fa52bcd59ed344c6c27e8dd9352c292", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.nfo": "52b17bcad30adb6eaef4c3b21c1af76b", "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.info.json": "8310c540da3f4d8449d93b849f63dbdd", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.info.json": "d7e89687663d7251635f6011acf76ca2", "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.mp4": "7e62cec1dd4ab9d6dc429684b12bd8a6", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.nfo": "ec78bfbb517097f0189803a1c8e8625e", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.nfo": "31fb72d089fd680fea1340f3d3c41d64", "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.info.json": "231bcbd664181d6c59f8b4d9eefec368", + "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.info.json": "d27c625857e68c56ffa89a199d21c1a2", "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.mp4": "75df3f9f617361c65178484d87625789", - "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.nfo": "615f8e861c468182f1c1f14403484291", + "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.nfo": "df65227ee260219883ff618c9fbdf1d4", "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.info.json": "46447ae5b21700bf7e71cf9674a50287", + "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.info.json": "eb87faf31e9521949e1d46caa9bdaeba", "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.mp4": "d885df2112e5fdd5b0f20876851ef438", - "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.nfo": "a0370f0b5d293588ab19fea2d8fe761d", + "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.nfo": "0e4ea058d6a1e8760c80d3a02d25aafc", "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.info.json": "32d815d4e3a6ed68514ea871cb684359", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.info.json": "f9b1724b674ce5fe90ca3da72b9dce50", "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.mp4": "456a1778941f9abf6ee3b515e44ab8d1", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.nfo": "015251bbd9010955553dfdd6df510107", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.nfo": "1095322364e512dff963a44b2beffe30", "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.info.json": "995e67fcd1b2615d8c594cf8e65e6d56", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.info.json": "c21e448042a9ce3f81651726f8ac8586", "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.mp4": "4319b061434ab13ee20ac4d64980025b", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.nfo": "622464af168f066ca0129ac7de341a2b", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.nfo": "5130c71d99f1c0726fee8cb8c9d82ba7", "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.info.json": "7bbd18cae95324d002f8a1fe68ceadf0", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.info.json": "1ff4454ef2e877c2bb857da26aa59a0d", "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.mp4": "b0777c0678763c456fdb9fbbf90c371a", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.nfo": "53b6d9b4580a28c0a6b6ff4d770b1eaf", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.nfo": "bde2a5401c49b58de0eacea4145d91ae", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a", "Best Prebuilt TV Show Collection/season01-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/season02-poster.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/tvshow.nfo": "c9ffdb7b90ec5ebeb7e6ea105c1b7908" + "Best Prebuilt TV Show Collection/tvshow.nfo": "61943a17325c5188475651ca7c68446d" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.json index 07fcf1b9..f379e845 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.json @@ -1,15 +1,15 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "0011c85c3339ac1301d80be2f3330e67", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "f1315ac907d99c567839ac982b396f51", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "44a703e77c8285e81fec57ed9000bb0c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.mp4": "5f221fdf07f200a297427b5df953d96f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "559c970f2fde6db18d42850b65f038b4", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "3fe91099a510c9dc820a0a7adba98868", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.mp4": "240eb2e4df1abb10290f957d75f2522c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "6e712b8c5b40f3622732f087127d75f3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "e780d5e9e678d4aae5b131a5f3603695", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.mp4": "0c58e78e7727c893226b9fcbe39b1791", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "61d42a2f8aa085eae5758206ff853538", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "4a4d542da434d5b3ff8d304f0e077469", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.mp4": "8b75d7f6f6f84cccf1867a91d15044a6" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.json index 1ab36967..b1c380b6 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.json @@ -1,27 +1,27 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "17d1886cf9a511f80a288f9eb19eb20e", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "4b04325397e3b9ed0ee51f319ce07353", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "3caee440547dd4ed46ec3cdca46978f2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.mp4": "5f221fdf07f200a297427b5df953d96f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "729ca4dba26539e6d8c04443c9aa67ab", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "0b180b38ac673e7e320e9e615974fe41", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.mp4": "240eb2e4df1abb10290f957d75f2522c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "075f2c2ce8c995195decf755fc980c89", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "5b26edd07c0534d53884d6a42908f8db", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.mp4": "0c58e78e7727c893226b9fcbe39b1791", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.info.json": "e3b5da94c5a86db003633570af47d1a9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.info.json": "629fb263cff2e93b7ec67769ebbc75e0", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.mp4": "e8b77ffd826f8f7233b875e311adaf34", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.info.json": "c572cf9767af2221f4e88b40ab11e7dd", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.info.json": "0a3998c019cc33845be703ca1bb448f9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.mp4": "4343e692b53f0abce80559b59ef2fa0c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.info.json": "4fe8ba1b78f29c9e578d84d3ef6e8caa", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.info.json": "e891c1960d5c29b5e1e73c98ecf2e7f6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.mp4": "dea5d69ae35e47aa78a51f464088a6ad", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.info.json": "943a66e92c610b032471cf684fa2cdf0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.info.json": "fe18c65b99ca8942e65d777c9a498577", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.mp4": "b2f03dcefe44b8afc65b2500c873aec2", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "fc9484dbc42b6fd6149fdcacc235e206", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "aeeb1be477400f34485799112a8121c2", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.mp4": "8b75d7f6f6f84cccf1867a91d15044a6" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.json index b49f7161..0f75047c 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.json @@ -1,16 +1,16 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "0011c85c3339ac1301d80be2f3330e67", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "044162512a1982b573a0d6f19646801a", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "bebd3dafb168c976a8c817e83a550ce2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.mp4": "5f221fdf07f200a297427b5df953d96f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "d6e1d8a486125f87d04959607e2dc515", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "7543d21dcf2bd220a9ce4cd15f1e1578", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.mp4": "240eb2e4df1abb10290f957d75f2522c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "5632b6ac9992ee07bf6052e9c87a02c5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "921a343cf11be7cc492678459dbdd926", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.mp4": "0c58e78e7727c893226b9fcbe39b1791", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "aa1269526f1e384b25d630c7db17860e", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "5757f06de01c68c5104ec7a7b0c6a69b", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.mp4": "8b75d7f6f6f84cccf1867a91d15044a6", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.json index a5a82a53..02132897 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.json @@ -1,28 +1,28 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "17d1886cf9a511f80a288f9eb19eb20e", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "b8f3acff3cb18657dfa8a37b037c78f1", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.info.json": "3a613f0724932930ab746bcf9f8bdf42", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000001 - Mock Entry 20-3.mp4": "5f221fdf07f200a297427b5df953d96f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "e4efb3ea481b6936d188470ace4d6bae", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.info.json": "a702f2b8e66c348ceb3ec1fd65956024", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000002 - Mock Entry 20-2.mp4": "240eb2e4df1abb10290f957d75f2522c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "683d44d82d8854b1bed529196dc091c9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.info.json": "455e6a6bce2b8630d1a53e11c5554362", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000003 - Mock Entry 20-1.mp4": "0c58e78e7727c893226b9fcbe39b1791", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.info.json": "f2ab803ea763a11fb271d7a36b2eb340", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.info.json": "04c2a406e17fb509e849c3d5ccac8b5e", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000005 - Mock Entry 20-7.mp4": "e8b77ffd826f8f7233b875e311adaf34", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.info.json": "6e010415351d9d94f64624607d7ad831", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.info.json": "b5960c859c450da1c40fe68951499a8f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000006 - Mock Entry 20-6.mp4": "4343e692b53f0abce80559b59ef2fa0c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.info.json": "7214c68d8bd6f3c714dee034a5e04fa8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.info.json": "1892550ced3033c5b779324e39ef77ac", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000007 - Mock Entry 20-5.mp4": "dea5d69ae35e47aa78a51f464088a6ad", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.info.json": "d04117d103932f217a50e1a28db42962", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.info.json": "03254329cabbac6a887801d1a3a4a9fc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e000008 - Mock Entry 20-4.mp4": "b2f03dcefe44b8afc65b2500c873aec2", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "e33b506e3e441ad05af03826b8ccb758", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.info.json": "09b731b1e404368cf7ce3fe8197e1de9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e000004 - Mock Entry 21-1.mp4": "8b75d7f6f6f84cccf1867a91d15044a6", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.json index b044d5fe..bc60e393 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.json @@ -1,15 +1,15 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "6cd67e6b935bc5b2521f6ed0fa2ea2ed", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "f1315ac907d99c567839ac982b396f51", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "44a703e77c8285e81fec57ed9000bb0c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.mp4": "72205b53c6e2d477372e3d5bb3d35fff", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "559c970f2fde6db18d42850b65f038b4", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "3fe91099a510c9dc820a0a7adba98868", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.mp4": "bc7ffede56ed138f592d76a3a02681ae", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "6e712b8c5b40f3622732f087127d75f3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "e780d5e9e678d4aae5b131a5f3603695", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.mp4": "4825194cd6a037b79997cfb2d08ed444", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "61d42a2f8aa085eae5758206ff853538", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "4a4d542da434d5b3ff8d304f0e077469", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.mp4": "efd9d3b1f941386c031e5899aa3042ed" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.json index d1fd9a36..bd7b234c 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.json @@ -1,27 +1,27 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "d34c5dd61cc79d80d1da5ccbba196fcf", "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.info.json": "e3b5da94c5a86db003633570af47d1a9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.info.json": "629fb263cff2e93b7ec67769ebbc75e0", "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.mp4": "a44c49a4adb03fc619ff10a37025c09d", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.info.json": "c572cf9767af2221f4e88b40ab11e7dd", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.info.json": "0a3998c019cc33845be703ca1bb448f9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.mp4": "ca2a1e878e543c73e5d95c983580ea66", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.info.json": "4fe8ba1b78f29c9e578d84d3ef6e8caa", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.info.json": "e891c1960d5c29b5e1e73c98ecf2e7f6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.mp4": "1ed7951cb4414e79f78f48176f9fc2c2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.info.json": "943a66e92c610b032471cf684fa2cdf0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.info.json": "fe18c65b99ca8942e65d777c9a498577", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.mp4": "fdc41ef1aceab35f2f229962ec4bb66a", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "4b04325397e3b9ed0ee51f319ce07353", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "3caee440547dd4ed46ec3cdca46978f2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.mp4": "72205b53c6e2d477372e3d5bb3d35fff", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "729ca4dba26539e6d8c04443c9aa67ab", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "0b180b38ac673e7e320e9e615974fe41", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.mp4": "bc7ffede56ed138f592d76a3a02681ae", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "075f2c2ce8c995195decf755fc980c89", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "5b26edd07c0534d53884d6a42908f8db", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.mp4": "4825194cd6a037b79997cfb2d08ed444", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "fc9484dbc42b6fd6149fdcacc235e206", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "aeeb1be477400f34485799112a8121c2", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.mp4": "efd9d3b1f941386c031e5899aa3042ed" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.json index 21d30748..27fd1313 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.json @@ -1,16 +1,16 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "6cd67e6b935bc5b2521f6ed0fa2ea2ed", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "044162512a1982b573a0d6f19646801a", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "bebd3dafb168c976a8c817e83a550ce2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.mp4": "72205b53c6e2d477372e3d5bb3d35fff", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "d6e1d8a486125f87d04959607e2dc515", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "7543d21dcf2bd220a9ce4cd15f1e1578", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.mp4": "bc7ffede56ed138f592d76a3a02681ae", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "5632b6ac9992ee07bf6052e9c87a02c5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "921a343cf11be7cc492678459dbdd926", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.mp4": "4825194cd6a037b79997cfb2d08ed444", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "aa1269526f1e384b25d630c7db17860e", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "5757f06de01c68c5104ec7a7b0c6a69b", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.mp4": "efd9d3b1f941386c031e5899aa3042ed", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.json index 92f7c132..a9dc357a 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.json @@ -1,28 +1,28 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "d34c5dd61cc79d80d1da5ccbba196fcf", "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.info.json": "f2ab803ea763a11fb271d7a36b2eb340", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.info.json": "04c2a406e17fb509e849c3d5ccac8b5e", "Best Prebuilt TV Show by Date/Season 2020/s2020.e060601 - Mock Entry 20-7.mp4": "a44c49a4adb03fc619ff10a37025c09d", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.info.json": "6e010415351d9d94f64624607d7ad831", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.info.json": "b5960c859c450da1c40fe68951499a8f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070601 - Mock Entry 20-6.mp4": "ca2a1e878e543c73e5d95c983580ea66", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.info.json": "7214c68d8bd6f3c714dee034a5e04fa8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.info.json": "1892550ced3033c5b779324e39ef77ac", "Best Prebuilt TV Show by Date/Season 2020/s2020.e070602 - Mock Entry 20-5.mp4": "1ed7951cb4414e79f78f48176f9fc2c2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.info.json": "d04117d103932f217a50e1a28db42962", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.info.json": "03254329cabbac6a887801d1a3a4a9fc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080601 - Mock Entry 20-4.mp4": "fdc41ef1aceab35f2f229962ec4bb66a", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "b8f3acff3cb18657dfa8a37b037c78f1", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.info.json": "3a613f0724932930ab746bcf9f8bdf42", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080701 - Mock Entry 20-3.mp4": "72205b53c6e2d477372e3d5bb3d35fff", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "e4efb3ea481b6936d188470ace4d6bae", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.info.json": "a702f2b8e66c348ceb3ec1fd65956024", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080801 - Mock Entry 20-2.mp4": "bc7ffede56ed138f592d76a3a02681ae", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "683d44d82d8854b1bed529196dc091c9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.info.json": "455e6a6bce2b8630d1a53e11c5554362", "Best Prebuilt TV Show by Date/Season 2020/s2020.e080802 - Mock Entry 20-1.mp4": "4825194cd6a037b79997cfb2d08ed444", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "e33b506e3e441ad05af03826b8ccb758", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.info.json": "09b731b1e404368cf7ce3fe8197e1de9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e080801 - Mock Entry 21-1.mp4": "efd9d3b1f941386c031e5899aa3042ed", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.json index c4cc8950..d4c441ba 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.json @@ -1,15 +1,15 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "67e328c022b6600c1741819c30ec9dc4", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "6e712b8c5b40f3622732f087127d75f3", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "e780d5e9e678d4aae5b131a5f3603695", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.mp4": "5eafeb7a1c616dfe02c28fc902ce00fb", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "559c970f2fde6db18d42850b65f038b4", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "3fe91099a510c9dc820a0a7adba98868", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.mp4": "e4a7144efa7039a03ae69460361ae518", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "f1315ac907d99c567839ac982b396f51", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "44a703e77c8285e81fec57ed9000bb0c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.mp4": "7566491129c54183e337e83455ab5bda", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "61d42a2f8aa085eae5758206ff853538", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "4a4d542da434d5b3ff8d304f0e077469", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.mp4": "e94af7eed1fe7d2512d042979ca878dd" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.json index 9bde896d..62bbea9c 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.json @@ -1,27 +1,27 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "9487ba099facca8a1dc26e436ab4843c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "075f2c2ce8c995195decf755fc980c89", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "5b26edd07c0534d53884d6a42908f8db", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.mp4": "5eafeb7a1c616dfe02c28fc902ce00fb", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "729ca4dba26539e6d8c04443c9aa67ab", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "0b180b38ac673e7e320e9e615974fe41", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.mp4": "e4a7144efa7039a03ae69460361ae518", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "4b04325397e3b9ed0ee51f319ce07353", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "3caee440547dd4ed46ec3cdca46978f2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.mp4": "7566491129c54183e337e83455ab5bda", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.info.json": "943a66e92c610b032471cf684fa2cdf0", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.info.json": "fe18c65b99ca8942e65d777c9a498577", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.mp4": "0850f53dd2335ba57632128b9bb9d112", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.info.json": "4fe8ba1b78f29c9e578d84d3ef6e8caa", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.info.json": "e891c1960d5c29b5e1e73c98ecf2e7f6", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.mp4": "0dcd1a017948164d217f0bde59551655", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.info.json": "c572cf9767af2221f4e88b40ab11e7dd", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.info.json": "0a3998c019cc33845be703ca1bb448f9", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.mp4": "6c4b98bd5e32fbffef033f268d8587ae", "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.info.json": "e3b5da94c5a86db003633570af47d1a9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.info.json": "629fb263cff2e93b7ec67769ebbc75e0", "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.mp4": "386aa9718db383c17aafc9a00d61d0f0", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "fc9484dbc42b6fd6149fdcacc235e206", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "aeeb1be477400f34485799112a8121c2", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.mp4": "e94af7eed1fe7d2512d042979ca878dd" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.json index 08a10613..7ddd59be 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.json @@ -1,16 +1,16 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "67e328c022b6600c1741819c30ec9dc4", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "5632b6ac9992ee07bf6052e9c87a02c5", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "921a343cf11be7cc492678459dbdd926", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.mp4": "5eafeb7a1c616dfe02c28fc902ce00fb", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "d6e1d8a486125f87d04959607e2dc515", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "7543d21dcf2bd220a9ce4cd15f1e1578", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.mp4": "e4a7144efa7039a03ae69460361ae518", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "044162512a1982b573a0d6f19646801a", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "bebd3dafb168c976a8c817e83a550ce2", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.mp4": "7566491129c54183e337e83455ab5bda", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "aa1269526f1e384b25d630c7db17860e", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "5757f06de01c68c5104ec7a7b0c6a69b", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.mp4": "e94af7eed1fe7d2512d042979ca878dd", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.json index 62b9713a..a11e6a7e 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.json @@ -1,28 +1,28 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "9487ba099facca8a1dc26e436ab4843c", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "683d44d82d8854b1bed529196dc091c9", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.info.json": "455e6a6bce2b8630d1a53e11c5554362", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14698 - Mock Entry 20-1.mp4": "5eafeb7a1c616dfe02c28fc902ce00fb", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "e4efb3ea481b6936d188470ace4d6bae", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.info.json": "a702f2b8e66c348ceb3ec1fd65956024", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14699 - Mock Entry 20-2.mp4": "e4a7144efa7039a03ae69460361ae518", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "b8f3acff3cb18657dfa8a37b037c78f1", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.info.json": "3a613f0724932930ab746bcf9f8bdf42", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14799 - Mock Entry 20-3.mp4": "7566491129c54183e337e83455ab5bda", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.info.json": "d04117d103932f217a50e1a28db42962", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.info.json": "03254329cabbac6a887801d1a3a4a9fc", "Best Prebuilt TV Show by Date/Season 2020/s2020.e14899 - Mock Entry 20-4.mp4": "0850f53dd2335ba57632128b9bb9d112", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.info.json": "7214c68d8bd6f3c714dee034a5e04fa8", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.info.json": "1892550ced3033c5b779324e39ef77ac", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17998 - Mock Entry 20-5.mp4": "0dcd1a017948164d217f0bde59551655", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.info.json": "6e010415351d9d94f64624607d7ad831", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.info.json": "b5960c859c450da1c40fe68951499a8f", "Best Prebuilt TV Show by Date/Season 2020/s2020.e17999 - Mock Entry 20-6.mp4": "6c4b98bd5e32fbffef033f268d8587ae", "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.info.json": "f2ab803ea763a11fb271d7a36b2eb340", + "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.info.json": "04c2a406e17fb509e849c3d5ccac8b5e", "Best Prebuilt TV Show by Date/Season 2020/s2020.e20999 - Mock Entry 20-7.mp4": "386aa9718db383c17aafc9a00d61d0f0", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "e33b506e3e441ad05af03826b8ccb758", + "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.info.json": "09b731b1e404368cf7ce3fe8197e1de9", "Best Prebuilt TV Show by Date/Season 2021/s2021.e14699 - Mock Entry 21-1.mp4": "e94af7eed1fe7d2512d042979ca878dd", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.json index 58648b43..28eac6bc 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.json @@ -1,15 +1,15 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "0091219325d5ad7dff2e2b007e943ab9", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "f1315ac907d99c567839ac982b396f51", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "44a703e77c8285e81fec57ed9000bb0c", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.mp4": "776af67f6507b05700ff573ef9560aba", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "559c970f2fde6db18d42850b65f038b4", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "3fe91099a510c9dc820a0a7adba98868", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.mp4": "d83e7a55c37f8a5f3d18c4578bfc65af", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "6e712b8c5b40f3622732f087127d75f3", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "e780d5e9e678d4aae5b131a5f3603695", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.mp4": "c1e00927a15da4afa48cdcb514610156", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "61d42a2f8aa085eae5758206ff853538", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "4a4d542da434d5b3ff8d304f0e077469", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.mp4": "e1955b69689826e841c9b034209b7437" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.json index e71d51c4..d7bc4f13 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.json @@ -1,27 +1,27 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "e5c57d3e45916ef9a11916150a418070", "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.info.json": "e3b5da94c5a86db003633570af47d1a9", + "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.info.json": "629fb263cff2e93b7ec67769ebbc75e0", "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.mp4": "201f4f7a4cfb745b8befe75af83ef289", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.info.json": "c572cf9767af2221f4e88b40ab11e7dd", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.info.json": "0a3998c019cc33845be703ca1bb448f9", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.mp4": "3acc0b8ad17afdf9396a3f7600307899", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.info.json": "4fe8ba1b78f29c9e578d84d3ef6e8caa", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.info.json": "e891c1960d5c29b5e1e73c98ecf2e7f6", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.mp4": "58fbeaa3e51e59ef3405464ab3bc46f1", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.info.json": "943a66e92c610b032471cf684fa2cdf0", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.info.json": "fe18c65b99ca8942e65d777c9a498577", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.mp4": "aa76dff1662eda9596791ca5076a8385", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "4b04325397e3b9ed0ee51f319ce07353", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "3caee440547dd4ed46ec3cdca46978f2", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.mp4": "776af67f6507b05700ff573ef9560aba", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "729ca4dba26539e6d8c04443c9aa67ab", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "0b180b38ac673e7e320e9e615974fe41", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.mp4": "d83e7a55c37f8a5f3d18c4578bfc65af", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "075f2c2ce8c995195decf755fc980c89", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "5b26edd07c0534d53884d6a42908f8db", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.mp4": "c1e00927a15da4afa48cdcb514610156", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "fc9484dbc42b6fd6149fdcacc235e206", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "aeeb1be477400f34485799112a8121c2", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.mp4": "e1955b69689826e841c9b034209b7437" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.json index cb131071..4cbd67b6 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.json @@ -1,16 +1,16 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "0091219325d5ad7dff2e2b007e943ab9", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "044162512a1982b573a0d6f19646801a", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "bebd3dafb168c976a8c817e83a550ce2", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.mp4": "776af67f6507b05700ff573ef9560aba", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "d6e1d8a486125f87d04959607e2dc515", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "7543d21dcf2bd220a9ce4cd15f1e1578", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.mp4": "d83e7a55c37f8a5f3d18c4578bfc65af", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "5632b6ac9992ee07bf6052e9c87a02c5", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "921a343cf11be7cc492678459dbdd926", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.mp4": "c1e00927a15da4afa48cdcb514610156", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "aa1269526f1e384b25d630c7db17860e", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "5757f06de01c68c5104ec7a7b0c6a69b", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.mp4": "e1955b69689826e841c9b034209b7437", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.json index a66617a2..cc350da7 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.json @@ -1,28 +1,28 @@ { "Best Prebuilt TV Show by Date/.ytdl-sub-subscription_test-download-archive.json": "e5c57d3e45916ef9a11916150a418070", "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.info.json": "f2ab803ea763a11fb271d7a36b2eb340", + "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.info.json": "04c2a406e17fb509e849c3d5ccac8b5e", "Best Prebuilt TV Show by Date/Season 202006/s202006.e0601 - Mock Entry 20-7.mp4": "201f4f7a4cfb745b8befe75af83ef289", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.info.json": "6e010415351d9d94f64624607d7ad831", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.info.json": "b5960c859c450da1c40fe68951499a8f", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0601 - Mock Entry 20-6.mp4": "3acc0b8ad17afdf9396a3f7600307899", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.info.json": "7214c68d8bd6f3c714dee034a5e04fa8", + "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.info.json": "1892550ced3033c5b779324e39ef77ac", "Best Prebuilt TV Show by Date/Season 202007/s202007.e0602 - Mock Entry 20-5.mp4": "58fbeaa3e51e59ef3405464ab3bc46f1", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.info.json": "d04117d103932f217a50e1a28db42962", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.info.json": "03254329cabbac6a887801d1a3a4a9fc", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0601 - Mock Entry 20-4.mp4": "aa76dff1662eda9596791ca5076a8385", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "b8f3acff3cb18657dfa8a37b037c78f1", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.info.json": "3a613f0724932930ab746bcf9f8bdf42", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0701 - Mock Entry 20-3.mp4": "776af67f6507b05700ff573ef9560aba", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "e4efb3ea481b6936d188470ace4d6bae", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.info.json": "a702f2b8e66c348ceb3ec1fd65956024", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0801 - Mock Entry 20-2.mp4": "d83e7a55c37f8a5f3d18c4578bfc65af", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "683d44d82d8854b1bed529196dc091c9", + "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.info.json": "455e6a6bce2b8630d1a53e11c5554362", "Best Prebuilt TV Show by Date/Season 202008/s202008.e0802 - Mock Entry 20-1.mp4": "c1e00927a15da4afa48cdcb514610156", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "e33b506e3e441ad05af03826b8ccb758", + "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.info.json": "09b731b1e404368cf7ce3fe8197e1de9", "Best Prebuilt TV Show by Date/Season 202108/s202108.e0801 - Mock Entry 21-1.mp4": "e1955b69689826e841c9b034209b7437", "Best Prebuilt TV Show by Date/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show by Date/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.json index dcb2c643..cac9aeff 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.json @@ -2,15 +2,15 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "4b6e65b4614cbabb1148807439e3899a", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.info.json": "1a658e535689ba3312a79251d0603abb", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.info.json": "eaa3f351703b80239f15c03c5b727f31", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.mp4": "838968aa64d56f99166bc2867879da0d", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.info.json": "c030e9ec6c67e24845a1f80e60c49c2a", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.info.json": "e8acab0ed714ef96a6d1463154996a5b", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.mp4": "1109271e45e1c7ce0652b4e8e567d6bb", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.info.json": "2573381bab5b0c84d39def520326ff01", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.info.json": "893ed940046b8a650af0072029292899", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.mp4": "57644342b3e0f8697328fff415fd9bd6", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.info.json": "c68ed4baf5360c98bda46de2c3129e17", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.info.json": "001f7b61786b4ecb207cdf45fc6838e8", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.mp4": "bae6a68cab905f3d67fe95de2c0b11b4" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.json index 489b5e5e..fe49bf20 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.json @@ -2,16 +2,16 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "4b6e65b4614cbabb1148807439e3899a", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.info.json": "9111eb8be07d8fce5cab4257a049bd16", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.info.json": "23ea4fc60be000f224c60911133445c4", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 21-1.mp4": "838968aa64d56f99166bc2867879da0d", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.info.json": "6d8e82812ee2d93109372468802f625b", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.info.json": "473f212008eabbff7614e092e39c0e83", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-1.mp4": "1109271e45e1c7ce0652b4e8e567d6bb", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.info.json": "657cfbc1acf4e35060f1e8dc53910dad", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.info.json": "2ee2edf10085b2aa3a3a1cd1850cfab1", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-2.mp4": "57644342b3e0f8697328fff415fd9bd6", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.info.json": "60f7a22320435d0f3930ea9d8f0df6f0", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.info.json": "37c636ccbbbde5211290aa40e86c95ca", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-3.mp4": "bae6a68cab905f3d67fe95de2c0b11b4", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.json index 770e1df9..73a0b5b9 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.json @@ -2,28 +2,28 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "b1895370af1c9b8777354cdd809f2d4d", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.info.json": "b3d16c01cdf9680ebe60808f2f500ee9", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.info.json": "28de4c86761f962a274f877676273f42", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.mp4": "3abb120022201c52f187795e5382e7d8", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "255dd9d2e566d4951c228c333c88de34", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "9ec937cc60b7e8fef0a6741033d539e3", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.mp4": "f955993d7c3bd19a3f1974f9ca8fa8d5", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.info.json": "9ca487486489a07f45a3671833b46200", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.info.json": "9cc088e0502239894663985c73cbb8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.mp4": "65278e617ec6faae1fa5e1cc150b40bc", "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.info.json": "3c5529c60a981d3004dec4be0dd44386", + "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.info.json": "376f0187fb4be474af0634cab27a94a3", "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.mp4": "ae68c2c53268d732849149196e531935", "Best Prebuilt TV Show Collection/Season 02/Season02.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.info.json": "055914a06fdd556c4b8a7d9ba6868b5c", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.info.json": "753590baac8c807337d7be2c6a1bee17", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.mp4": "838968aa64d56f99166bc2867879da0d", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.info.json": "12e7c2ce72158a89a185b1860c7dc7d2", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.info.json": "eafd4c6ae0be81da688c25c305de550a", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.mp4": "1109271e45e1c7ce0652b4e8e567d6bb", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.info.json": "65473bcb02396628d81ab3c51dac6b05", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.info.json": "776544b88a36a0ed7842ad34b462947c", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.mp4": "57644342b3e0f8697328fff415fd9bd6", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.info.json": "406629e815a560ee1078a2d2f0e2eabc", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.info.json": "fac6137b97e4db79621f55694fd5ed07", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.mp4": "bae6a68cab905f3d67fe95de2c0b11b4" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.json index 8753db47..f1de3c09 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.json @@ -2,29 +2,29 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "b1895370af1c9b8777354cdd809f2d4d", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.info.json": "53e336dc82cf7a65fc62b0783c581059", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.info.json": "d699b2e091b389dd470a8d6719b87d00", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-4.mp4": "3abb120022201c52f187795e5382e7d8", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "88f6e9dd1573dbd3388432c9a04a0e09", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "8318cac15f71dfaa373ebb8470288f82", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.mp4": "f955993d7c3bd19a3f1974f9ca8fa8d5", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.info.json": "8310c540da3f4d8449d93b849f63dbdd", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.info.json": "d7e89687663d7251635f6011acf76ca2", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-6.mp4": "65278e617ec6faae1fa5e1cc150b40bc", "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.info.json": "231bcbd664181d6c59f8b4d9eefec368", + "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.info.json": "d27c625857e68c56ffa89a199d21c1a2", "Best Prebuilt TV Show Collection/Season 01/s01.e000005 - Mock Entry 20-7.mp4": "ae68c2c53268d732849149196e531935", "Best Prebuilt TV Show Collection/Season 02/Season02.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.info.json": "46447ae5b21700bf7e71cf9674a50287", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.info.json": "eb87faf31e9521949e1d46caa9bdaeba", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 21-1.mp4": "838968aa64d56f99166bc2867879da0d", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.info.json": "32d815d4e3a6ed68514ea871cb684359", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.info.json": "f9b1724b674ce5fe90ca3da72b9dce50", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-1.mp4": "1109271e45e1c7ce0652b4e8e567d6bb", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.info.json": "995e67fcd1b2615d8c594cf8e65e6d56", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.info.json": "c21e448042a9ce3f81651726f8ac8586", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-2.mp4": "57644342b3e0f8697328fff415fd9bd6", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.info.json": "7bbd18cae95324d002f8a1fe68ceadf0", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.info.json": "1ff4454ef2e877c2bb857da26aa59a0d", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 20-3.mp4": "bae6a68cab905f3d67fe95de2c0b11b4", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.json index c84ee993..954590e9 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.json @@ -2,15 +2,15 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "ba324b2c6532fe9d8fbe03e0dd6d0410", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.info.json": "c68ed4baf5360c98bda46de2c3129e17", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.info.json": "001f7b61786b4ecb207cdf45fc6838e8", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.mp4": "82258d5ed3062fc8fd986ec9bedec888", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.info.json": "2573381bab5b0c84d39def520326ff01", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.info.json": "893ed940046b8a650af0072029292899", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.mp4": "d3c9d4918af48a3da67baabab3535e20", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.info.json": "c030e9ec6c67e24845a1f80e60c49c2a", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.info.json": "e8acab0ed714ef96a6d1463154996a5b", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.mp4": "a464e06a6679b3de0dd332b0022aa7bb", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.info.json": "1a658e535689ba3312a79251d0603abb", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.info.json": "eaa3f351703b80239f15c03c5b727f31", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.mp4": "555fdada3339f0d359656478d9d171d2" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.json index 3ec76d93..13f1f357 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.json @@ -2,16 +2,16 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "ba324b2c6532fe9d8fbe03e0dd6d0410", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.info.json": "60f7a22320435d0f3930ea9d8f0df6f0", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.info.json": "37c636ccbbbde5211290aa40e86c95ca", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-3.mp4": "82258d5ed3062fc8fd986ec9bedec888", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.info.json": "657cfbc1acf4e35060f1e8dc53910dad", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.info.json": "2ee2edf10085b2aa3a3a1cd1850cfab1", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-2.mp4": "d3c9d4918af48a3da67baabab3535e20", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.info.json": "6d8e82812ee2d93109372468802f625b", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.info.json": "473f212008eabbff7614e092e39c0e83", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-1.mp4": "a464e06a6679b3de0dd332b0022aa7bb", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.info.json": "9111eb8be07d8fce5cab4257a049bd16", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.info.json": "23ea4fc60be000f224c60911133445c4", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 21-1.mp4": "555fdada3339f0d359656478d9d171d2", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.json index dc2f7eda..6efd1e9e 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.json @@ -2,28 +2,28 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "6ec6913047c175cedcbd41cb3ef402fc", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.info.json": "3c5529c60a981d3004dec4be0dd44386", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.info.json": "376f0187fb4be474af0634cab27a94a3", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.mp4": "6ba89f1f4436cc71bbe572bcf5a4c077", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.info.json": "9ca487486489a07f45a3671833b46200", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.info.json": "9cc088e0502239894663985c73cbb8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.mp4": "86158254bbe1cd4de61f2f03d63c4afc", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "255dd9d2e566d4951c228c333c88de34", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "9ec937cc60b7e8fef0a6741033d539e3", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.mp4": "f955993d7c3bd19a3f1974f9ca8fa8d5", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.info.json": "b3d16c01cdf9680ebe60808f2f500ee9", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.info.json": "28de4c86761f962a274f877676273f42", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.mp4": "68380cbe2709d869c965a8aee21217f9", "Best Prebuilt TV Show Collection/Season 02/Season02.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.info.json": "406629e815a560ee1078a2d2f0e2eabc", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.info.json": "fac6137b97e4db79621f55694fd5ed07", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.mp4": "82258d5ed3062fc8fd986ec9bedec888", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.info.json": "65473bcb02396628d81ab3c51dac6b05", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.info.json": "776544b88a36a0ed7842ad34b462947c", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.mp4": "d3c9d4918af48a3da67baabab3535e20", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.info.json": "12e7c2ce72158a89a185b1860c7dc7d2", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.info.json": "eafd4c6ae0be81da688c25c305de550a", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.mp4": "a464e06a6679b3de0dd332b0022aa7bb", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.info.json": "055914a06fdd556c4b8a7d9ba6868b5c", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.info.json": "753590baac8c807337d7be2c6a1bee17", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.mp4": "555fdada3339f0d359656478d9d171d2" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.json index 774edc91..0457d24c 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.json @@ -2,29 +2,29 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "6ec6913047c175cedcbd41cb3ef402fc", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.info.json": "231bcbd664181d6c59f8b4d9eefec368", + "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.info.json": "d27c625857e68c56ffa89a199d21c1a2", "Best Prebuilt TV Show Collection/Season 01/s01.e000001 - Mock Entry 20-7.mp4": "6ba89f1f4436cc71bbe572bcf5a4c077", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.info.json": "8310c540da3f4d8449d93b849f63dbdd", + "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.info.json": "d7e89687663d7251635f6011acf76ca2", "Best Prebuilt TV Show Collection/Season 01/s01.e000002 - Mock Entry 20-6.mp4": "86158254bbe1cd4de61f2f03d63c4afc", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "88f6e9dd1573dbd3388432c9a04a0e09", + "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.info.json": "8318cac15f71dfaa373ebb8470288f82", "Best Prebuilt TV Show Collection/Season 01/s01.e000003 - Mock Entry 20-5.mp4": "f955993d7c3bd19a3f1974f9ca8fa8d5", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.info.json": "53e336dc82cf7a65fc62b0783c581059", + "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.info.json": "d699b2e091b389dd470a8d6719b87d00", "Best Prebuilt TV Show Collection/Season 01/s01.e000004 - Mock Entry 20-4.mp4": "68380cbe2709d869c965a8aee21217f9", "Best Prebuilt TV Show Collection/Season 02/Season02.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.info.json": "7bbd18cae95324d002f8a1fe68ceadf0", + "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.info.json": "1ff4454ef2e877c2bb857da26aa59a0d", "Best Prebuilt TV Show Collection/Season 02/s02.e000001 - Mock Entry 20-3.mp4": "82258d5ed3062fc8fd986ec9bedec888", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.info.json": "995e67fcd1b2615d8c594cf8e65e6d56", + "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.info.json": "c21e448042a9ce3f81651726f8ac8586", "Best Prebuilt TV Show Collection/Season 02/s02.e000002 - Mock Entry 20-2.mp4": "d3c9d4918af48a3da67baabab3535e20", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.info.json": "32d815d4e3a6ed68514ea871cb684359", + "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.info.json": "f9b1724b674ce5fe90ca3da72b9dce50", "Best Prebuilt TV Show Collection/Season 02/s02.e000003 - Mock Entry 20-1.mp4": "a464e06a6679b3de0dd332b0022aa7bb", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.info.json": "46447ae5b21700bf7e71cf9674a50287", + "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.info.json": "eb87faf31e9521949e1d46caa9bdaeba", "Best Prebuilt TV Show Collection/Season 02/s02.e000004 - Mock Entry 21-1.mp4": "555fdada3339f0d359656478d9d171d2", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.json index 48363c64..d4f5a73a 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.json @@ -2,15 +2,15 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "87f96a1e055447383bfea0a12680438d", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.info.json": "c68ed4baf5360c98bda46de2c3129e17", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.info.json": "001f7b61786b4ecb207cdf45fc6838e8", "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.mp4": "2ed76a1c5ca5aefc99cafbe45beb7968", "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.info.json": "2573381bab5b0c84d39def520326ff01", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.info.json": "893ed940046b8a650af0072029292899", "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.mp4": "e98fdf4ba39fa60c6349152c65352df7", "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.info.json": "c030e9ec6c67e24845a1f80e60c49c2a", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.info.json": "e8acab0ed714ef96a6d1463154996a5b", "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.mp4": "1dd828f81bcb808ad91f6d1da8cce235", "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.info.json": "1a658e535689ba3312a79251d0603abb", + "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.info.json": "eaa3f351703b80239f15c03c5b727f31", "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.mp4": "052709f404d1ec6a33c8a0b52e133c83" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.json index c0cd3f47..d4859ae8 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.json @@ -2,16 +2,16 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "87f96a1e055447383bfea0a12680438d", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.info.json": "60f7a22320435d0f3930ea9d8f0df6f0", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.info.json": "37c636ccbbbde5211290aa40e86c95ca", "Best Prebuilt TV Show Collection/Season 01/s01.e20080701 - Mock Entry 20-3.mp4": "2ed76a1c5ca5aefc99cafbe45beb7968", "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.info.json": "657cfbc1acf4e35060f1e8dc53910dad", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.info.json": "2ee2edf10085b2aa3a3a1cd1850cfab1", "Best Prebuilt TV Show Collection/Season 01/s01.e20080801 - Mock Entry 20-2.mp4": "e98fdf4ba39fa60c6349152c65352df7", "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.info.json": "6d8e82812ee2d93109372468802f625b", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.info.json": "473f212008eabbff7614e092e39c0e83", "Best Prebuilt TV Show Collection/Season 01/s01.e20080802 - Mock Entry 20-1.mp4": "1dd828f81bcb808ad91f6d1da8cce235", "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.info.json": "9111eb8be07d8fce5cab4257a049bd16", + "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.info.json": "23ea4fc60be000f224c60911133445c4", "Best Prebuilt TV Show Collection/Season 01/s01.e21080801 - Mock Entry 21-1.mp4": "052709f404d1ec6a33c8a0b52e133c83", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.json index ef8ac939..4675c9a4 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.json @@ -2,28 +2,28 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "04d06f293fcb5164266bedf66b4d4264", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.info.json": "3c5529c60a981d3004dec4be0dd44386", + "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.info.json": "376f0187fb4be474af0634cab27a94a3", "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.mp4": "98da10d4278b3b4fbc3a52a57ce8faea", "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.info.json": "9ca487486489a07f45a3671833b46200", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.info.json": "9cc088e0502239894663985c73cbb8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.mp4": "2d964ed943027358d440b2c6faf00f56", "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.info.json": "255dd9d2e566d4951c228c333c88de34", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.info.json": "9ec937cc60b7e8fef0a6741033d539e3", "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.mp4": "9a1a761fafc7213e30aedf7ba01e192e", "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.info.json": "b3d16c01cdf9680ebe60808f2f500ee9", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.info.json": "28de4c86761f962a274f877676273f42", "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.mp4": "2d09a282c18e12c7b435ec9b0fcd83ba", "Best Prebuilt TV Show Collection/Season 02/Season02.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.info.json": "406629e815a560ee1078a2d2f0e2eabc", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.info.json": "fac6137b97e4db79621f55694fd5ed07", "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.mp4": "2ed76a1c5ca5aefc99cafbe45beb7968", "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.info.json": "65473bcb02396628d81ab3c51dac6b05", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.info.json": "776544b88a36a0ed7842ad34b462947c", "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.mp4": "e98fdf4ba39fa60c6349152c65352df7", "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.info.json": "12e7c2ce72158a89a185b1860c7dc7d2", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.info.json": "eafd4c6ae0be81da688c25c305de550a", "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.mp4": "1dd828f81bcb808ad91f6d1da8cce235", "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.info.json": "055914a06fdd556c4b8a7d9ba6868b5c", + "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.info.json": "753590baac8c807337d7be2c6a1bee17", "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.mp4": "052709f404d1ec6a33c8a0b52e133c83" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.json index 518f39e6..eb867dce 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.json @@ -2,29 +2,29 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "04d06f293fcb5164266bedf66b4d4264", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.info.json": "231bcbd664181d6c59f8b4d9eefec368", + "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.info.json": "d27c625857e68c56ffa89a199d21c1a2", "Best Prebuilt TV Show Collection/Season 01/s01.e20060601 - Mock Entry 20-7.mp4": "98da10d4278b3b4fbc3a52a57ce8faea", "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.info.json": "8310c540da3f4d8449d93b849f63dbdd", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.info.json": "d7e89687663d7251635f6011acf76ca2", "Best Prebuilt TV Show Collection/Season 01/s01.e20070601 - Mock Entry 20-6.mp4": "2d964ed943027358d440b2c6faf00f56", "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.info.json": "88f6e9dd1573dbd3388432c9a04a0e09", + "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.info.json": "8318cac15f71dfaa373ebb8470288f82", "Best Prebuilt TV Show Collection/Season 01/s01.e20070602 - Mock Entry 20-5.mp4": "9a1a761fafc7213e30aedf7ba01e192e", "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.info.json": "53e336dc82cf7a65fc62b0783c581059", + "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.info.json": "d699b2e091b389dd470a8d6719b87d00", "Best Prebuilt TV Show Collection/Season 01/s01.e20080601 - Mock Entry 20-4.mp4": "2d09a282c18e12c7b435ec9b0fcd83ba", "Best Prebuilt TV Show Collection/Season 02/Season02.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.info.json": "7bbd18cae95324d002f8a1fe68ceadf0", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.info.json": "1ff4454ef2e877c2bb857da26aa59a0d", "Best Prebuilt TV Show Collection/Season 02/s02.e20080701 - Mock Entry 20-3.mp4": "2ed76a1c5ca5aefc99cafbe45beb7968", "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.info.json": "995e67fcd1b2615d8c594cf8e65e6d56", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.info.json": "c21e448042a9ce3f81651726f8ac8586", "Best Prebuilt TV Show Collection/Season 02/s02.e20080801 - Mock Entry 20-2.mp4": "e98fdf4ba39fa60c6349152c65352df7", "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.info.json": "32d815d4e3a6ed68514ea871cb684359", + "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.info.json": "f9b1724b674ce5fe90ca3da72b9dce50", "Best Prebuilt TV Show Collection/Season 02/s02.e20080802 - Mock Entry 20-1.mp4": "1dd828f81bcb808ad91f6d1da8cce235", "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.info.json": "46447ae5b21700bf7e71cf9674a50287", + "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.info.json": "eb87faf31e9521949e1d46caa9bdaeba", "Best Prebuilt TV Show Collection/Season 02/s02.e21080801 - Mock Entry 21-1.mp4": "052709f404d1ec6a33c8a0b52e133c83", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.json index 83ff4f38..9b122712 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.json @@ -2,15 +2,15 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "09f7a5dced4a46e3681db8f2848e0444", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.info.json": "1a658e535689ba3312a79251d0603abb", + "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.info.json": "eaa3f351703b80239f15c03c5b727f31", "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.mp4": "d885df2112e5fdd5b0f20876851ef438", "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.info.json": "c030e9ec6c67e24845a1f80e60c49c2a", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.info.json": "e8acab0ed714ef96a6d1463154996a5b", "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.mp4": "456a1778941f9abf6ee3b515e44ab8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.info.json": "2573381bab5b0c84d39def520326ff01", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.info.json": "893ed940046b8a650af0072029292899", "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.mp4": "4319b061434ab13ee20ac4d64980025b", "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.info.json": "c68ed4baf5360c98bda46de2c3129e17", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.info.json": "001f7b61786b4ecb207cdf45fc6838e8", "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.mp4": "b0777c0678763c456fdb9fbbf90c371a" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.json index bdc0f020..647a9972 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.json @@ -2,16 +2,16 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "09f7a5dced4a46e3681db8f2848e0444", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.info.json": "9111eb8be07d8fce5cab4257a049bd16", + "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.info.json": "23ea4fc60be000f224c60911133445c4", "Best Prebuilt TV Show Collection/Season 01/s01.e79052499 - Mock Entry 21-1.mp4": "d885df2112e5fdd5b0f20876851ef438", "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.info.json": "6d8e82812ee2d93109372468802f625b", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.info.json": "473f212008eabbff7614e092e39c0e83", "Best Prebuilt TV Show Collection/Season 01/s01.e80052498 - Mock Entry 20-1.mp4": "456a1778941f9abf6ee3b515e44ab8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.info.json": "657cfbc1acf4e35060f1e8dc53910dad", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.info.json": "2ee2edf10085b2aa3a3a1cd1850cfab1", "Best Prebuilt TV Show Collection/Season 01/s01.e80052499 - Mock Entry 20-2.mp4": "4319b061434ab13ee20ac4d64980025b", "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.info.json": "60f7a22320435d0f3930ea9d8f0df6f0", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.info.json": "37c636ccbbbde5211290aa40e86c95ca", "Best Prebuilt TV Show Collection/Season 01/s01.e80052599 - Mock Entry 20-3.mp4": "b0777c0678763c456fdb9fbbf90c371a", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.json index 89306ca4..6d814cb4 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.json @@ -2,28 +2,28 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "ea18f9d83c908053c178340b3e6b5a63", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.info.json": "b3d16c01cdf9680ebe60808f2f500ee9", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.info.json": "28de4c86761f962a274f877676273f42", "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.mp4": "5f700d73364bb0c1ccfa34987abf5b4a", "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.info.json": "255dd9d2e566d4951c228c333c88de34", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.info.json": "9ec937cc60b7e8fef0a6741033d539e3", "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.mp4": "938c64fafcc01d68811729cc6277364b", "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.info.json": "9ca487486489a07f45a3671833b46200", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.info.json": "9cc088e0502239894663985c73cbb8d1", "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.mp4": "7e62cec1dd4ab9d6dc429684b12bd8a6", "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.info.json": "3c5529c60a981d3004dec4be0dd44386", + "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.info.json": "376f0187fb4be474af0634cab27a94a3", "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.mp4": "75df3f9f617361c65178484d87625789", "Best Prebuilt TV Show Collection/Season 02/Season02.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.info.json": "055914a06fdd556c4b8a7d9ba6868b5c", + "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.info.json": "753590baac8c807337d7be2c6a1bee17", "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.mp4": "d885df2112e5fdd5b0f20876851ef438", "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.info.json": "12e7c2ce72158a89a185b1860c7dc7d2", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.info.json": "eafd4c6ae0be81da688c25c305de550a", "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.mp4": "456a1778941f9abf6ee3b515e44ab8d1", "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.info.json": "65473bcb02396628d81ab3c51dac6b05", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.info.json": "776544b88a36a0ed7842ad34b462947c", "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.mp4": "4319b061434ab13ee20ac4d64980025b", "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.info.json": "406629e815a560ee1078a2d2f0e2eabc", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.info.json": "fac6137b97e4db79621f55694fd5ed07", "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.mp4": "b0777c0678763c456fdb9fbbf90c371a" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.json b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.json index 2eae0d92..f7ec1114 100644 --- a/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.json +++ b/tests/resources/expected_downloads_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.json @@ -2,29 +2,29 @@ "Best Prebuilt TV Show Collection/.ytdl-sub-subscription_test-download-archive.json": "ea18f9d83c908053c178340b3e6b5a63", "Best Prebuilt TV Show Collection/Season 01/Season01.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.info.json": "53e336dc82cf7a65fc62b0783c581059", + "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.info.json": "d699b2e091b389dd470a8d6719b87d00", "Best Prebuilt TV Show Collection/Season 01/s01.e80052699 - Mock Entry 20-4.mp4": "5f700d73364bb0c1ccfa34987abf5b4a", "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.info.json": "88f6e9dd1573dbd3388432c9a04a0e09", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.info.json": "8318cac15f71dfaa373ebb8470288f82", "Best Prebuilt TV Show Collection/Season 01/s01.e80062698 - Mock Entry 20-5.mp4": "938c64fafcc01d68811729cc6277364b", "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.info.json": "8310c540da3f4d8449d93b849f63dbdd", + "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.info.json": "d7e89687663d7251635f6011acf76ca2", "Best Prebuilt TV Show Collection/Season 01/s01.e80062699 - Mock Entry 20-6.mp4": "7e62cec1dd4ab9d6dc429684b12bd8a6", "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.info.json": "231bcbd664181d6c59f8b4d9eefec368", + "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.info.json": "d27c625857e68c56ffa89a199d21c1a2", "Best Prebuilt TV Show Collection/Season 01/s01.e80072599 - Mock Entry 20-7.mp4": "75df3f9f617361c65178484d87625789", "Best Prebuilt TV Show Collection/Season 02/Season02.jpg": "e80c508c4818454300133fe1dc1a9cd7", "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.info.json": "46447ae5b21700bf7e71cf9674a50287", + "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.info.json": "eb87faf31e9521949e1d46caa9bdaeba", "Best Prebuilt TV Show Collection/Season 02/s02.e79052499 - Mock Entry 21-1.mp4": "d885df2112e5fdd5b0f20876851ef438", "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.info.json": "32d815d4e3a6ed68514ea871cb684359", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.info.json": "f9b1724b674ce5fe90ca3da72b9dce50", "Best Prebuilt TV Show Collection/Season 02/s02.e80052498 - Mock Entry 20-1.mp4": "456a1778941f9abf6ee3b515e44ab8d1", "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.info.json": "995e67fcd1b2615d8c594cf8e65e6d56", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.info.json": "c21e448042a9ce3f81651726f8ac8586", "Best Prebuilt TV Show Collection/Season 02/s02.e80052499 - Mock Entry 20-2.mp4": "4319b061434ab13ee20ac4d64980025b", "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3-thumb.jpg": "e80c508c4818454300133fe1dc1a9cd7", - "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.info.json": "7bbd18cae95324d002f8a1fe68ceadf0", + "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.info.json": "1ff4454ef2e877c2bb857da26aa59a0d", "Best Prebuilt TV Show Collection/Season 02/s02.e80052599 - Mock Entry 20-3.mp4": "b0777c0678763c456fdb9fbbf90c371a", "Best Prebuilt TV Show Collection/fanart.jpg": "15c9a67b554f415a662fdf7a3340cd61", "Best Prebuilt TV Show Collection/poster.jpg": "0b0fdbe56bab3e3fdda18730588d742a" 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 3b186ece..0f780109 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_channel_full.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_channel_full.json @@ -1,55 +1,55 @@ { "Project ⧸ Zombie/.ytdl-sub-pz-download-archive.json": "aadb59c92dcf14ee6617c77423a14584", "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e", - "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.info.json": "6f524458a7688aa5972658a9dc5241e7", + "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.info.json": "9204f865a0e2617ba66b02978e548f7b", "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.mp4": "6aab51d2ebb374dc965970cbacd00bda", - "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.nfo": "265da8ee62357739c1b353e1a3b3e8e8", + "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.nfo": "a1970f06fbc4743fca6db0627de779f3", "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2-thumb.jpg": "8b32ee9c037fa669e444a0ac181525a1", - "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.info.json": "ca2748c12030e5b659d4d239307faa8d", + "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.info.json": "790297aac4b1657e79d209ecbfd0af93", "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.mp4": "4433a9932f0c3935cd9d339e281f38a9", - "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.nfo": "0f1c2209cd150ae3750658785d3d0495", + "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.nfo": "4ad498ce223454a4baa7d64bb4a837d6", "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1]-thumb.jpg": "b232d253df621aa770b780c1301d364d", - "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "1e99b4af80a1d25cafc15a9924a323e0", + "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "6b3d926670f6d7e038cb541169006ab5", "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].mp4": "36622668231135f717456ef960fc7a68", - "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].nfo": "5168a9d25ecfb6574ffa970d9e3aaabf", + "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].nfo": "073eefa6e5c6d76edde80258ddf452ee", "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27]-thumb.jpg": "d17c379ea8b362f5b97c6b213b0342cb", - "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "afb18f8ce34acfe58c3db1d35a8c563b", + "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "d7c4f4fa828bd0da44f1f4bc779377fb", "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].mp4": "692f5928b18d6d70db7b5314e08cdfd3", - "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].nfo": "5f350a38650dbd13e4cb7cfec5efa06e", + "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": "d4e12e5374c4f24c2a136bdf4425b919", + "Project ⧸ Zombie/Season 2011/s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "8b77dfe92ec6e4117f4b30d03def7ee1", "Project ⧸ Zombie/Season 2011/s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "f5cb35da0e2ecedee9b74db1402be06d", - "Project ⧸ Zombie/Season 2011/s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].nfo": "e9f90a9a7c01a2f319f354a08e4b9494", + "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": "757781a829913a503a4b2411c8bd6627", + "Project ⧸ Zombie/Season 2011/s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).info.json": "44070bcbe9640ea017a6bd02d50e44a5", "Project ⧸ Zombie/Season 2011/s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).mp4": "9766181630b30e94a22e571c70a065f4", - "Project ⧸ Zombie/Season 2011/s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).nfo": "bd025ccd4f7b5c37b46436a4c00bca24", + "Project ⧸ Zombie/Season 2011/s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).nfo": "cb0184784a8eda842cfaf851f6e6af7d", "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|-thumb.jpg": "00ed383591779ffe98291de60f198fe9", - "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.info.json": "063482b7a13a6cf4ddaebecc0036ce58", + "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.info.json": "6d638a89c75d4302b9b80c9eae7e9f9e", "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.mp4": "2d6a06b4b8c4dac8d7c173362d9637a4", - "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.nfo": "258d3c994fbb95c575c6e4fa38097a55", + "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.nfo": "54ea4a48116aa98480a79495036c25e9", "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC]-thumb.jpg": "1718599d5189c65f7d8cf6acfa5ea851", - "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].info.json": "ac2e8bd9a80e7cada3c6f1733f683c3e", + "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].info.json": "baf48094fdfba018283d43d4d2533745", "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].mp4": "60c3221125afbef78990bdcead78a82d", - "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].nfo": "3c5e407a428161b75474eea13a82e009", + "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].nfo": "04f6aad56d85b1f65b81b6b8000f6479", "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|-thumb.jpg": "54ebe9df801b278fdd17b21afa8373a6", - "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.info.json": "99495a3accd731a59b16f2ffd52e3a70", + "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.info.json": "552b2f6949953d61eddf9752cdcfec54", "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.mp4": "2141f0f928d55e94fef7f7d3c7a4aca0", - "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.nfo": "a0d59e102f06b93718ab20e0238b4f95", + "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.nfo": "e2b078891b27cfee4c791598d046be24", "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|-thumb.jpg": "e29d49433175de8a761af35c5307791f", - "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.info.json": "1be44b227680b2a7916a15fc41ba01fd", + "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.info.json": "6525c225dae3e1ef3991809d43a2f65d", "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.mp4": "3fb239f0a646e515bbaaeb6f6d5cdd69", - "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.nfo": "45c5ee9108778ef506060cc9143a11e4", + "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.nfo": "ce72e3e210d6d46fef3e0bc208dc69cf", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer-thumb.jpg": "705ca4e0d99b37e9ecdf6bfe4b90c59b", - "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json": "e695f9625d0ea928b7bbf9bd70995921", + "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json": "2348fcad75d9e3fd5fb9833d16ab2fdb", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.mp4": "dbb140af8676f34fb701d5199e8708ea", - "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.nfo": "fae653029be0d522d4a9443e5b876e07", + "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.nfo": "31e92fc23d9765f8d5bd0d64834a9d1f", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg": "28d852ede73b879b9ebf9a061cfc7d46", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.en.srt": "3d2c4e7f65d2ca5e96da38ce7eecfc4e", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "49db64bfcee28ba7bebf970ceb1b0a95", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "bfb2cba0c2dc4888a0b8255e4bfcbf53", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "083e2e77e3e01218419531c08795c9c0", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "1b4821d9fb021236e94d5394e21f44aa", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "a9b7ac3cacbda7fed9d12b0519945292", "Project ⧸ Zombie/fanart.jpg": "129c6639b47299bc48062f0365e670ee", "Project ⧸ Zombie/poster.jpg": "5de28eea5a921a041452ab3ce1041f73", - "Project ⧸ Zombie/tvshow.nfo": "4af705064ee9cce46bcdf1fe396c28ae" + "Project ⧸ Zombie/tvshow.nfo": "34ea39afafb91a1a6cce848d8522a2aa" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/youtube/test_playlist.json b/tests/resources/expected_downloads_summaries/youtube/test_playlist.json index 72e71811..d6112493 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_playlist.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_playlist.json @@ -1,17 +1,17 @@ { "JMC/.ytdl-sub-music_video_playlist_test-download-archive.json": "3fdab8d103e51aa70430b6da0ceb07e2", "JMC/Season 01/s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1]-thumb.jpg": "b232d253df621aa770b780c1301d364d", - "JMC/Season 01/s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "ed38de0073c42ebb3c8de032efc265fc", + "JMC/Season 01/s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "b9e6e1a1c373024e432889508142893c", "JMC/Season 01/s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1].mp4": "95f3abaabccdd76461be5dace92e9489", - "JMC/Season 01/s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1].nfo": "d0f2d843b091834c62ccf33e2d2e700f", + "JMC/Season 01/s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1].nfo": "2a2997cbf16fb6b943d9933ad267331e", "JMC/Season 01/s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27]-thumb.jpg": "d17c379ea8b362f5b97c6b213b0342cb", - "JMC/Season 01/s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "00f7cca48368a2d9d89df9ec584b6f79", + "JMC/Season 01/s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "500eb095f7942bbbc03e769c11c40fd3", "JMC/Season 01/s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27].mp4": "5465a5e5712351945e98667006b08747", - "JMC/Season 01/s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27].nfo": "7b230eb8560735cc3ca9598b7b1b2cb7", + "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": "05e21f73f7c7170c4cc70437f87c77ab", + "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "d3a23e495c8063e5dfba3b9a4646c907", "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "c79ed62c72feb49bd02595322c6e1b89", - "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].nfo": "a0d7fd6752ca56fe4206c4c711b5765d", + "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].nfo": "c56083e2f3545fa2cafc4d67cbfdacf8", "JMC/season01-poster.jpg": "e7830aa8a64b0cde65ba3f7e5fc56530", - "JMC/tvshow.nfo": "f7892df46b4176dde645e23b8a4b653e" + "JMC/tvshow.nfo": "e92e4a2c01522dd9a9c3423f0f9304dc" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/youtube/test_video.json b/tests/resources/expected_downloads_summaries/youtube/test_video.json index c94d3dd6..294d9ab2 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_video.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_video.json @@ -1,6 +1,6 @@ { "JMC/JMC - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e", - "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "59ac500bb4778b37bd8c8fb472269e95", + "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "d5343d8444359cae9950cb99811a8fbd", "JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2", "JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e" } \ No newline at end of file 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 83521f0e..2c9e7b9c 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_video_cli.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_video_cli.json @@ -1,6 +1,6 @@ { "JMC/JMC - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e", - "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "2ad1e593fc1c50a53a107db062e82c4a", + "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "34c7e0759e16e03cf41b10754dce0ce5", "JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2", "JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e" } \ No newline at end of file diff --git a/tests/resources/transaction_log_summaries/plugins/date_range/test_channel_recent.txt b/tests/resources/transaction_log_summaries/plugins/date_range/test_channel_recent.txt index 442cd6b5..4d2f7afd 100644 --- a/tests/resources/transaction_log_summaries/plugins/date_range/test_channel_recent.txt +++ b/tests/resources/transaction_log_summaries/plugins/date_range/test_channel_recent.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Project / Zombie {output_directory}/Season 2018 s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer-thumb.jpg s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.mp4 Video Tags: + contentRating: TV-14 date: 2018-10-29 episode_id: 102901 genre: ytdl-sub @@ -38,6 +40,7 @@ Files created: aired: 2018-10-29 episode: 102901 genre: ytdl-sub + mpaa: TV-14 plot: https://www.youtube.com/watch?v=hP-PL_V2wR8 @@ -57,6 +60,7 @@ Files created: s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4 Video Tags: + contentRating: TV-14 date: 2018-11-02 episode_id: 110201 genre: ytdl-sub @@ -84,6 +88,7 @@ Files created: aired: 2018-11-02 episode: 110201 genre: ytdl-sub + mpaa: TV-14 plot: https://www.youtube.com/watch?v=LN2e6idGluI diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.txt index d9f93ecb..3bb743ca 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e000001 - Mock Entry 20-3-thumb.jpg s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -39,6 +42,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -66,6 +71,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -94,6 +101,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -110,6 +118,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.txt index 302a487d..746c837c 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e000001 - Mock Entry 20-3-thumb.jpg s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -39,6 +42,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -66,6 +71,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -93,6 +100,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -109,6 +117,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -120,6 +129,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -136,6 +146,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -147,6 +158,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -163,6 +175,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -174,6 +187,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -190,6 +204,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -202,6 +217,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -218,6 +234,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.txt index 619d6a12..30903093 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e000001 - Mock Entry 20-3-thumb.jpg s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -41,6 +44,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -68,6 +73,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -96,6 +103,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -112,6 +120,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.txt index e59eae6e..3d047cb6 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e000001 - Mock Entry 20-3-thumb.jpg s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -41,6 +44,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -68,6 +73,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -95,6 +102,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -111,6 +119,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -122,6 +131,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -138,6 +148,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -149,6 +160,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -165,6 +177,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -176,6 +189,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -192,6 +206,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -204,6 +219,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -220,6 +236,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.txt index 07ea4e63..be056900 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e080701 - Mock Entry 20-3-thumb.jpg s2020.e080701 - Mock Entry 20-3.info.json s2020.e080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80701 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-08-07 episode: 80701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -39,6 +42,7 @@ Files created: s2020.e080801 - Mock Entry 20-2.info.json s2020.e080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80801 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -66,6 +71,7 @@ Files created: s2020.e080802 - Mock Entry 20-1.info.json s2020.e080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80802 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-08-08 episode: 80802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -94,6 +101,7 @@ Files created: s2021.e080801 - Mock Entry 21-1.info.json s2021.e080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 80801 genre: ytdl-sub @@ -110,6 +118,7 @@ Files created: aired: 2021-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.txt index 59ae1071..2e0b7bd9 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e060601 - Mock Entry 20-7-thumb.jpg s2020.e060601 - Mock Entry 20-7.info.json s2020.e060601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 60601 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-06-06 episode: 60601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -39,6 +42,7 @@ Files created: s2020.e070601 - Mock Entry 20-6.info.json s2020.e070601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 70601 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-07-06 episode: 70601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -66,6 +71,7 @@ Files created: s2020.e070602 - Mock Entry 20-5.info.json s2020.e070602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 70602 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-07-06 episode: 70602 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -93,6 +100,7 @@ Files created: s2020.e080601 - Mock Entry 20-4.info.json s2020.e080601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 80601 genre: ytdl-sub @@ -109,6 +117,7 @@ Files created: aired: 2020-08-06 episode: 80601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -120,6 +129,7 @@ Files created: s2020.e080701 - Mock Entry 20-3.info.json s2020.e080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80701 genre: ytdl-sub @@ -136,6 +146,7 @@ Files created: aired: 2020-08-07 episode: 80701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -147,6 +158,7 @@ Files created: s2020.e080801 - Mock Entry 20-2.info.json s2020.e080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80801 genre: ytdl-sub @@ -163,6 +175,7 @@ Files created: aired: 2020-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -174,6 +187,7 @@ Files created: s2020.e080802 - Mock Entry 20-1.info.json s2020.e080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80802 genre: ytdl-sub @@ -190,6 +204,7 @@ Files created: aired: 2020-08-08 episode: 80802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -202,6 +217,7 @@ Files created: s2021.e080801 - Mock Entry 21-1.info.json s2021.e080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 80801 genre: ytdl-sub @@ -218,6 +234,7 @@ Files created: aired: 2021-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index e3d1ad58..f1bcd674 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -113,6 +121,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -129,6 +138,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -140,6 +150,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -156,6 +167,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -167,6 +179,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -183,6 +196,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -195,6 +209,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt index 978fc7b8..c67e3134 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -87,6 +93,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.txt index 80ee9e1c..b89836ef 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e080701 - Mock Entry 20-3-thumb.jpg s2020.e080701 - Mock Entry 20-3.info.json s2020.e080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80701 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-08-07 episode: 80701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -41,6 +44,7 @@ Files created: s2020.e080801 - Mock Entry 20-2.info.json s2020.e080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80801 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -68,6 +73,7 @@ Files created: s2020.e080802 - Mock Entry 20-1.info.json s2020.e080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80802 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-08-08 episode: 80802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -96,6 +103,7 @@ Files created: s2021.e080801 - Mock Entry 21-1.info.json s2021.e080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 80801 genre: ytdl-sub @@ -112,6 +120,7 @@ Files created: aired: 2021-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.txt index 0fa82089..b3521208 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e060601 - Mock Entry 20-7-thumb.jpg s2020.e060601 - Mock Entry 20-7.info.json s2020.e060601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 60601 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-06-06 episode: 60601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -41,6 +44,7 @@ Files created: s2020.e070601 - Mock Entry 20-6.info.json s2020.e070601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 70601 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-07-06 episode: 70601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -68,6 +73,7 @@ Files created: s2020.e070602 - Mock Entry 20-5.info.json s2020.e070602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 70602 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-07-06 episode: 70602 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -95,6 +102,7 @@ Files created: s2020.e080601 - Mock Entry 20-4.info.json s2020.e080601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 80601 genre: ytdl-sub @@ -111,6 +119,7 @@ Files created: aired: 2020-08-06 episode: 80601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -122,6 +131,7 @@ Files created: s2020.e080701 - Mock Entry 20-3.info.json s2020.e080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80701 genre: ytdl-sub @@ -138,6 +148,7 @@ Files created: aired: 2020-08-07 episode: 80701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -149,6 +160,7 @@ Files created: s2020.e080801 - Mock Entry 20-2.info.json s2020.e080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80801 genre: ytdl-sub @@ -165,6 +177,7 @@ Files created: aired: 2020-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -176,6 +189,7 @@ Files created: s2020.e080802 - Mock Entry 20-1.info.json s2020.e080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80802 genre: ytdl-sub @@ -192,6 +206,7 @@ Files created: aired: 2020-08-08 episode: 80802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -204,6 +219,7 @@ Files created: s2021.e080801 - Mock Entry 21-1.info.json s2021.e080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 80801 genre: ytdl-sub @@ -220,6 +236,7 @@ Files created: aired: 2021-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index e3d1ad58..f1bcd674 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -113,6 +121,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -129,6 +138,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -140,6 +150,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -156,6 +167,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -167,6 +179,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -183,6 +196,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -195,6 +209,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt index 978fc7b8..c67e3134 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -87,6 +93,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.txt index 79032d5c..addc9a35 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e14698 - Mock Entry 20-1-thumb.jpg s2020.e14698 - Mock Entry 20-1.info.json s2020.e14698 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14698 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-08-08 episode: 14698 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -39,6 +42,7 @@ Files created: s2020.e14699 - Mock Entry 20-2.info.json s2020.e14699 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14699 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -66,6 +71,7 @@ Files created: s2020.e14799 - Mock Entry 20-3.info.json s2020.e14799 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 14799 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-08-07 episode: 14799 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -94,6 +101,7 @@ Files created: s2021.e14699 - Mock Entry 21-1.info.json s2021.e14699 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 14699 genre: ytdl-sub @@ -110,6 +118,7 @@ Files created: aired: 2021-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.txt index c51ebe79..75b0dd90 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e14698 - Mock Entry 20-1-thumb.jpg s2020.e14698 - Mock Entry 20-1.info.json s2020.e14698 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14698 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-08-08 episode: 14698 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -39,6 +42,7 @@ Files created: s2020.e14699 - Mock Entry 20-2.info.json s2020.e14699 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14699 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -66,6 +71,7 @@ Files created: s2020.e14799 - Mock Entry 20-3.info.json s2020.e14799 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 14799 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-08-07 episode: 14799 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -93,6 +100,7 @@ Files created: s2020.e14899 - Mock Entry 20-4.info.json s2020.e14899 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 14899 genre: ytdl-sub @@ -109,6 +117,7 @@ Files created: aired: 2020-08-06 episode: 14899 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -120,6 +129,7 @@ Files created: s2020.e17998 - Mock Entry 20-5.info.json s2020.e17998 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 17998 genre: ytdl-sub @@ -136,6 +146,7 @@ Files created: aired: 2020-07-06 episode: 17998 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -147,6 +158,7 @@ Files created: s2020.e17999 - Mock Entry 20-6.info.json s2020.e17999 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 17999 genre: ytdl-sub @@ -163,6 +175,7 @@ Files created: aired: 2020-07-06 episode: 17999 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -174,6 +187,7 @@ Files created: s2020.e20999 - Mock Entry 20-7.info.json s2020.e20999 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 20999 genre: ytdl-sub @@ -190,6 +204,7 @@ Files created: aired: 2020-06-06 episode: 20999 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -202,6 +217,7 @@ Files created: s2021.e14699 - Mock Entry 21-1.info.json s2021.e14699 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 14699 genre: ytdl-sub @@ -218,6 +234,7 @@ Files created: aired: 2021-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index 12403604..ea3c3840 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -113,6 +121,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -129,6 +138,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -140,6 +150,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -156,6 +167,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -167,6 +179,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -183,6 +196,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -195,6 +209,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt index 43a77502..875414ba 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -87,6 +93,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.txt index a37c8517..0659d2a3 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e14698 - Mock Entry 20-1-thumb.jpg s2020.e14698 - Mock Entry 20-1.info.json s2020.e14698 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14698 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-08-08 episode: 14698 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -41,6 +44,7 @@ Files created: s2020.e14699 - Mock Entry 20-2.info.json s2020.e14699 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14699 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -68,6 +73,7 @@ Files created: s2020.e14799 - Mock Entry 20-3.info.json s2020.e14799 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 14799 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-08-07 episode: 14799 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -96,6 +103,7 @@ Files created: s2021.e14699 - Mock Entry 21-1.info.json s2021.e14699 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 14699 genre: ytdl-sub @@ -112,6 +120,7 @@ Files created: aired: 2021-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.txt index f3ed50ed..dcb67389 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e14698 - Mock Entry 20-1-thumb.jpg s2020.e14698 - Mock Entry 20-1.info.json s2020.e14698 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14698 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-08-08 episode: 14698 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -41,6 +44,7 @@ Files created: s2020.e14699 - Mock Entry 20-2.info.json s2020.e14699 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14699 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -68,6 +73,7 @@ Files created: s2020.e14799 - Mock Entry 20-3.info.json s2020.e14799 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 14799 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-08-07 episode: 14799 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -95,6 +102,7 @@ Files created: s2020.e14899 - Mock Entry 20-4.info.json s2020.e14899 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 14899 genre: ytdl-sub @@ -111,6 +119,7 @@ Files created: aired: 2020-08-06 episode: 14899 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -122,6 +131,7 @@ Files created: s2020.e17998 - Mock Entry 20-5.info.json s2020.e17998 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 17998 genre: ytdl-sub @@ -138,6 +148,7 @@ Files created: aired: 2020-07-06 episode: 17998 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -149,6 +160,7 @@ Files created: s2020.e17999 - Mock Entry 20-6.info.json s2020.e17999 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 17999 genre: ytdl-sub @@ -165,6 +177,7 @@ Files created: aired: 2020-07-06 episode: 17999 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -176,6 +189,7 @@ Files created: s2020.e20999 - Mock Entry 20-7.info.json s2020.e20999 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 20999 genre: ytdl-sub @@ -192,6 +206,7 @@ Files created: aired: 2020-06-06 episode: 20999 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -204,6 +219,7 @@ Files created: s2021.e14699 - Mock Entry 21-1.info.json s2021.e14699 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 14699 genre: ytdl-sub @@ -220,6 +236,7 @@ Files created: aired: 2021-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index 12403604..ea3c3840 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -113,6 +121,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -129,6 +138,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -140,6 +150,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -156,6 +167,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -167,6 +179,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -183,6 +196,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -195,6 +209,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt index 43a77502..875414ba 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -87,6 +93,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.txt index 6a27d948..390ca376 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 202008 s202008.e0701 - Mock Entry 20-3-thumb.jpg s202008.e0701 - Mock Entry 20-3.info.json s202008.e0701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 701 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-08-07 episode: 701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -39,6 +42,7 @@ Files created: s202008.e0801 - Mock Entry 20-2.info.json s202008.e0801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 801 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -66,6 +71,7 @@ Files created: s202008.e0802 - Mock Entry 20-1.info.json s202008.e0802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 802 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-08-08 episode: 802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -94,6 +101,7 @@ Files created: s202108.e0801 - Mock Entry 21-1.info.json s202108.e0801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 801 genre: ytdl-sub @@ -110,6 +118,7 @@ Files created: aired: 2021-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.txt index 8bd25c8c..5227a555 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 202006 s202006.e0601 - Mock Entry 20-7-thumb.jpg s202006.e0601 - Mock Entry 20-7.info.json s202006.e0601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 601 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-06-06 episode: 601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -40,6 +43,7 @@ Files created: s202007.e0601 - Mock Entry 20-6.info.json s202007.e0601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 601 genre: ytdl-sub @@ -56,6 +60,7 @@ Files created: aired: 2020-07-06 episode: 601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -67,6 +72,7 @@ Files created: s202007.e0602 - Mock Entry 20-5.info.json s202007.e0602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 602 genre: ytdl-sub @@ -83,6 +89,7 @@ Files created: aired: 2020-07-06 episode: 602 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -95,6 +102,7 @@ Files created: s202008.e0601 - Mock Entry 20-4.info.json s202008.e0601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 601 genre: ytdl-sub @@ -111,6 +119,7 @@ Files created: aired: 2020-08-06 episode: 601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -122,6 +131,7 @@ Files created: s202008.e0701 - Mock Entry 20-3.info.json s202008.e0701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 701 genre: ytdl-sub @@ -138,6 +148,7 @@ Files created: aired: 2020-08-07 episode: 701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -149,6 +160,7 @@ Files created: s202008.e0801 - Mock Entry 20-2.info.json s202008.e0801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 801 genre: ytdl-sub @@ -165,6 +177,7 @@ Files created: aired: 2020-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -176,6 +189,7 @@ Files created: s202008.e0802 - Mock Entry 20-1.info.json s202008.e0802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 802 genre: ytdl-sub @@ -192,6 +206,7 @@ Files created: aired: 2020-08-08 episode: 802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -204,6 +219,7 @@ Files created: s202108.e0801 - Mock Entry 21-1.info.json s202108.e0801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 801 genre: ytdl-sub @@ -220,6 +236,7 @@ Files created: aired: 2021-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index 7eeba6cf..0d07fa73 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -113,6 +121,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -129,6 +138,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -140,6 +150,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -156,6 +167,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -167,6 +179,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -183,6 +196,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -195,6 +209,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt index ce103a17..c85bf941 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -87,6 +93,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.txt index 4c45f89b..81ae63b4 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 202008 s202008.e0701 - Mock Entry 20-3-thumb.jpg s202008.e0701 - Mock Entry 20-3.info.json s202008.e0701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 701 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-08-07 episode: 701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -41,6 +44,7 @@ Files created: s202008.e0801 - Mock Entry 20-2.info.json s202008.e0801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 801 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -68,6 +73,7 @@ Files created: s202008.e0802 - Mock Entry 20-1.info.json s202008.e0802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 802 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-08-08 episode: 802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -96,6 +103,7 @@ Files created: s202108.e0801 - Mock Entry 21-1.info.json s202108.e0801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 801 genre: ytdl-sub @@ -112,6 +120,7 @@ Files created: aired: 2021-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.txt index 1d3e444e..7b32f1fe 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 202006 s202006.e0601 - Mock Entry 20-7-thumb.jpg s202006.e0601 - Mock Entry 20-7.info.json s202006.e0601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 601 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-06-06 episode: 601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -42,6 +45,7 @@ Files created: s202007.e0601 - Mock Entry 20-6.info.json s202007.e0601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 601 genre: ytdl-sub @@ -58,6 +62,7 @@ Files created: aired: 2020-07-06 episode: 601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -69,6 +74,7 @@ Files created: s202007.e0602 - Mock Entry 20-5.info.json s202007.e0602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 602 genre: ytdl-sub @@ -85,6 +91,7 @@ Files created: aired: 2020-07-06 episode: 602 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -97,6 +104,7 @@ Files created: s202008.e0601 - Mock Entry 20-4.info.json s202008.e0601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 601 genre: ytdl-sub @@ -113,6 +121,7 @@ Files created: aired: 2020-08-06 episode: 601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -124,6 +133,7 @@ Files created: s202008.e0701 - Mock Entry 20-3.info.json s202008.e0701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 701 genre: ytdl-sub @@ -140,6 +150,7 @@ Files created: aired: 2020-08-07 episode: 701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -151,6 +162,7 @@ Files created: s202008.e0801 - Mock Entry 20-2.info.json s202008.e0801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 801 genre: ytdl-sub @@ -167,6 +179,7 @@ Files created: aired: 2020-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -178,6 +191,7 @@ Files created: s202008.e0802 - Mock Entry 20-1.info.json s202008.e0802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 802 genre: ytdl-sub @@ -194,6 +208,7 @@ Files created: aired: 2020-08-08 episode: 802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -206,6 +221,7 @@ Files created: s202108.e0801 - Mock Entry 21-1.info.json s202108.e0801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 801 genre: ytdl-sub @@ -222,6 +238,7 @@ Files created: aired: 2021-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index 7eeba6cf..0d07fa73 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -113,6 +121,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -129,6 +138,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -140,6 +150,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -156,6 +167,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -167,6 +179,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -183,6 +196,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -195,6 +209,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt index ce103a17..c85bf941 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -87,6 +93,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.txt index 0977947d..360a9e8d 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.txt @@ -7,6 +7,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -17,6 +18,7 @@ Files created: s01.e000001 - Mock Entry 21-1.info.json s01.e000001 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 1 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: aired: 2021-08-08 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -44,6 +47,7 @@ Files created: s01.e000002 - Mock Entry 20-1.info.json s01.e000002 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -60,6 +64,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -71,6 +76,7 @@ Files created: s01.e000003 - Mock Entry 20-2.info.json s01.e000003 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -87,6 +93,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -98,6 +105,7 @@ Files created: s01.e000004 - Mock Entry 20-3.info.json s01.e000004 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 4 genre: ytdl-sub @@ -114,6 +122,7 @@ Files created: aired: 2020-08-07 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index f25898d1..8862d5ff 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.txt index a55ee4cb..557cac7d 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.txt @@ -9,6 +9,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -19,6 +20,7 @@ Files created: s01.e000001 - Mock Entry 21-1.info.json s01.e000001 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 1 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: aired: 2021-08-08 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -46,6 +49,7 @@ Files created: s01.e000002 - Mock Entry 20-1.info.json s01.e000002 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -73,6 +78,7 @@ Files created: s01.e000003 - Mock Entry 20-2.info.json s01.e000003 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -100,6 +107,7 @@ Files created: s01.e000004 - Mock Entry 20-3.info.json s01.e000004 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 4 genre: ytdl-sub @@ -116,6 +124,7 @@ Files created: aired: 2020-08-07 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index f25898d1..8862d5ff 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.txt index 8b35a2af..e77f4bd1 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -23,6 +24,7 @@ Files created: s01.e000002 - Mock Entry 20-4.info.json s01.e000002 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 2 genre: ytdl-sub @@ -39,6 +41,7 @@ Files created: aired: 2020-08-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -50,6 +53,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -66,6 +70,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -77,6 +82,7 @@ Files created: s01.e000004 - Mock Entry 20-6.info.json s01.e000004 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 4 genre: ytdl-sub @@ -93,6 +99,7 @@ Files created: aired: 2020-07-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -104,6 +111,7 @@ Files created: s01.e000005 - Mock Entry 20-7.info.json s01.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -120,6 +128,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -132,6 +141,7 @@ Files created: s02.e000001 - Mock Entry 21-1.info.json s02.e000001 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 1 genre: ytdl-sub @@ -148,6 +158,7 @@ Files created: aired: 2021-08-08 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -159,6 +170,7 @@ Files created: s02.e000002 - Mock Entry 20-1.info.json s02.e000002 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -175,6 +187,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -186,6 +199,7 @@ Files created: s02.e000003 - Mock Entry 20-2.info.json s02.e000003 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -202,6 +216,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -213,6 +228,7 @@ Files created: s02.e000004 - Mock Entry 20-3.info.json s02.e000004 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 4 genre: ytdl-sub @@ -229,6 +245,7 @@ Files created: aired: 2020-08-07 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index e6aefd73..a81d1cbe 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -59,6 +63,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -87,6 +93,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -114,6 +122,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -130,6 +139,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -141,6 +151,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -157,6 +168,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -168,6 +180,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -184,6 +197,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.txt index df3cdab6..39050e93 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -25,6 +26,7 @@ Files created: s01.e000002 - Mock Entry 20-4.info.json s01.e000002 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 2 genre: ytdl-sub @@ -41,6 +43,7 @@ Files created: aired: 2020-08-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -52,6 +55,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -68,6 +72,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -79,6 +84,7 @@ Files created: s01.e000004 - Mock Entry 20-6.info.json s01.e000004 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 4 genre: ytdl-sub @@ -95,6 +101,7 @@ Files created: aired: 2020-07-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -106,6 +113,7 @@ Files created: s01.e000005 - Mock Entry 20-7.info.json s01.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -122,6 +130,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -134,6 +143,7 @@ Files created: s02.e000001 - Mock Entry 21-1.info.json s02.e000001 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 1 genre: ytdl-sub @@ -150,6 +160,7 @@ Files created: aired: 2021-08-08 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -161,6 +172,7 @@ Files created: s02.e000002 - Mock Entry 20-1.info.json s02.e000002 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -177,6 +189,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -188,6 +201,7 @@ Files created: s02.e000003 - Mock Entry 20-2.info.json s02.e000003 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -204,6 +218,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -215,6 +230,7 @@ Files created: s02.e000004 - Mock Entry 20-3.info.json s02.e000004 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 4 genre: ytdl-sub @@ -231,6 +247,7 @@ Files created: aired: 2020-08-07 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index e6aefd73..a81d1cbe 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -59,6 +63,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -87,6 +93,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -114,6 +122,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -130,6 +139,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -141,6 +151,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -157,6 +168,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -168,6 +180,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -184,6 +197,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.txt index 49d48dcb..156d310a 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.txt @@ -7,6 +7,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -17,6 +18,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -44,6 +47,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -60,6 +64,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -71,6 +76,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -87,6 +93,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -98,6 +105,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -114,6 +122,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.txt index 62150ca4..0c8004dc 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.txt @@ -9,6 +9,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -19,6 +20,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -46,6 +49,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -73,6 +78,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -100,6 +107,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -116,6 +124,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.txt index fda7dd51..9bf08670 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -23,6 +24,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -39,6 +41,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -50,6 +53,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -66,6 +70,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -77,6 +82,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -93,6 +99,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -104,6 +111,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -120,6 +128,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -132,6 +141,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -148,6 +158,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -159,6 +170,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -175,6 +187,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -186,6 +199,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -202,6 +216,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -213,6 +228,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -229,6 +245,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.txt index fb379058..87e532fc 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -25,6 +26,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -41,6 +43,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -52,6 +55,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -68,6 +72,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -79,6 +84,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -95,6 +101,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -106,6 +113,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -122,6 +130,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -134,6 +143,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -150,6 +160,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -161,6 +172,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -177,6 +189,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -188,6 +201,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -204,6 +218,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -215,6 +230,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -231,6 +247,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.txt index 0717c836..24f5c251 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.txt @@ -7,6 +7,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -17,6 +18,7 @@ Files created: s01.e20080701 - Mock Entry 20-3.info.json s01.e20080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 20080701 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: aired: 2020-08-07 episode: 20080701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -44,6 +47,7 @@ Files created: s01.e20080801 - Mock Entry 20-2.info.json s01.e20080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080801 genre: ytdl-sub @@ -60,6 +64,7 @@ Files created: aired: 2020-08-08 episode: 20080801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -71,6 +76,7 @@ Files created: s01.e20080802 - Mock Entry 20-1.info.json s01.e20080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080802 genre: ytdl-sub @@ -87,6 +93,7 @@ Files created: aired: 2020-08-08 episode: 20080802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -98,6 +105,7 @@ Files created: s01.e21080801 - Mock Entry 21-1.info.json s01.e21080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 21080801 genre: ytdl-sub @@ -114,6 +122,7 @@ Files created: aired: 2021-08-08 episode: 21080801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 8b3a14ff..91aa1f7e 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.txt index 23ff6b61..6d2f948b 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.txt @@ -9,6 +9,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -19,6 +20,7 @@ Files created: s01.e20080701 - Mock Entry 20-3.info.json s01.e20080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 20080701 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: aired: 2020-08-07 episode: 20080701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -46,6 +49,7 @@ Files created: s01.e20080801 - Mock Entry 20-2.info.json s01.e20080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080801 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: aired: 2020-08-08 episode: 20080801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -73,6 +78,7 @@ Files created: s01.e20080802 - Mock Entry 20-1.info.json s01.e20080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080802 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: aired: 2020-08-08 episode: 20080802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -100,6 +107,7 @@ Files created: s01.e21080801 - Mock Entry 21-1.info.json s01.e21080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 21080801 genre: ytdl-sub @@ -116,6 +124,7 @@ Files created: aired: 2021-08-08 episode: 21080801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 8b3a14ff..91aa1f7e 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.txt index 0ddcd80f..7704395b 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -23,6 +24,7 @@ Files created: s01.e20060601 - Mock Entry 20-7.info.json s01.e20060601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 20060601 genre: ytdl-sub @@ -39,6 +41,7 @@ Files created: aired: 2020-06-06 episode: 20060601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -50,6 +53,7 @@ Files created: s01.e20070601 - Mock Entry 20-6.info.json s01.e20070601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 20070601 genre: ytdl-sub @@ -66,6 +70,7 @@ Files created: aired: 2020-07-06 episode: 20070601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -77,6 +82,7 @@ Files created: s01.e20070602 - Mock Entry 20-5.info.json s01.e20070602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 20070602 genre: ytdl-sub @@ -93,6 +99,7 @@ Files created: aired: 2020-07-06 episode: 20070602 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -104,6 +111,7 @@ Files created: s01.e20080601 - Mock Entry 20-4.info.json s01.e20080601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 20080601 genre: ytdl-sub @@ -120,6 +128,7 @@ Files created: aired: 2020-08-06 episode: 20080601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -132,6 +141,7 @@ Files created: s02.e20080701 - Mock Entry 20-3.info.json s02.e20080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 20080701 genre: ytdl-sub @@ -148,6 +158,7 @@ Files created: aired: 2020-08-07 episode: 20080701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -159,6 +170,7 @@ Files created: s02.e20080801 - Mock Entry 20-2.info.json s02.e20080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080801 genre: ytdl-sub @@ -175,6 +187,7 @@ Files created: aired: 2020-08-08 episode: 20080801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -186,6 +199,7 @@ Files created: s02.e20080802 - Mock Entry 20-1.info.json s02.e20080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080802 genre: ytdl-sub @@ -202,6 +216,7 @@ Files created: aired: 2020-08-08 episode: 20080802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -213,6 +228,7 @@ Files created: s02.e21080801 - Mock Entry 21-1.info.json s02.e21080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 21080801 genre: ytdl-sub @@ -229,6 +245,7 @@ Files created: aired: 2021-08-08 episode: 21080801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 4e603221..6b718aa5 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -114,6 +122,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -130,6 +139,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -141,6 +151,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -157,6 +168,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -168,6 +180,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -184,6 +197,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -195,6 +209,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.txt index f4c9457e..50a1dc89 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -25,6 +26,7 @@ Files created: s01.e20060601 - Mock Entry 20-7.info.json s01.e20060601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 20060601 genre: ytdl-sub @@ -41,6 +43,7 @@ Files created: aired: 2020-06-06 episode: 20060601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -52,6 +55,7 @@ Files created: s01.e20070601 - Mock Entry 20-6.info.json s01.e20070601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 20070601 genre: ytdl-sub @@ -68,6 +72,7 @@ Files created: aired: 2020-07-06 episode: 20070601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -79,6 +84,7 @@ Files created: s01.e20070602 - Mock Entry 20-5.info.json s01.e20070602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 20070602 genre: ytdl-sub @@ -95,6 +101,7 @@ Files created: aired: 2020-07-06 episode: 20070602 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -106,6 +113,7 @@ Files created: s01.e20080601 - Mock Entry 20-4.info.json s01.e20080601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 20080601 genre: ytdl-sub @@ -122,6 +130,7 @@ Files created: aired: 2020-08-06 episode: 20080601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -134,6 +143,7 @@ Files created: s02.e20080701 - Mock Entry 20-3.info.json s02.e20080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 20080701 genre: ytdl-sub @@ -150,6 +160,7 @@ Files created: aired: 2020-08-07 episode: 20080701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -161,6 +172,7 @@ Files created: s02.e20080801 - Mock Entry 20-2.info.json s02.e20080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080801 genre: ytdl-sub @@ -177,6 +189,7 @@ Files created: aired: 2020-08-08 episode: 20080801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -188,6 +201,7 @@ Files created: s02.e20080802 - Mock Entry 20-1.info.json s02.e20080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080802 genre: ytdl-sub @@ -204,6 +218,7 @@ Files created: aired: 2020-08-08 episode: 20080802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -215,6 +230,7 @@ Files created: s02.e21080801 - Mock Entry 21-1.info.json s02.e21080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 21080801 genre: ytdl-sub @@ -231,6 +247,7 @@ Files created: aired: 2021-08-08 episode: 21080801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 4e603221..6b718aa5 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -114,6 +122,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -130,6 +139,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -141,6 +151,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -157,6 +168,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -168,6 +180,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -184,6 +197,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -195,6 +209,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.txt index 15917b68..0dc27670 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.txt @@ -7,6 +7,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -17,6 +18,7 @@ Files created: s01.e79052499 - Mock Entry 21-1.info.json s01.e79052499 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 79052499 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: aired: 2021-08-08 episode: 79052499 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -44,6 +47,7 @@ Files created: s01.e80052498 - Mock Entry 20-1.info.json s01.e80052498 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052498 genre: ytdl-sub @@ -60,6 +64,7 @@ Files created: aired: 2020-08-08 episode: 80052498 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -71,6 +76,7 @@ Files created: s01.e80052499 - Mock Entry 20-2.info.json s01.e80052499 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052499 genre: ytdl-sub @@ -87,6 +93,7 @@ Files created: aired: 2020-08-08 episode: 80052499 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -98,6 +105,7 @@ Files created: s01.e80052599 - Mock Entry 20-3.info.json s01.e80052599 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80052599 genre: ytdl-sub @@ -114,6 +122,7 @@ Files created: aired: 2020-08-07 episode: 80052599 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 8430d901..bcb474cc 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.txt index a6b4e2a8..7cccba6c 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.txt @@ -9,6 +9,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -19,6 +20,7 @@ Files created: s01.e79052499 - Mock Entry 21-1.info.json s01.e79052499 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 79052499 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: aired: 2021-08-08 episode: 79052499 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -46,6 +49,7 @@ Files created: s01.e80052498 - Mock Entry 20-1.info.json s01.e80052498 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052498 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: aired: 2020-08-08 episode: 80052498 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -73,6 +78,7 @@ Files created: s01.e80052499 - Mock Entry 20-2.info.json s01.e80052499 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052499 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: aired: 2020-08-08 episode: 80052499 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -100,6 +107,7 @@ Files created: s01.e80052599 - Mock Entry 20-3.info.json s01.e80052599 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80052599 genre: ytdl-sub @@ -116,6 +124,7 @@ Files created: aired: 2020-08-07 episode: 80052599 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 8430d901..bcb474cc 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.txt index 1375639a..46780842 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -23,6 +24,7 @@ Files created: s01.e80052699 - Mock Entry 20-4.info.json s01.e80052699 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 80052699 genre: ytdl-sub @@ -39,6 +41,7 @@ Files created: aired: 2020-08-06 episode: 80052699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -50,6 +53,7 @@ Files created: s01.e80062698 - Mock Entry 20-5.info.json s01.e80062698 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 80062698 genre: ytdl-sub @@ -66,6 +70,7 @@ Files created: aired: 2020-07-06 episode: 80062698 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -77,6 +82,7 @@ Files created: s01.e80062699 - Mock Entry 20-6.info.json s01.e80062699 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 80062699 genre: ytdl-sub @@ -93,6 +99,7 @@ Files created: aired: 2020-07-06 episode: 80062699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -104,6 +111,7 @@ Files created: s01.e80072599 - Mock Entry 20-7.info.json s01.e80072599 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 80072599 genre: ytdl-sub @@ -120,6 +128,7 @@ Files created: aired: 2020-06-06 episode: 80072599 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -132,6 +141,7 @@ Files created: s02.e79052499 - Mock Entry 21-1.info.json s02.e79052499 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 79052499 genre: ytdl-sub @@ -148,6 +158,7 @@ Files created: aired: 2021-08-08 episode: 79052499 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -159,6 +170,7 @@ Files created: s02.e80052498 - Mock Entry 20-1.info.json s02.e80052498 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052498 genre: ytdl-sub @@ -175,6 +187,7 @@ Files created: aired: 2020-08-08 episode: 80052498 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -186,6 +199,7 @@ Files created: s02.e80052499 - Mock Entry 20-2.info.json s02.e80052499 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052499 genre: ytdl-sub @@ -202,6 +216,7 @@ Files created: aired: 2020-08-08 episode: 80052499 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -213,6 +228,7 @@ Files created: s02.e80052599 - Mock Entry 20-3.info.json s02.e80052599 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80052599 genre: ytdl-sub @@ -229,6 +245,7 @@ Files created: aired: 2020-08-07 episode: 80052599 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index c59bc37a..d26c0453 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -114,6 +122,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -130,6 +139,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -141,6 +151,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -157,6 +168,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -168,6 +180,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -184,6 +197,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -195,6 +209,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.txt index 813060c3..7b4a0614 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -25,6 +26,7 @@ Files created: s01.e80052699 - Mock Entry 20-4.info.json s01.e80052699 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 80052699 genre: ytdl-sub @@ -41,6 +43,7 @@ Files created: aired: 2020-08-06 episode: 80052699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -52,6 +55,7 @@ Files created: s01.e80062698 - Mock Entry 20-5.info.json s01.e80062698 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 80062698 genre: ytdl-sub @@ -68,6 +72,7 @@ Files created: aired: 2020-07-06 episode: 80062698 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -79,6 +84,7 @@ Files created: s01.e80062699 - Mock Entry 20-6.info.json s01.e80062699 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 80062699 genre: ytdl-sub @@ -95,6 +101,7 @@ Files created: aired: 2020-07-06 episode: 80062699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -106,6 +113,7 @@ Files created: s01.e80072599 - Mock Entry 20-7.info.json s01.e80072599 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 80072599 genre: ytdl-sub @@ -122,6 +130,7 @@ Files created: aired: 2020-06-06 episode: 80072599 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -134,6 +143,7 @@ Files created: s02.e79052499 - Mock Entry 21-1.info.json s02.e79052499 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 79052499 genre: ytdl-sub @@ -150,6 +160,7 @@ Files created: aired: 2021-08-08 episode: 79052499 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -161,6 +172,7 @@ Files created: s02.e80052498 - Mock Entry 20-1.info.json s02.e80052498 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052498 genre: ytdl-sub @@ -177,6 +189,7 @@ Files created: aired: 2020-08-08 episode: 80052498 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -188,6 +201,7 @@ Files created: s02.e80052499 - Mock Entry 20-2.info.json s02.e80052499 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052499 genre: ytdl-sub @@ -204,6 +218,7 @@ Files created: aired: 2020-08-08 episode: 80052499 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -215,6 +230,7 @@ Files created: s02.e80052599 - Mock Entry 20-3.info.json s02.e80052599 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80052599 genre: ytdl-sub @@ -231,6 +247,7 @@ Files created: aired: 2020-08-07 episode: 80052599 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index c59bc37a..d26c0453 100644 --- a/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/jellyfin_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -114,6 +122,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -130,6 +139,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -141,6 +151,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -157,6 +168,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -168,6 +180,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -184,6 +197,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -195,6 +209,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.txt index d9f93ecb..3bb743ca 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e000001 - Mock Entry 20-3-thumb.jpg s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -39,6 +42,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -66,6 +71,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -94,6 +101,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -110,6 +118,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.txt index 302a487d..746c837c 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e000001 - Mock Entry 20-3-thumb.jpg s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -39,6 +42,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -66,6 +71,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -93,6 +100,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -109,6 +117,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -120,6 +129,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -136,6 +146,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -147,6 +158,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -163,6 +175,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -174,6 +187,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -190,6 +204,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -202,6 +217,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -218,6 +234,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.txt index 619d6a12..30903093 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e000001 - Mock Entry 20-3-thumb.jpg s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -41,6 +44,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -68,6 +73,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -96,6 +103,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -112,6 +120,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.txt index e59eae6e..3d047cb6 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e000001 - Mock Entry 20-3-thumb.jpg s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -41,6 +44,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -68,6 +73,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -95,6 +102,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -111,6 +119,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -122,6 +131,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -138,6 +148,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -149,6 +160,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -165,6 +177,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -176,6 +189,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -192,6 +206,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -204,6 +219,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -220,6 +236,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.txt index 07ea4e63..be056900 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e080701 - Mock Entry 20-3-thumb.jpg s2020.e080701 - Mock Entry 20-3.info.json s2020.e080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80701 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-08-07 episode: 80701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -39,6 +42,7 @@ Files created: s2020.e080801 - Mock Entry 20-2.info.json s2020.e080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80801 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -66,6 +71,7 @@ Files created: s2020.e080802 - Mock Entry 20-1.info.json s2020.e080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80802 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-08-08 episode: 80802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -94,6 +101,7 @@ Files created: s2021.e080801 - Mock Entry 21-1.info.json s2021.e080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 80801 genre: ytdl-sub @@ -110,6 +118,7 @@ Files created: aired: 2021-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.txt index 59ae1071..2e0b7bd9 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e060601 - Mock Entry 20-7-thumb.jpg s2020.e060601 - Mock Entry 20-7.info.json s2020.e060601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 60601 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-06-06 episode: 60601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -39,6 +42,7 @@ Files created: s2020.e070601 - Mock Entry 20-6.info.json s2020.e070601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 70601 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-07-06 episode: 70601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -66,6 +71,7 @@ Files created: s2020.e070602 - Mock Entry 20-5.info.json s2020.e070602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 70602 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-07-06 episode: 70602 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -93,6 +100,7 @@ Files created: s2020.e080601 - Mock Entry 20-4.info.json s2020.e080601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 80601 genre: ytdl-sub @@ -109,6 +117,7 @@ Files created: aired: 2020-08-06 episode: 80601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -120,6 +129,7 @@ Files created: s2020.e080701 - Mock Entry 20-3.info.json s2020.e080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80701 genre: ytdl-sub @@ -136,6 +146,7 @@ Files created: aired: 2020-08-07 episode: 80701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -147,6 +158,7 @@ Files created: s2020.e080801 - Mock Entry 20-2.info.json s2020.e080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80801 genre: ytdl-sub @@ -163,6 +175,7 @@ Files created: aired: 2020-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -174,6 +187,7 @@ Files created: s2020.e080802 - Mock Entry 20-1.info.json s2020.e080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80802 genre: ytdl-sub @@ -190,6 +204,7 @@ Files created: aired: 2020-08-08 episode: 80802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -202,6 +217,7 @@ Files created: s2021.e080801 - Mock Entry 21-1.info.json s2021.e080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 80801 genre: ytdl-sub @@ -218,6 +234,7 @@ Files created: aired: 2021-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index e3d1ad58..f1bcd674 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -113,6 +121,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -129,6 +138,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -140,6 +150,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -156,6 +167,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -167,6 +179,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -183,6 +196,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -195,6 +209,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt index 978fc7b8..c67e3134 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -87,6 +93,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.txt index 80ee9e1c..b89836ef 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e080701 - Mock Entry 20-3-thumb.jpg s2020.e080701 - Mock Entry 20-3.info.json s2020.e080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80701 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-08-07 episode: 80701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -41,6 +44,7 @@ Files created: s2020.e080801 - Mock Entry 20-2.info.json s2020.e080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80801 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -68,6 +73,7 @@ Files created: s2020.e080802 - Mock Entry 20-1.info.json s2020.e080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80802 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-08-08 episode: 80802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -96,6 +103,7 @@ Files created: s2021.e080801 - Mock Entry 21-1.info.json s2021.e080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 80801 genre: ytdl-sub @@ -112,6 +120,7 @@ Files created: aired: 2021-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.txt index 0fa82089..b3521208 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e060601 - Mock Entry 20-7-thumb.jpg s2020.e060601 - Mock Entry 20-7.info.json s2020.e060601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 60601 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-06-06 episode: 60601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -41,6 +44,7 @@ Files created: s2020.e070601 - Mock Entry 20-6.info.json s2020.e070601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 70601 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-07-06 episode: 70601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -68,6 +73,7 @@ Files created: s2020.e070602 - Mock Entry 20-5.info.json s2020.e070602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 70602 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-07-06 episode: 70602 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -95,6 +102,7 @@ Files created: s2020.e080601 - Mock Entry 20-4.info.json s2020.e080601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 80601 genre: ytdl-sub @@ -111,6 +119,7 @@ Files created: aired: 2020-08-06 episode: 80601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -122,6 +131,7 @@ Files created: s2020.e080701 - Mock Entry 20-3.info.json s2020.e080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80701 genre: ytdl-sub @@ -138,6 +148,7 @@ Files created: aired: 2020-08-07 episode: 80701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -149,6 +160,7 @@ Files created: s2020.e080801 - Mock Entry 20-2.info.json s2020.e080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80801 genre: ytdl-sub @@ -165,6 +177,7 @@ Files created: aired: 2020-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -176,6 +189,7 @@ Files created: s2020.e080802 - Mock Entry 20-1.info.json s2020.e080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80802 genre: ytdl-sub @@ -192,6 +206,7 @@ Files created: aired: 2020-08-08 episode: 80802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -204,6 +219,7 @@ Files created: s2021.e080801 - Mock Entry 21-1.info.json s2021.e080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 80801 genre: ytdl-sub @@ -220,6 +236,7 @@ Files created: aired: 2021-08-08 episode: 80801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index e3d1ad58..f1bcd674 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -113,6 +121,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -129,6 +138,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -140,6 +150,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -156,6 +167,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -167,6 +179,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -183,6 +196,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -195,6 +209,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt index 978fc7b8..c67e3134 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -87,6 +93,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.txt index 79032d5c..addc9a35 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e14698 - Mock Entry 20-1-thumb.jpg s2020.e14698 - Mock Entry 20-1.info.json s2020.e14698 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14698 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-08-08 episode: 14698 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -39,6 +42,7 @@ Files created: s2020.e14699 - Mock Entry 20-2.info.json s2020.e14699 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14699 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -66,6 +71,7 @@ Files created: s2020.e14799 - Mock Entry 20-3.info.json s2020.e14799 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 14799 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-08-07 episode: 14799 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -94,6 +101,7 @@ Files created: s2021.e14699 - Mock Entry 21-1.info.json s2021.e14699 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 14699 genre: ytdl-sub @@ -110,6 +118,7 @@ Files created: aired: 2021-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.txt index c51ebe79..75b0dd90 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e14698 - Mock Entry 20-1-thumb.jpg s2020.e14698 - Mock Entry 20-1.info.json s2020.e14698 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14698 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-08-08 episode: 14698 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -39,6 +42,7 @@ Files created: s2020.e14699 - Mock Entry 20-2.info.json s2020.e14699 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14699 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -66,6 +71,7 @@ Files created: s2020.e14799 - Mock Entry 20-3.info.json s2020.e14799 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 14799 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-08-07 episode: 14799 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -93,6 +100,7 @@ Files created: s2020.e14899 - Mock Entry 20-4.info.json s2020.e14899 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 14899 genre: ytdl-sub @@ -109,6 +117,7 @@ Files created: aired: 2020-08-06 episode: 14899 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -120,6 +129,7 @@ Files created: s2020.e17998 - Mock Entry 20-5.info.json s2020.e17998 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 17998 genre: ytdl-sub @@ -136,6 +146,7 @@ Files created: aired: 2020-07-06 episode: 17998 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -147,6 +158,7 @@ Files created: s2020.e17999 - Mock Entry 20-6.info.json s2020.e17999 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 17999 genre: ytdl-sub @@ -163,6 +175,7 @@ Files created: aired: 2020-07-06 episode: 17999 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -174,6 +187,7 @@ Files created: s2020.e20999 - Mock Entry 20-7.info.json s2020.e20999 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 20999 genre: ytdl-sub @@ -190,6 +204,7 @@ Files created: aired: 2020-06-06 episode: 20999 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -202,6 +217,7 @@ Files created: s2021.e14699 - Mock Entry 21-1.info.json s2021.e14699 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 14699 genre: ytdl-sub @@ -218,6 +234,7 @@ Files created: aired: 2021-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index 12403604..ea3c3840 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -113,6 +121,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -129,6 +138,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -140,6 +150,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -156,6 +167,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -167,6 +179,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -183,6 +196,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -195,6 +209,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt index 43a77502..875414ba 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -87,6 +93,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.txt index a37c8517..0659d2a3 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e14698 - Mock Entry 20-1-thumb.jpg s2020.e14698 - Mock Entry 20-1.info.json s2020.e14698 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14698 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-08-08 episode: 14698 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -41,6 +44,7 @@ Files created: s2020.e14699 - Mock Entry 20-2.info.json s2020.e14699 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14699 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -68,6 +73,7 @@ Files created: s2020.e14799 - Mock Entry 20-3.info.json s2020.e14799 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 14799 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-08-07 episode: 14799 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -96,6 +103,7 @@ Files created: s2021.e14699 - Mock Entry 21-1.info.json s2021.e14699 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 14699 genre: ytdl-sub @@ -112,6 +120,7 @@ Files created: aired: 2021-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.txt index f3ed50ed..dcb67389 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 2020 s2020.e14698 - Mock Entry 20-1-thumb.jpg s2020.e14698 - Mock Entry 20-1.info.json s2020.e14698 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14698 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-08-08 episode: 14698 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -41,6 +44,7 @@ Files created: s2020.e14699 - Mock Entry 20-2.info.json s2020.e14699 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14699 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -68,6 +73,7 @@ Files created: s2020.e14799 - Mock Entry 20-3.info.json s2020.e14799 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 14799 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-08-07 episode: 14799 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -95,6 +102,7 @@ Files created: s2020.e14899 - Mock Entry 20-4.info.json s2020.e14899 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 14899 genre: ytdl-sub @@ -111,6 +119,7 @@ Files created: aired: 2020-08-06 episode: 14899 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -122,6 +131,7 @@ Files created: s2020.e17998 - Mock Entry 20-5.info.json s2020.e17998 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 17998 genre: ytdl-sub @@ -138,6 +148,7 @@ Files created: aired: 2020-07-06 episode: 17998 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -149,6 +160,7 @@ Files created: s2020.e17999 - Mock Entry 20-6.info.json s2020.e17999 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 17999 genre: ytdl-sub @@ -165,6 +177,7 @@ Files created: aired: 2020-07-06 episode: 17999 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -176,6 +189,7 @@ Files created: s2020.e20999 - Mock Entry 20-7.info.json s2020.e20999 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 20999 genre: ytdl-sub @@ -192,6 +206,7 @@ Files created: aired: 2020-06-06 episode: 20999 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -204,6 +219,7 @@ Files created: s2021.e14699 - Mock Entry 21-1.info.json s2021.e14699 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 14699 genre: ytdl-sub @@ -220,6 +236,7 @@ Files created: aired: 2021-08-08 episode: 14699 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index 12403604..ea3c3840 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -113,6 +121,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -129,6 +138,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -140,6 +150,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -156,6 +167,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -167,6 +179,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -183,6 +196,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -195,6 +209,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt index 43a77502..875414ba 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -87,6 +93,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.txt index 6a27d948..390ca376 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 202008 s202008.e0701 - Mock Entry 20-3-thumb.jpg s202008.e0701 - Mock Entry 20-3.info.json s202008.e0701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 701 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-08-07 episode: 701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -39,6 +42,7 @@ Files created: s202008.e0801 - Mock Entry 20-2.info.json s202008.e0801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 801 genre: ytdl-sub @@ -55,6 +59,7 @@ Files created: aired: 2020-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -66,6 +71,7 @@ Files created: s202008.e0802 - Mock Entry 20-1.info.json s202008.e0802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 802 genre: ytdl-sub @@ -82,6 +88,7 @@ Files created: aired: 2020-08-08 episode: 802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -94,6 +101,7 @@ Files created: s202108.e0801 - Mock Entry 21-1.info.json s202108.e0801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 801 genre: ytdl-sub @@ -110,6 +118,7 @@ Files created: aired: 2021-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.txt index 8bd25c8c..5227a555 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.txt @@ -6,12 +6,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 202006 s202006.e0601 - Mock Entry 20-7-thumb.jpg s202006.e0601 - Mock Entry 20-7.info.json s202006.e0601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 601 genre: ytdl-sub @@ -28,6 +30,7 @@ Files created: aired: 2020-06-06 episode: 601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -40,6 +43,7 @@ Files created: s202007.e0601 - Mock Entry 20-6.info.json s202007.e0601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 601 genre: ytdl-sub @@ -56,6 +60,7 @@ Files created: aired: 2020-07-06 episode: 601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -67,6 +72,7 @@ Files created: s202007.e0602 - Mock Entry 20-5.info.json s202007.e0602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 602 genre: ytdl-sub @@ -83,6 +89,7 @@ Files created: aired: 2020-07-06 episode: 602 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -95,6 +102,7 @@ Files created: s202008.e0601 - Mock Entry 20-4.info.json s202008.e0601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 601 genre: ytdl-sub @@ -111,6 +119,7 @@ Files created: aired: 2020-08-06 episode: 601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -122,6 +131,7 @@ Files created: s202008.e0701 - Mock Entry 20-3.info.json s202008.e0701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 701 genre: ytdl-sub @@ -138,6 +148,7 @@ Files created: aired: 2020-08-07 episode: 701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -149,6 +160,7 @@ Files created: s202008.e0801 - Mock Entry 20-2.info.json s202008.e0801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 801 genre: ytdl-sub @@ -165,6 +177,7 @@ Files created: aired: 2020-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -176,6 +189,7 @@ Files created: s202008.e0802 - Mock Entry 20-1.info.json s202008.e0802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 802 genre: ytdl-sub @@ -192,6 +206,7 @@ Files created: aired: 2020-08-08 episode: 802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -204,6 +219,7 @@ Files created: s202108.e0801 - Mock Entry 21-1.info.json s202108.e0801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 801 genre: ytdl-sub @@ -220,6 +236,7 @@ Files created: aired: 2021-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index 7eeba6cf..0d07fa73 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -113,6 +121,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -129,6 +138,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -140,6 +150,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -156,6 +167,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -167,6 +179,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -183,6 +196,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -195,6 +209,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt index ce103a17..c85bf941 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -87,6 +93,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.txt index 4c45f89b..81ae63b4 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 202008 s202008.e0701 - Mock Entry 20-3-thumb.jpg s202008.e0701 - Mock Entry 20-3.info.json s202008.e0701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 701 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-08-07 episode: 701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -41,6 +44,7 @@ Files created: s202008.e0801 - Mock Entry 20-2.info.json s202008.e0801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 801 genre: ytdl-sub @@ -57,6 +61,7 @@ Files created: aired: 2020-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -68,6 +73,7 @@ Files created: s202008.e0802 - Mock Entry 20-1.info.json s202008.e0802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 802 genre: ytdl-sub @@ -84,6 +90,7 @@ Files created: aired: 2020-08-08 episode: 802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -96,6 +103,7 @@ Files created: s202108.e0801 - Mock Entry 21-1.info.json s202108.e0801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 801 genre: ytdl-sub @@ -112,6 +120,7 @@ Files created: aired: 2021-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.txt index 1d3e444e..7b32f1fe 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.txt @@ -8,12 +8,14 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Best Prebuilt TV Show by Date {output_directory}/Season 202006 s202006.e0601 - Mock Entry 20-7-thumb.jpg s202006.e0601 - Mock Entry 20-7.info.json s202006.e0601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 601 genre: ytdl-sub @@ -30,6 +32,7 @@ Files created: aired: 2020-06-06 episode: 601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -42,6 +45,7 @@ Files created: s202007.e0601 - Mock Entry 20-6.info.json s202007.e0601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 601 genre: ytdl-sub @@ -58,6 +62,7 @@ Files created: aired: 2020-07-06 episode: 601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -69,6 +74,7 @@ Files created: s202007.e0602 - Mock Entry 20-5.info.json s202007.e0602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 602 genre: ytdl-sub @@ -85,6 +91,7 @@ Files created: aired: 2020-07-06 episode: 602 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -97,6 +104,7 @@ Files created: s202008.e0601 - Mock Entry 20-4.info.json s202008.e0601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 601 genre: ytdl-sub @@ -113,6 +121,7 @@ Files created: aired: 2020-08-06 episode: 601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -124,6 +133,7 @@ Files created: s202008.e0701 - Mock Entry 20-3.info.json s202008.e0701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 701 genre: ytdl-sub @@ -140,6 +150,7 @@ Files created: aired: 2020-08-07 episode: 701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -151,6 +162,7 @@ Files created: s202008.e0801 - Mock Entry 20-2.info.json s202008.e0801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 801 genre: ytdl-sub @@ -167,6 +179,7 @@ Files created: aired: 2020-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -178,6 +191,7 @@ Files created: s202008.e0802 - Mock Entry 20-1.info.json s202008.e0802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 802 genre: ytdl-sub @@ -194,6 +208,7 @@ Files created: aired: 2020-08-08 episode: 802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -206,6 +221,7 @@ Files created: s202108.e0801 - Mock Entry 21-1.info.json s202108.e0801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 801 genre: ytdl-sub @@ -222,6 +238,7 @@ Files created: aired: 2021-08-08 episode: 801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index 7eeba6cf..0d07fa73 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -113,6 +121,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -129,6 +138,7 @@ Files created: aired: 2020-07-06 episode: 6 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -140,6 +150,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -156,6 +167,7 @@ Files created: aired: 2020-07-06 episode: 7 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -167,6 +179,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -183,6 +196,7 @@ Files created: aired: 2020-08-06 episode: 8 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -195,6 +209,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt index ce103a17..c85bf941 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -87,6 +93,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.txt index 0977947d..360a9e8d 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.txt @@ -7,6 +7,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -17,6 +18,7 @@ Files created: s01.e000001 - Mock Entry 21-1.info.json s01.e000001 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 1 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: aired: 2021-08-08 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -44,6 +47,7 @@ Files created: s01.e000002 - Mock Entry 20-1.info.json s01.e000002 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -60,6 +64,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -71,6 +76,7 @@ Files created: s01.e000003 - Mock Entry 20-2.info.json s01.e000003 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -87,6 +93,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -98,6 +105,7 @@ Files created: s01.e000004 - Mock Entry 20-3.info.json s01.e000004 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 4 genre: ytdl-sub @@ -114,6 +122,7 @@ Files created: aired: 2020-08-07 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index f25898d1..8862d5ff 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.txt index a55ee4cb..557cac7d 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.txt @@ -9,6 +9,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -19,6 +20,7 @@ Files created: s01.e000001 - Mock Entry 21-1.info.json s01.e000001 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 1 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: aired: 2021-08-08 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -46,6 +49,7 @@ Files created: s01.e000002 - Mock Entry 20-1.info.json s01.e000002 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -73,6 +78,7 @@ Files created: s01.e000003 - Mock Entry 20-2.info.json s01.e000003 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -100,6 +107,7 @@ Files created: s01.e000004 - Mock Entry 20-3.info.json s01.e000004 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 4 genre: ytdl-sub @@ -116,6 +124,7 @@ Files created: aired: 2020-08-07 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index f25898d1..8862d5ff 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.txt index 8b35a2af..e77f4bd1 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -23,6 +24,7 @@ Files created: s01.e000002 - Mock Entry 20-4.info.json s01.e000002 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 2 genre: ytdl-sub @@ -39,6 +41,7 @@ Files created: aired: 2020-08-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -50,6 +53,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -66,6 +70,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -77,6 +82,7 @@ Files created: s01.e000004 - Mock Entry 20-6.info.json s01.e000004 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 4 genre: ytdl-sub @@ -93,6 +99,7 @@ Files created: aired: 2020-07-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -104,6 +111,7 @@ Files created: s01.e000005 - Mock Entry 20-7.info.json s01.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -120,6 +128,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -132,6 +141,7 @@ Files created: s02.e000001 - Mock Entry 21-1.info.json s02.e000001 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 1 genre: ytdl-sub @@ -148,6 +158,7 @@ Files created: aired: 2021-08-08 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -159,6 +170,7 @@ Files created: s02.e000002 - Mock Entry 20-1.info.json s02.e000002 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -175,6 +187,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -186,6 +199,7 @@ Files created: s02.e000003 - Mock Entry 20-2.info.json s02.e000003 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -202,6 +216,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -213,6 +228,7 @@ Files created: s02.e000004 - Mock Entry 20-3.info.json s02.e000004 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 4 genre: ytdl-sub @@ -229,6 +245,7 @@ Files created: aired: 2020-08-07 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index e6aefd73..a81d1cbe 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -59,6 +63,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -87,6 +93,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -114,6 +122,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -130,6 +139,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -141,6 +151,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -157,6 +168,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -168,6 +180,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -184,6 +197,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.txt index df3cdab6..39050e93 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -25,6 +26,7 @@ Files created: s01.e000002 - Mock Entry 20-4.info.json s01.e000002 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 2 genre: ytdl-sub @@ -41,6 +43,7 @@ Files created: aired: 2020-08-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -52,6 +55,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -68,6 +72,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -79,6 +84,7 @@ Files created: s01.e000004 - Mock Entry 20-6.info.json s01.e000004 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 4 genre: ytdl-sub @@ -95,6 +101,7 @@ Files created: aired: 2020-07-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -106,6 +113,7 @@ Files created: s01.e000005 - Mock Entry 20-7.info.json s01.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -122,6 +130,7 @@ Files created: aired: 2020-06-06 episode: 5 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -134,6 +143,7 @@ Files created: s02.e000001 - Mock Entry 21-1.info.json s02.e000001 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 1 genre: ytdl-sub @@ -150,6 +160,7 @@ Files created: aired: 2021-08-08 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -161,6 +172,7 @@ Files created: s02.e000002 - Mock Entry 20-1.info.json s02.e000002 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -177,6 +189,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -188,6 +201,7 @@ Files created: s02.e000003 - Mock Entry 20-2.info.json s02.e000003 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -204,6 +218,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -215,6 +230,7 @@ Files created: s02.e000004 - Mock Entry 20-3.info.json s02.e000004 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 4 genre: ytdl-sub @@ -231,6 +247,7 @@ Files created: aired: 2020-08-07 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index e6aefd73..a81d1cbe 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -59,6 +63,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -87,6 +93,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -103,6 +110,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -114,6 +122,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -130,6 +139,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -141,6 +151,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -157,6 +168,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -168,6 +180,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -184,6 +197,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.txt index 49d48dcb..156d310a 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.txt @@ -7,6 +7,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -17,6 +18,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -44,6 +47,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -60,6 +64,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -71,6 +76,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -87,6 +93,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -98,6 +105,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -114,6 +122,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.txt index 62150ca4..0c8004dc 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.txt @@ -9,6 +9,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -19,6 +20,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -46,6 +49,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -73,6 +78,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -100,6 +107,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -116,6 +124,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.txt index fda7dd51..9bf08670 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -23,6 +24,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -39,6 +41,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -50,6 +53,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -66,6 +70,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -77,6 +82,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -93,6 +99,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -104,6 +111,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -120,6 +128,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -132,6 +141,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -148,6 +158,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -159,6 +170,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -175,6 +187,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -186,6 +199,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -202,6 +216,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -213,6 +228,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -229,6 +245,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.txt index fb379058..87e532fc 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -25,6 +26,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -41,6 +43,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -52,6 +55,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -68,6 +72,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -79,6 +84,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -95,6 +101,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -106,6 +113,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -122,6 +130,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -134,6 +143,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -150,6 +160,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -161,6 +172,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -177,6 +189,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -188,6 +201,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -204,6 +218,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -215,6 +230,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -231,6 +247,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.txt index 0717c836..24f5c251 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.txt @@ -7,6 +7,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -17,6 +18,7 @@ Files created: s01.e20080701 - Mock Entry 20-3.info.json s01.e20080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 20080701 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: aired: 2020-08-07 episode: 20080701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -44,6 +47,7 @@ Files created: s01.e20080801 - Mock Entry 20-2.info.json s01.e20080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080801 genre: ytdl-sub @@ -60,6 +64,7 @@ Files created: aired: 2020-08-08 episode: 20080801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -71,6 +76,7 @@ Files created: s01.e20080802 - Mock Entry 20-1.info.json s01.e20080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080802 genre: ytdl-sub @@ -87,6 +93,7 @@ Files created: aired: 2020-08-08 episode: 20080802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -98,6 +105,7 @@ Files created: s01.e21080801 - Mock Entry 21-1.info.json s01.e21080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 21080801 genre: ytdl-sub @@ -114,6 +122,7 @@ Files created: aired: 2021-08-08 episode: 21080801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 8b3a14ff..91aa1f7e 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.txt index 23ff6b61..6d2f948b 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.txt @@ -9,6 +9,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -19,6 +20,7 @@ Files created: s01.e20080701 - Mock Entry 20-3.info.json s01.e20080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 20080701 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: aired: 2020-08-07 episode: 20080701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -46,6 +49,7 @@ Files created: s01.e20080801 - Mock Entry 20-2.info.json s01.e20080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080801 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: aired: 2020-08-08 episode: 20080801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -73,6 +78,7 @@ Files created: s01.e20080802 - Mock Entry 20-1.info.json s01.e20080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080802 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: aired: 2020-08-08 episode: 20080802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -100,6 +107,7 @@ Files created: s01.e21080801 - Mock Entry 21-1.info.json s01.e21080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 21080801 genre: ytdl-sub @@ -116,6 +124,7 @@ Files created: aired: 2021-08-08 episode: 21080801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 8b3a14ff..91aa1f7e 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.txt index 0ddcd80f..7704395b 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -23,6 +24,7 @@ Files created: s01.e20060601 - Mock Entry 20-7.info.json s01.e20060601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 20060601 genre: ytdl-sub @@ -39,6 +41,7 @@ Files created: aired: 2020-06-06 episode: 20060601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -50,6 +53,7 @@ Files created: s01.e20070601 - Mock Entry 20-6.info.json s01.e20070601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 20070601 genre: ytdl-sub @@ -66,6 +70,7 @@ Files created: aired: 2020-07-06 episode: 20070601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -77,6 +82,7 @@ Files created: s01.e20070602 - Mock Entry 20-5.info.json s01.e20070602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 20070602 genre: ytdl-sub @@ -93,6 +99,7 @@ Files created: aired: 2020-07-06 episode: 20070602 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -104,6 +111,7 @@ Files created: s01.e20080601 - Mock Entry 20-4.info.json s01.e20080601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 20080601 genre: ytdl-sub @@ -120,6 +128,7 @@ Files created: aired: 2020-08-06 episode: 20080601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -132,6 +141,7 @@ Files created: s02.e20080701 - Mock Entry 20-3.info.json s02.e20080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 20080701 genre: ytdl-sub @@ -148,6 +158,7 @@ Files created: aired: 2020-08-07 episode: 20080701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -159,6 +170,7 @@ Files created: s02.e20080801 - Mock Entry 20-2.info.json s02.e20080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080801 genre: ytdl-sub @@ -175,6 +187,7 @@ Files created: aired: 2020-08-08 episode: 20080801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -186,6 +199,7 @@ Files created: s02.e20080802 - Mock Entry 20-1.info.json s02.e20080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080802 genre: ytdl-sub @@ -202,6 +216,7 @@ Files created: aired: 2020-08-08 episode: 20080802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -213,6 +228,7 @@ Files created: s02.e21080801 - Mock Entry 21-1.info.json s02.e21080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 21080801 genre: ytdl-sub @@ -229,6 +245,7 @@ Files created: aired: 2021-08-08 episode: 21080801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 4e603221..6b718aa5 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -114,6 +122,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -130,6 +139,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -141,6 +151,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -157,6 +168,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -168,6 +180,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -184,6 +197,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -195,6 +209,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.txt index f4c9457e..50a1dc89 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -25,6 +26,7 @@ Files created: s01.e20060601 - Mock Entry 20-7.info.json s01.e20060601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 20060601 genre: ytdl-sub @@ -41,6 +43,7 @@ Files created: aired: 2020-06-06 episode: 20060601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -52,6 +55,7 @@ Files created: s01.e20070601 - Mock Entry 20-6.info.json s01.e20070601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 20070601 genre: ytdl-sub @@ -68,6 +72,7 @@ Files created: aired: 2020-07-06 episode: 20070601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -79,6 +84,7 @@ Files created: s01.e20070602 - Mock Entry 20-5.info.json s01.e20070602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 20070602 genre: ytdl-sub @@ -95,6 +101,7 @@ Files created: aired: 2020-07-06 episode: 20070602 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -106,6 +113,7 @@ Files created: s01.e20080601 - Mock Entry 20-4.info.json s01.e20080601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 20080601 genre: ytdl-sub @@ -122,6 +130,7 @@ Files created: aired: 2020-08-06 episode: 20080601 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -134,6 +143,7 @@ Files created: s02.e20080701 - Mock Entry 20-3.info.json s02.e20080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 20080701 genre: ytdl-sub @@ -150,6 +160,7 @@ Files created: aired: 2020-08-07 episode: 20080701 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -161,6 +172,7 @@ Files created: s02.e20080801 - Mock Entry 20-2.info.json s02.e20080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080801 genre: ytdl-sub @@ -177,6 +189,7 @@ Files created: aired: 2020-08-08 episode: 20080801 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -188,6 +201,7 @@ Files created: s02.e20080802 - Mock Entry 20-1.info.json s02.e20080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080802 genre: ytdl-sub @@ -204,6 +218,7 @@ Files created: aired: 2020-08-08 episode: 20080802 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -215,6 +230,7 @@ Files created: s02.e21080801 - Mock Entry 21-1.info.json s02.e21080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 21080801 genre: ytdl-sub @@ -231,6 +247,7 @@ Files created: aired: 2021-08-08 episode: 21080801 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 4e603221..6b718aa5 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -114,6 +122,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -130,6 +139,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -141,6 +151,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -157,6 +168,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -168,6 +180,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -184,6 +197,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -195,6 +209,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.txt index 15917b68..0dc27670 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.txt @@ -7,6 +7,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -17,6 +18,7 @@ Files created: s01.e79052499 - Mock Entry 21-1.info.json s01.e79052499 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 79052499 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: aired: 2021-08-08 episode: 79052499 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -44,6 +47,7 @@ Files created: s01.e80052498 - Mock Entry 20-1.info.json s01.e80052498 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052498 genre: ytdl-sub @@ -60,6 +64,7 @@ Files created: aired: 2020-08-08 episode: 80052498 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -71,6 +76,7 @@ Files created: s01.e80052499 - Mock Entry 20-2.info.json s01.e80052499 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052499 genre: ytdl-sub @@ -87,6 +93,7 @@ Files created: aired: 2020-08-08 episode: 80052499 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -98,6 +105,7 @@ Files created: s01.e80052599 - Mock Entry 20-3.info.json s01.e80052599 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80052599 genre: ytdl-sub @@ -114,6 +122,7 @@ Files created: aired: 2020-08-07 episode: 80052599 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 8430d901..bcb474cc 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.txt index a6b4e2a8..7cccba6c 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.txt @@ -9,6 +9,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -19,6 +20,7 @@ Files created: s01.e79052499 - Mock Entry 21-1.info.json s01.e79052499 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 79052499 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: aired: 2021-08-08 episode: 79052499 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -46,6 +49,7 @@ Files created: s01.e80052498 - Mock Entry 20-1.info.json s01.e80052498 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052498 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: aired: 2020-08-08 episode: 80052498 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -73,6 +78,7 @@ Files created: s01.e80052499 - Mock Entry 20-2.info.json s01.e80052499 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052499 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: aired: 2020-08-08 episode: 80052499 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -100,6 +107,7 @@ Files created: s01.e80052599 - Mock Entry 20-3.info.json s01.e80052599 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80052599 genre: ytdl-sub @@ -116,6 +124,7 @@ Files created: aired: 2020-08-07 episode: 80052599 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 8430d901..bcb474cc 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.txt index 1375639a..46780842 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -23,6 +24,7 @@ Files created: s01.e80052699 - Mock Entry 20-4.info.json s01.e80052699 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 80052699 genre: ytdl-sub @@ -39,6 +41,7 @@ Files created: aired: 2020-08-06 episode: 80052699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -50,6 +53,7 @@ Files created: s01.e80062698 - Mock Entry 20-5.info.json s01.e80062698 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 80062698 genre: ytdl-sub @@ -66,6 +70,7 @@ Files created: aired: 2020-07-06 episode: 80062698 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -77,6 +82,7 @@ Files created: s01.e80062699 - Mock Entry 20-6.info.json s01.e80062699 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 80062699 genre: ytdl-sub @@ -93,6 +99,7 @@ Files created: aired: 2020-07-06 episode: 80062699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -104,6 +111,7 @@ Files created: s01.e80072599 - Mock Entry 20-7.info.json s01.e80072599 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 80072599 genre: ytdl-sub @@ -120,6 +128,7 @@ Files created: aired: 2020-06-06 episode: 80072599 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -132,6 +141,7 @@ Files created: s02.e79052499 - Mock Entry 21-1.info.json s02.e79052499 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 79052499 genre: ytdl-sub @@ -148,6 +158,7 @@ Files created: aired: 2021-08-08 episode: 79052499 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -159,6 +170,7 @@ Files created: s02.e80052498 - Mock Entry 20-1.info.json s02.e80052498 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052498 genre: ytdl-sub @@ -175,6 +187,7 @@ Files created: aired: 2020-08-08 episode: 80052498 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -186,6 +199,7 @@ Files created: s02.e80052499 - Mock Entry 20-2.info.json s02.e80052499 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052499 genre: ytdl-sub @@ -202,6 +216,7 @@ Files created: aired: 2020-08-08 episode: 80052499 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -213,6 +228,7 @@ Files created: s02.e80052599 - Mock Entry 20-3.info.json s02.e80052599 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80052599 genre: ytdl-sub @@ -229,6 +245,7 @@ Files created: aired: 2020-08-07 episode: 80052599 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index c59bc37a..d26c0453 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -114,6 +122,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -130,6 +139,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -141,6 +151,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -157,6 +168,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -168,6 +180,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -184,6 +197,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -195,6 +209,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.txt index 813060c3..7b4a0614 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 namedseason: - attributes: @@ -25,6 +26,7 @@ Files created: s01.e80052699 - Mock Entry 20-4.info.json s01.e80052699 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 80052699 genre: ytdl-sub @@ -41,6 +43,7 @@ Files created: aired: 2020-08-06 episode: 80052699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -52,6 +55,7 @@ Files created: s01.e80062698 - Mock Entry 20-5.info.json s01.e80062698 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 80062698 genre: ytdl-sub @@ -68,6 +72,7 @@ Files created: aired: 2020-07-06 episode: 80062698 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -79,6 +84,7 @@ Files created: s01.e80062699 - Mock Entry 20-6.info.json s01.e80062699 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 80062699 genre: ytdl-sub @@ -95,6 +101,7 @@ Files created: aired: 2020-07-06 episode: 80062699 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -106,6 +113,7 @@ Files created: s01.e80072599 - Mock Entry 20-7.info.json s01.e80072599 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 80072599 genre: ytdl-sub @@ -122,6 +130,7 @@ Files created: aired: 2020-06-06 episode: 80072599 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -134,6 +143,7 @@ Files created: s02.e79052499 - Mock Entry 21-1.info.json s02.e79052499 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 79052499 genre: ytdl-sub @@ -150,6 +160,7 @@ Files created: aired: 2021-08-08 episode: 79052499 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com @@ -161,6 +172,7 @@ Files created: s02.e80052498 - Mock Entry 20-1.info.json s02.e80052498 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052498 genre: ytdl-sub @@ -177,6 +189,7 @@ Files created: aired: 2020-08-08 episode: 80052498 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -188,6 +201,7 @@ Files created: s02.e80052499 - Mock Entry 20-2.info.json s02.e80052499 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052499 genre: ytdl-sub @@ -204,6 +218,7 @@ Files created: aired: 2020-08-08 episode: 80052499 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -215,6 +230,7 @@ Files created: s02.e80052599 - Mock Entry 20-3.info.json s02.e80052599 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80052599 genre: ytdl-sub @@ -231,6 +247,7 @@ Files created: aired: 2020-08-07 episode: 80052599 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com diff --git a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index c59bc37a..d26c0453 100644 --- a/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/kodi_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: aired: 2020-06-06 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-7.com @@ -32,6 +34,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: aired: 2020-07-06 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-6.com @@ -59,6 +63,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: aired: 2020-07-06 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-5.com @@ -86,6 +92,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -102,6 +109,7 @@ Files created: aired: 2020-08-06 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://20-4.com @@ -114,6 +122,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -130,6 +139,7 @@ Files created: aired: 2020-08-07 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://20-3.com @@ -141,6 +151,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -157,6 +168,7 @@ Files created: aired: 2020-08-08 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://20-2.com @@ -168,6 +180,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -184,6 +197,7 @@ Files created: aired: 2020-08-08 episode: 3 genre: ytdl-sub + mpaa: TV-14 plot: https://20-1.com @@ -195,6 +209,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub @@ -211,6 +226,7 @@ Files created: aired: 2021-08-08 episode: 4 genre: ytdl-sub + mpaa: TV-14 plot: https://21-1.com diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.txt index db8a8fd3..46c6163a 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0.txt @@ -7,6 +7,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -50,6 +53,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.txt index d3931545..923eb84f 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_0_many_urls.txt @@ -7,6 +7,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -49,6 +52,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -63,6 +67,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -77,6 +82,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -91,6 +97,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -106,6 +113,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.txt index fd01cdd7..f04439fa 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1.txt @@ -9,6 +9,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -23,6 +24,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -37,6 +39,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -52,6 +55,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.txt index eea29323..c56a91ac 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_download_index/is_yt_1_many_urls.txt @@ -9,6 +9,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -23,6 +24,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -37,6 +39,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -51,6 +54,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -65,6 +69,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -79,6 +84,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -93,6 +99,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -108,6 +115,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.txt index 80c0ca2e..3a1bf33b 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0.txt @@ -7,6 +7,7 @@ Files created: s2020.e080701 - Mock Entry 20-3.info.json s2020.e080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80701 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: s2020.e080801 - Mock Entry 20-2.info.json s2020.e080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80801 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: s2020.e080802 - Mock Entry 20-1.info.json s2020.e080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80802 genre: ytdl-sub @@ -50,6 +53,7 @@ Files created: s2021.e080801 - Mock Entry 21-1.info.json s2021.e080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 80801 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.txt index 54d8c055..75bb7ab8 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls.txt @@ -7,6 +7,7 @@ Files created: s2020.e060601 - Mock Entry 20-7.info.json s2020.e060601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 60601 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: s2020.e070601 - Mock Entry 20-6.info.json s2020.e070601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 70601 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: s2020.e070602 - Mock Entry 20-5.info.json s2020.e070602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 70602 genre: ytdl-sub @@ -49,6 +52,7 @@ Files created: s2020.e080601 - Mock Entry 20-4.info.json s2020.e080601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 80601 genre: ytdl-sub @@ -63,6 +67,7 @@ Files created: s2020.e080701 - Mock Entry 20-3.info.json s2020.e080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80701 genre: ytdl-sub @@ -77,6 +82,7 @@ Files created: s2020.e080801 - Mock Entry 20-2.info.json s2020.e080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80801 genre: ytdl-sub @@ -91,6 +97,7 @@ Files created: s2020.e080802 - Mock Entry 20-1.info.json s2020.e080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80802 genre: ytdl-sub @@ -106,6 +113,7 @@ Files created: s2021.e080801 - Mock Entry 21-1.info.json s2021.e080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 80801 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index 104ad139..266a98d5 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -61,6 +65,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -104,6 +111,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt index bc1defa2..b8842346 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.txt index 1447a5fd..2494db3f 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1.txt @@ -9,6 +9,7 @@ Files created: s2020.e080701 - Mock Entry 20-3.info.json s2020.e080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80701 genre: ytdl-sub @@ -23,6 +24,7 @@ Files created: s2020.e080801 - Mock Entry 20-2.info.json s2020.e080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80801 genre: ytdl-sub @@ -37,6 +39,7 @@ Files created: s2020.e080802 - Mock Entry 20-1.info.json s2020.e080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80802 genre: ytdl-sub @@ -52,6 +55,7 @@ Files created: s2021.e080801 - Mock Entry 21-1.info.json s2021.e080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 80801 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.txt index 840d588c..94346706 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls.txt @@ -9,6 +9,7 @@ Files created: s2020.e060601 - Mock Entry 20-7.info.json s2020.e060601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 60601 genre: ytdl-sub @@ -23,6 +24,7 @@ Files created: s2020.e070601 - Mock Entry 20-6.info.json s2020.e070601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 70601 genre: ytdl-sub @@ -37,6 +39,7 @@ Files created: s2020.e070602 - Mock Entry 20-5.info.json s2020.e070602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 70602 genre: ytdl-sub @@ -51,6 +54,7 @@ Files created: s2020.e080601 - Mock Entry 20-4.info.json s2020.e080601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 80601 genre: ytdl-sub @@ -65,6 +69,7 @@ Files created: s2020.e080701 - Mock Entry 20-3.info.json s2020.e080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80701 genre: ytdl-sub @@ -79,6 +84,7 @@ Files created: s2020.e080801 - Mock Entry 20-2.info.json s2020.e080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80801 genre: ytdl-sub @@ -93,6 +99,7 @@ Files created: s2020.e080802 - Mock Entry 20-1.info.json s2020.e080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80802 genre: ytdl-sub @@ -108,6 +115,7 @@ Files created: s2021.e080801 - Mock Entry 21-1.info.json s2021.e080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 80801 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index 104ad139..266a98d5 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -61,6 +65,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -104,6 +111,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt index bc1defa2..b8842346 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.txt index ae17575a..2217732f 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0.txt @@ -7,6 +7,7 @@ Files created: s2020.e14698 - Mock Entry 20-1.info.json s2020.e14698 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14698 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: s2020.e14699 - Mock Entry 20-2.info.json s2020.e14699 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14699 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: s2020.e14799 - Mock Entry 20-3.info.json s2020.e14799 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 14799 genre: ytdl-sub @@ -50,6 +53,7 @@ Files created: s2021.e14699 - Mock Entry 21-1.info.json s2021.e14699 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 14699 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.txt index cf1c4185..648ae5ec 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls.txt @@ -7,6 +7,7 @@ Files created: s2020.e14698 - Mock Entry 20-1.info.json s2020.e14698 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14698 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: s2020.e14699 - Mock Entry 20-2.info.json s2020.e14699 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14699 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: s2020.e14799 - Mock Entry 20-3.info.json s2020.e14799 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 14799 genre: ytdl-sub @@ -49,6 +52,7 @@ Files created: s2020.e14899 - Mock Entry 20-4.info.json s2020.e14899 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 14899 genre: ytdl-sub @@ -63,6 +67,7 @@ Files created: s2020.e17998 - Mock Entry 20-5.info.json s2020.e17998 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 17998 genre: ytdl-sub @@ -77,6 +82,7 @@ Files created: s2020.e17999 - Mock Entry 20-6.info.json s2020.e17999 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 17999 genre: ytdl-sub @@ -91,6 +97,7 @@ Files created: s2020.e20999 - Mock Entry 20-7.info.json s2020.e20999 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 20999 genre: ytdl-sub @@ -106,6 +113,7 @@ Files created: s2021.e14699 - Mock Entry 21-1.info.json s2021.e14699 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 14699 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index fed223fa..69f33334 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -61,6 +65,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -104,6 +111,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt index 3fb0c1d6..421e3fea 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.txt index 482aad63..8d52dcba 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1.txt @@ -9,6 +9,7 @@ Files created: s2020.e14698 - Mock Entry 20-1.info.json s2020.e14698 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14698 genre: ytdl-sub @@ -23,6 +24,7 @@ Files created: s2020.e14699 - Mock Entry 20-2.info.json s2020.e14699 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14699 genre: ytdl-sub @@ -37,6 +39,7 @@ Files created: s2020.e14799 - Mock Entry 20-3.info.json s2020.e14799 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 14799 genre: ytdl-sub @@ -52,6 +55,7 @@ Files created: s2021.e14699 - Mock Entry 21-1.info.json s2021.e14699 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 14699 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.txt index 96455bdd..076ddb04 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls.txt @@ -9,6 +9,7 @@ Files created: s2020.e14698 - Mock Entry 20-1.info.json s2020.e14698 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14698 genre: ytdl-sub @@ -23,6 +24,7 @@ Files created: s2020.e14699 - Mock Entry 20-2.info.json s2020.e14699 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 14699 genre: ytdl-sub @@ -37,6 +39,7 @@ Files created: s2020.e14799 - Mock Entry 20-3.info.json s2020.e14799 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 14799 genre: ytdl-sub @@ -51,6 +54,7 @@ Files created: s2020.e14899 - Mock Entry 20-4.info.json s2020.e14899 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 14899 genre: ytdl-sub @@ -65,6 +69,7 @@ Files created: s2020.e17998 - Mock Entry 20-5.info.json s2020.e17998 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 17998 genre: ytdl-sub @@ -79,6 +84,7 @@ Files created: s2020.e17999 - Mock Entry 20-6.info.json s2020.e17999 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 17999 genre: ytdl-sub @@ -93,6 +99,7 @@ Files created: s2020.e20999 - Mock Entry 20-7.info.json s2020.e20999 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 20999 genre: ytdl-sub @@ -108,6 +115,7 @@ Files created: s2021.e14699 - Mock Entry 21-1.info.json s2021.e14699 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 14699 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index fed223fa..69f33334 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -61,6 +65,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -104,6 +111,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt index 3fb0c1d6..421e3fea 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year__episode_by_month_day_reversed/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.txt index fe80a413..6769a2ae 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0.txt @@ -7,6 +7,7 @@ Files created: s202008.e0701 - Mock Entry 20-3.info.json s202008.e0701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 701 genre: ytdl-sub @@ -21,6 +22,7 @@ Files created: s202008.e0801 - Mock Entry 20-2.info.json s202008.e0801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 801 genre: ytdl-sub @@ -35,6 +37,7 @@ Files created: s202008.e0802 - Mock Entry 20-1.info.json s202008.e0802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 802 genre: ytdl-sub @@ -50,6 +53,7 @@ Files created: s202108.e0801 - Mock Entry 21-1.info.json s202108.e0801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 801 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.txt index 77d5ba1b..ec63093e 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls.txt @@ -7,6 +7,7 @@ Files created: s202006.e0601 - Mock Entry 20-7.info.json s202006.e0601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 601 genre: ytdl-sub @@ -22,6 +23,7 @@ Files created: s202007.e0601 - Mock Entry 20-6.info.json s202007.e0601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 601 genre: ytdl-sub @@ -36,6 +38,7 @@ Files created: s202007.e0602 - Mock Entry 20-5.info.json s202007.e0602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 602 genre: ytdl-sub @@ -51,6 +54,7 @@ Files created: s202008.e0601 - Mock Entry 20-4.info.json s202008.e0601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 601 genre: ytdl-sub @@ -65,6 +69,7 @@ Files created: s202008.e0701 - Mock Entry 20-3.info.json s202008.e0701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 701 genre: ytdl-sub @@ -79,6 +84,7 @@ Files created: s202008.e0801 - Mock Entry 20-2.info.json s202008.e0801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 801 genre: ytdl-sub @@ -93,6 +99,7 @@ Files created: s202008.e0802 - Mock Entry 20-1.info.json s202008.e0802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 802 genre: ytdl-sub @@ -108,6 +115,7 @@ Files created: s202108.e0801 - Mock Entry 21-1.info.json s202108.e0801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 801 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index 6d589a37..8c266f43 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -61,6 +65,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -104,6 +111,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt index 14b7de1a..5d2cd252 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_0_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.txt index 58fc58da..0a010b47 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1.txt @@ -9,6 +9,7 @@ Files created: s202008.e0701 - Mock Entry 20-3.info.json s202008.e0701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 701 genre: ytdl-sub @@ -23,6 +24,7 @@ Files created: s202008.e0801 - Mock Entry 20-2.info.json s202008.e0801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 801 genre: ytdl-sub @@ -37,6 +39,7 @@ Files created: s202008.e0802 - Mock Entry 20-1.info.json s202008.e0802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 802 genre: ytdl-sub @@ -52,6 +55,7 @@ Files created: s202108.e0801 - Mock Entry 21-1.info.json s202108.e0801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 801 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.txt index 2fc9e5ae..041fdf1f 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls.txt @@ -9,6 +9,7 @@ Files created: s202006.e0601 - Mock Entry 20-7.info.json s202006.e0601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 601 genre: ytdl-sub @@ -24,6 +25,7 @@ Files created: s202007.e0601 - Mock Entry 20-6.info.json s202007.e0601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 601 genre: ytdl-sub @@ -38,6 +40,7 @@ Files created: s202007.e0602 - Mock Entry 20-5.info.json s202007.e0602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 602 genre: ytdl-sub @@ -53,6 +56,7 @@ Files created: s202008.e0601 - Mock Entry 20-4.info.json s202008.e0601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 601 genre: ytdl-sub @@ -67,6 +71,7 @@ Files created: s202008.e0701 - Mock Entry 20-3.info.json s202008.e0701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 701 genre: ytdl-sub @@ -81,6 +86,7 @@ Files created: s202008.e0801 - Mock Entry 20-2.info.json s202008.e0801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 801 genre: ytdl-sub @@ -95,6 +101,7 @@ Files created: s202008.e0802 - Mock Entry 20-1.info.json s202008.e0802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 802 genre: ytdl-sub @@ -110,6 +117,7 @@ Files created: s202108.e0801 - Mock Entry 21-1.info.json s202108.e0801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 801 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt index 6d589a37..8c266f43 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_many_urls_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s2020.e000005 - Mock Entry 20-7.info.json s2020.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -61,6 +65,7 @@ Files created: s2020.e000006 - Mock Entry 20-6.info.json s2020.e000006 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 6 genre: ytdl-sub @@ -75,6 +80,7 @@ Files created: s2020.e000007 - Mock Entry 20-5.info.json s2020.e000007 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 7 genre: ytdl-sub @@ -89,6 +95,7 @@ Files created: s2020.e000008 - Mock Entry 20-4.info.json s2020.e000008 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 8 genre: ytdl-sub @@ -104,6 +111,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt index 14b7de1a..5d2cd252 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_by_date/season_by_year_month__episode_by_day/is_yt_1_reformatted_to_season_by_year__episode_by_download_index.txt @@ -5,6 +5,7 @@ Files created: s2020.e000001 - Mock Entry 20-3.info.json s2020.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s2020.e000002 - Mock Entry 20-2.info.json s2020.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s2020.e000003 - Mock Entry 20-1.info.json s2020.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: s2021.e000004 - Mock Entry 21-1.info.json s2021.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.txt index 4329a2ba..07c7ab41 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: s01.e000001 - Mock Entry 21-1.info.json s01.e000001 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 1 genre: ytdl-sub @@ -22,6 +23,7 @@ Files created: s01.e000002 - Mock Entry 20-1.info.json s01.e000002 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -36,6 +38,7 @@ Files created: s01.e000003 - Mock Entry 20-2.info.json s01.e000003 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -50,6 +53,7 @@ Files created: s01.e000004 - Mock Entry 20-3.info.json s01.e000004 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index a6bcebc1..39251e8f 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.txt index a29ac270..7200d76f 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: s01.e000001 - Mock Entry 21-1.info.json s01.e000001 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 1 genre: ytdl-sub @@ -24,6 +25,7 @@ Files created: s01.e000002 - Mock Entry 20-1.info.json s01.e000002 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -38,6 +40,7 @@ Files created: s01.e000003 - Mock Entry 20-2.info.json s01.e000003 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -52,6 +55,7 @@ Files created: s01.e000004 - Mock Entry 20-3.info.json s01.e000004 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index a6bcebc1..39251e8f 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.txt index 64c71f99..bd7db6a9 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: s01.e000002 - Mock Entry 20-4.info.json s01.e000002 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 2 genre: ytdl-sub @@ -22,6 +23,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -36,6 +38,7 @@ Files created: s01.e000004 - Mock Entry 20-6.info.json s01.e000004 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 4 genre: ytdl-sub @@ -50,6 +53,7 @@ Files created: s01.e000005 - Mock Entry 20-7.info.json s01.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -66,6 +70,7 @@ Files created: s02.e000001 - Mock Entry 21-1.info.json s02.e000001 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 1 genre: ytdl-sub @@ -80,6 +85,7 @@ Files created: s02.e000002 - Mock Entry 20-1.info.json s02.e000002 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -94,6 +100,7 @@ Files created: s02.e000003 - Mock Entry 20-2.info.json s02.e000003 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -108,6 +115,7 @@ Files created: s02.e000004 - Mock Entry 20-3.info.json s02.e000004 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index e2bffc60..d16a32e4 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -76,6 +81,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -90,6 +96,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.txt index f16b6da5..d5031a44 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: s01.e000002 - Mock Entry 20-4.info.json s01.e000002 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 2 genre: ytdl-sub @@ -24,6 +25,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -38,6 +40,7 @@ Files created: s01.e000004 - Mock Entry 20-6.info.json s01.e000004 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 4 genre: ytdl-sub @@ -52,6 +55,7 @@ Files created: s01.e000005 - Mock Entry 20-7.info.json s01.e000005 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 5 genre: ytdl-sub @@ -68,6 +72,7 @@ Files created: s02.e000001 - Mock Entry 21-1.info.json s02.e000001 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 1 genre: ytdl-sub @@ -82,6 +87,7 @@ Files created: s02.e000002 - Mock Entry 20-1.info.json s02.e000002 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -96,6 +102,7 @@ Files created: s02.e000003 - Mock Entry 20-2.info.json s02.e000003 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -110,6 +117,7 @@ Files created: s02.e000004 - Mock Entry 20-3.info.json s02.e000004 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index e2bffc60..d16a32e4 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -48,6 +51,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -76,6 +81,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -90,6 +96,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.txt index df0633de..cacf50ae 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -22,6 +23,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -36,6 +38,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -50,6 +53,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.txt index bc72716d..32f0e1b5 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_1/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -24,6 +25,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -38,6 +40,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -52,6 +55,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.txt index 239158db..89dfcf32 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -22,6 +23,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -36,6 +38,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -50,6 +53,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -66,6 +70,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -80,6 +85,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -94,6 +100,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -108,6 +115,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.txt index 2eb371b2..6b504e19 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_playlist_index_reversed/s_2/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -24,6 +25,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -38,6 +40,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -52,6 +55,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -68,6 +72,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -82,6 +87,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -96,6 +102,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -110,6 +117,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.txt index ecf5ae65..b1fd4c53 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: s01.e20080701 - Mock Entry 20-3.info.json s01.e20080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 20080701 genre: ytdl-sub @@ -22,6 +23,7 @@ Files created: s01.e20080801 - Mock Entry 20-2.info.json s01.e20080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080801 genre: ytdl-sub @@ -36,6 +38,7 @@ Files created: s01.e20080802 - Mock Entry 20-1.info.json s01.e20080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080802 genre: ytdl-sub @@ -50,6 +53,7 @@ Files created: s01.e21080801 - Mock Entry 21-1.info.json s01.e21080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 21080801 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index e09274b1..0acb4afb 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.txt index 2c7e3275..d2e7e1f1 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: s01.e20080701 - Mock Entry 20-3.info.json s01.e20080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 20080701 genre: ytdl-sub @@ -24,6 +25,7 @@ Files created: s01.e20080801 - Mock Entry 20-2.info.json s01.e20080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080801 genre: ytdl-sub @@ -38,6 +40,7 @@ Files created: s01.e20080802 - Mock Entry 20-1.info.json s01.e20080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080802 genre: ytdl-sub @@ -52,6 +55,7 @@ Files created: s01.e21080801 - Mock Entry 21-1.info.json s01.e21080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 21080801 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index e09274b1..0acb4afb 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.txt index ba760a5a..0d6872df 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: s01.e20060601 - Mock Entry 20-7.info.json s01.e20060601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 20060601 genre: ytdl-sub @@ -22,6 +23,7 @@ Files created: s01.e20070601 - Mock Entry 20-6.info.json s01.e20070601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 20070601 genre: ytdl-sub @@ -36,6 +38,7 @@ Files created: s01.e20070602 - Mock Entry 20-5.info.json s01.e20070602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 20070602 genre: ytdl-sub @@ -50,6 +53,7 @@ Files created: s01.e20080601 - Mock Entry 20-4.info.json s01.e20080601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 20080601 genre: ytdl-sub @@ -66,6 +70,7 @@ Files created: s02.e20080701 - Mock Entry 20-3.info.json s02.e20080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 20080701 genre: ytdl-sub @@ -80,6 +85,7 @@ Files created: s02.e20080801 - Mock Entry 20-2.info.json s02.e20080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080801 genre: ytdl-sub @@ -94,6 +100,7 @@ Files created: s02.e20080802 - Mock Entry 20-1.info.json s02.e20080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080802 genre: ytdl-sub @@ -108,6 +115,7 @@ Files created: s02.e21080801 - Mock Entry 21-1.info.json s02.e21080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 21080801 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 1be344d3..892ec95b 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -76,6 +81,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -90,6 +96,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -104,6 +111,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.txt index 7b5c05c5..dab25d12 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: s01.e20060601 - Mock Entry 20-7.info.json s01.e20060601 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 20060601 genre: ytdl-sub @@ -24,6 +25,7 @@ Files created: s01.e20070601 - Mock Entry 20-6.info.json s01.e20070601 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 20070601 genre: ytdl-sub @@ -38,6 +40,7 @@ Files created: s01.e20070602 - Mock Entry 20-5.info.json s01.e20070602 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 20070602 genre: ytdl-sub @@ -52,6 +55,7 @@ Files created: s01.e20080601 - Mock Entry 20-4.info.json s01.e20080601 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 20080601 genre: ytdl-sub @@ -68,6 +72,7 @@ Files created: s02.e20080701 - Mock Entry 20-3.info.json s02.e20080701 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 20080701 genre: ytdl-sub @@ -82,6 +87,7 @@ Files created: s02.e20080801 - Mock Entry 20-2.info.json s02.e20080801 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080801 genre: ytdl-sub @@ -96,6 +102,7 @@ Files created: s02.e20080802 - Mock Entry 20-1.info.json s02.e20080802 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 20080802 genre: ytdl-sub @@ -110,6 +117,7 @@ Files created: s02.e21080801 - Mock Entry 21-1.info.json s02.e21080801 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 21080801 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 1be344d3..892ec95b 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -76,6 +81,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -90,6 +96,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -104,6 +111,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.txt index b274d8db..fdf836ba 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: s01.e79052499 - Mock Entry 21-1.info.json s01.e79052499 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 79052499 genre: ytdl-sub @@ -22,6 +23,7 @@ Files created: s01.e80052498 - Mock Entry 20-1.info.json s01.e80052498 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052498 genre: ytdl-sub @@ -36,6 +38,7 @@ Files created: s01.e80052499 - Mock Entry 20-2.info.json s01.e80052499 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052499 genre: ytdl-sub @@ -50,6 +53,7 @@ Files created: s01.e80052599 - Mock Entry 20-3.info.json s01.e80052599 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80052599 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 521d0fd8..d95d7206 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.txt index 9fae5b60..5d291b73 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: s01.e79052499 - Mock Entry 21-1.info.json s01.e79052499 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 79052499 genre: ytdl-sub @@ -24,6 +25,7 @@ Files created: s01.e80052498 - Mock Entry 20-1.info.json s01.e80052498 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052498 genre: ytdl-sub @@ -38,6 +40,7 @@ Files created: s01.e80052499 - Mock Entry 20-2.info.json s01.e80052499 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052499 genre: ytdl-sub @@ -52,6 +55,7 @@ Files created: s01.e80052599 - Mock Entry 20-3.info.json s01.e80052599 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80052599 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 521d0fd8..d95d7206 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_1/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-3.info.json s01.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s01.e000002 - Mock Entry 20-2.info.json s01.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s01.e000003 - Mock Entry 20-1.info.json s01.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s01.e000004 - Mock Entry 21-1.info.json s01.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.txt index 7ceb3e74..f0ebf5db 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0.txt @@ -8,6 +8,7 @@ Files created: s01.e80052699 - Mock Entry 20-4.info.json s01.e80052699 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 80052699 genre: ytdl-sub @@ -22,6 +23,7 @@ Files created: s01.e80062698 - Mock Entry 20-5.info.json s01.e80062698 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 80062698 genre: ytdl-sub @@ -36,6 +38,7 @@ Files created: s01.e80062699 - Mock Entry 20-6.info.json s01.e80062699 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 80062699 genre: ytdl-sub @@ -50,6 +53,7 @@ Files created: s01.e80072599 - Mock Entry 20-7.info.json s01.e80072599 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 80072599 genre: ytdl-sub @@ -66,6 +70,7 @@ Files created: s02.e79052499 - Mock Entry 21-1.info.json s02.e79052499 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 79052499 genre: ytdl-sub @@ -80,6 +85,7 @@ Files created: s02.e80052498 - Mock Entry 20-1.info.json s02.e80052498 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052498 genre: ytdl-sub @@ -94,6 +100,7 @@ Files created: s02.e80052499 - Mock Entry 20-2.info.json s02.e80052499 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052499 genre: ytdl-sub @@ -108,6 +115,7 @@ Files created: s02.e80052599 - Mock Entry 20-3.info.json s02.e80052599 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80052599 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 93cf0e6d..dab43664 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_0_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -76,6 +81,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -90,6 +96,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -104,6 +111,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.txt index 9a17b46d..d12e74ba 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1.txt @@ -10,6 +10,7 @@ Files created: s01.e80052699 - Mock Entry 20-4.info.json s01.e80052699 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 80052699 genre: ytdl-sub @@ -24,6 +25,7 @@ Files created: s01.e80062698 - Mock Entry 20-5.info.json s01.e80062698 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 80062698 genre: ytdl-sub @@ -38,6 +40,7 @@ Files created: s01.e80062699 - Mock Entry 20-6.info.json s01.e80062699 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 80062699 genre: ytdl-sub @@ -52,6 +55,7 @@ Files created: s01.e80072599 - Mock Entry 20-7.info.json s01.e80072599 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 80072599 genre: ytdl-sub @@ -68,6 +72,7 @@ Files created: s02.e79052499 - Mock Entry 21-1.info.json s02.e79052499 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 79052499 genre: ytdl-sub @@ -82,6 +87,7 @@ Files created: s02.e80052498 - Mock Entry 20-1.info.json s02.e80052498 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052498 genre: ytdl-sub @@ -96,6 +102,7 @@ Files created: s02.e80052499 - Mock Entry 20-2.info.json s02.e80052499 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 80052499 genre: ytdl-sub @@ -110,6 +117,7 @@ Files created: s02.e80052599 - Mock Entry 20-3.info.json s02.e80052599 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 80052599 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt index 93cf0e6d..dab43664 100644 --- a/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt +++ b/tests/resources/transaction_log_summaries/unit/plex_tv_show_collection/season_by_collection__episode_by_year_month_day_reversed/s_2/is_yt_1_reformatted_to_season_by_collection__episode_by_playlist_index_reversed.txt @@ -5,6 +5,7 @@ Files created: s01.e000001 - Mock Entry 20-7.info.json s01.e000001 - Mock Entry 20-7.mp4 Video Tags: + contentRating: TV-14 date: 2020-06-06 episode_id: 1 genre: ytdl-sub @@ -19,6 +20,7 @@ Files created: s01.e000002 - Mock Entry 20-6.info.json s01.e000002 - Mock Entry 20-6.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 2 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: s01.e000003 - Mock Entry 20-5.info.json s01.e000003 - Mock Entry 20-5.mp4 Video Tags: + contentRating: TV-14 date: 2020-07-06 episode_id: 3 genre: ytdl-sub @@ -47,6 +50,7 @@ Files created: s01.e000004 - Mock Entry 20-4.info.json s01.e000004 - Mock Entry 20-4.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-06 episode_id: 4 genre: ytdl-sub @@ -62,6 +66,7 @@ Files created: s02.e000001 - Mock Entry 20-3.info.json s02.e000001 - Mock Entry 20-3.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-07 episode_id: 1 genre: ytdl-sub @@ -76,6 +81,7 @@ Files created: s02.e000002 - Mock Entry 20-2.info.json s02.e000002 - Mock Entry 20-2.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 2 genre: ytdl-sub @@ -90,6 +96,7 @@ Files created: s02.e000003 - Mock Entry 20-1.info.json s02.e000003 - Mock Entry 20-1.mp4 Video Tags: + contentRating: TV-14 date: 2020-08-08 episode_id: 3 genre: ytdl-sub @@ -104,6 +111,7 @@ Files created: s02.e000004 - Mock Entry 21-1.info.json s02.e000004 - Mock Entry 21-1.mp4 Video Tags: + contentRating: TV-14 date: 2021-08-08 episode_id: 4 genre: ytdl-sub diff --git a/tests/resources/transaction_log_summaries/youtube/test_channel_full.txt b/tests/resources/transaction_log_summaries/youtube/test_channel_full.txt index b01f95c3..04baa854 100644 --- a/tests/resources/transaction_log_summaries/youtube/test_channel_full.txt +++ b/tests/resources/transaction_log_summaries/youtube/test_channel_full.txt @@ -8,6 +8,7 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 source_uploader: Project Zombie title: Project / Zombie {output_directory}/Season 2010 @@ -15,6 +16,7 @@ Files created: s2010.e081301 - Oblivion Mod "Falcor" p.1.info.json s2010.e081301 - Oblivion Mod "Falcor" p.1.mp4 Video Tags: + contentRating: TV-14 date: 2010-08-13 episode_id: 81301 genre: ytdl-sub @@ -36,6 +38,7 @@ Files created: aired: 2010-08-13 episode: 81301 genre: ytdl-sub + mpaa: TV-14 playlist_count: 13 playlist_index: 13 plot: @@ -54,6 +57,7 @@ Files created: s2010.e120201 - Oblivion Mod "Falcor" p.2.info.json s2010.e120201 - Oblivion Mod "Falcor" p.2.mp4 Video Tags: + contentRating: TV-14 date: 2010-12-02 episode_id: 120201 genre: ytdl-sub @@ -75,6 +79,7 @@ Files created: aired: 2010-12-02 episode: 120201 genre: ytdl-sub + mpaa: TV-14 playlist_count: 13 playlist_index: 12 plot: @@ -94,6 +99,7 @@ Files created: s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].info.json s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].mp4 Video Tags: + contentRating: TV-14 date: 2011-02-01 episode_id: 20101 genre: ytdl-sub @@ -116,6 +122,7 @@ Files created: aired: 2011-02-01 episode: 20101 genre: ytdl-sub + mpaa: TV-14 playlist_count: 13 playlist_index: 11 plot: @@ -135,6 +142,7 @@ Files created: s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].info.json s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].mp4 Video Tags: + contentRating: TV-14 date: 2011-02-27 episode_id: 22701 genre: ytdl-sub @@ -176,6 +184,7 @@ Files created: aired: 2011-02-27 episode: 22701 genre: ytdl-sub + mpaa: TV-14 playlist_count: 13 playlist_index: 10 plot: @@ -214,6 +223,7 @@ Files created: s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].info.json s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4 Video Tags: + contentRating: TV-14 date: 2011-03-21 episode_id: 32101 genre: ytdl-sub @@ -255,6 +265,7 @@ Files created: aired: 2011-03-21 episode: 32101 genre: ytdl-sub + mpaa: TV-14 playlist_count: 13 playlist_index: 9 plot: @@ -293,6 +304,7 @@ Files created: s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).info.json s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).mp4 Video Tags: + contentRating: TV-14 date: 2011-05-29 episode_id: 52901 genre: ytdl-sub @@ -324,6 +336,7 @@ Files created: aired: 2011-05-29 episode: 52901 genre: ytdl-sub + mpaa: TV-14 playlist_count: 13 playlist_index: 8 plot: @@ -352,6 +365,7 @@ Files created: s2011.e063001 - Project Zombie |Fin|.info.json s2011.e063001 - Project Zombie |Fin|.mp4 Video Tags: + contentRating: TV-14 date: 2011-06-30 episode_id: 63001 genre: ytdl-sub @@ -369,6 +383,7 @@ Files created: aired: 2011-06-30 episode: 63001 genre: ytdl-sub + mpaa: TV-14 playlist_count: 13 playlist_index: 7 plot: @@ -383,6 +398,7 @@ Files created: s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].info.json s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].mp4 Video Tags: + contentRating: TV-14 date: 2011-11-21 episode_id: 112101 genre: ytdl-sub @@ -407,6 +423,7 @@ Files created: aired: 2011-11-21 episode: 112101 genre: ytdl-sub + mpaa: TV-14 playlist_count: 13 playlist_index: 6 plot: @@ -429,6 +446,7 @@ Files created: s2012.e012301 - Project Zombie |Map Trailer|.info.json s2012.e012301 - Project Zombie |Map Trailer|.mp4 Video Tags: + contentRating: TV-14 date: 2012-01-23 episode_id: 12301 genre: ytdl-sub @@ -453,6 +471,7 @@ Files created: aired: 2012-01-23 episode: 12301 genre: ytdl-sub + mpaa: TV-14 playlist_count: 13 playlist_index: 4 plot: @@ -475,6 +494,7 @@ Files created: s2013.e071901 - Project Zombie Rewind |Trailer|.info.json s2013.e071901 - Project Zombie Rewind |Trailer|.mp4 Video Tags: + contentRating: TV-14 date: 2013-07-19 episode_id: 71901 genre: ytdl-sub @@ -494,6 +514,7 @@ Files created: aired: 2013-07-19 episode: 71901 genre: ytdl-sub + mpaa: TV-14 playlist_count: 13 playlist_index: 3 plot: @@ -511,6 +532,7 @@ Files created: s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.mp4 Video Tags: + contentRating: TV-14 date: 2018-10-29 episode_id: 102901 genre: ytdl-sub @@ -535,6 +557,7 @@ Files created: aired: 2018-10-29 episode: 102901 genre: ytdl-sub + mpaa: TV-14 playlist_count: 13 playlist_index: 2 plot: @@ -557,6 +580,7 @@ Files created: s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4 Video Tags: + contentRating: TV-14 date: 2018-11-02 episode_id: 110201 genre: ytdl-sub @@ -584,6 +608,7 @@ Files created: aired: 2018-11-02 episode: 110201 genre: ytdl-sub + mpaa: TV-14 playlist_count: 13 playlist_index: 1 plot: diff --git a/tests/resources/transaction_log_summaries/youtube/test_playlist.txt b/tests/resources/transaction_log_summaries/youtube/test_playlist.txt index 705f1828..3213a124 100644 --- a/tests/resources/transaction_log_summaries/youtube/test_playlist.txt +++ b/tests/resources/transaction_log_summaries/youtube/test_playlist.txt @@ -7,6 +7,7 @@ Files created: NFO tags: test: genre: ytdl-sub + mpaa: TV-14 namedseason: attributes: number: 1 @@ -20,6 +21,7 @@ Files created: s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1].info.json s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1].mp4 Video Tags: + contentRating: TV-14 date: 2011-02-01 episode_id: 11020101 genre: ytdl-sub @@ -42,6 +44,7 @@ Files created: aired: 2011-02-01 episode: 11020101 genre: ytdl-sub + mpaa: TV-14 playlist_count: 3 playlist_index: 3 plot: @@ -61,6 +64,7 @@ Files created: s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27].info.json s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27].mp4 Video Tags: + contentRating: TV-14 date: 2011-02-27 episode_id: 11022701 genre: ytdl-sub @@ -102,6 +106,7 @@ Files created: aired: 2011-02-27 episode: 11022701 genre: ytdl-sub + mpaa: TV-14 playlist_count: 3 playlist_index: 2 plot: @@ -140,6 +145,7 @@ Files created: s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].info.json s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4 Video Tags: + contentRating: TV-14 date: 2011-03-21 episode_id: 11032101 genre: ytdl-sub @@ -181,6 +187,7 @@ Files created: aired: 2011-03-21 episode: 11032101 genre: ytdl-sub + mpaa: TV-14 playlist_count: 3 playlist_index: 1 plot: diff --git a/tests/resources/transaction_log_summaries/youtube/test_video_nulled_values.txt b/tests/resources/transaction_log_summaries/youtube/test_video_nulled_values.txt index 8b995cda..87c57ad5 100644 --- a/tests/resources/transaction_log_summaries/youtube/test_video_nulled_values.txt +++ b/tests/resources/transaction_log_summaries/youtube/test_video_nulled_values.txt @@ -8,10 +8,12 @@ Files created: NFO tags: tvshow: genre: ytdl-sub + mpaa: TV-14 title: Project Zombie {output_directory}/Season 2010 s2010.e000001 - Oblivion Mod "Falcor" p.1.mp4 Video Tags: + contentRating: TV-14 date: 2010-08-13 episode_id: 1 genre: ytdl-sub @@ -33,6 +35,7 @@ Files created: aired: 2010-08-13 episode: 1 genre: ytdl-sub + mpaa: TV-14 plot: https://www.youtube.com/watch?v=HKTNxEqsN3Q @@ -49,6 +52,7 @@ Files created: year: 2010 s2010.e000002 - Oblivion Mod "Falcor" p.2.mp4 Video Tags: + contentRating: TV-14 date: 2010-12-02 episode_id: 2 genre: ytdl-sub @@ -70,6 +74,7 @@ Files created: aired: 2010-12-02 episode: 2 genre: ytdl-sub + mpaa: TV-14 plot: https://www.youtube.com/watch?v=IV9Z4wcA-z8 From a993beff0ebc5ed132e95a26d05ed25d1efec75d Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Sat, 17 Jun 2023 13:02:35 -0700 Subject: [PATCH 13/42] [FEATURE] Ability to use overrides in regex plugin (#631) * [FEATURE] Ability to use overrides in regex plugin * lint * more tests * more docs * docs --- docs/config.rst | 2 +- src/ytdl_sub/plugins/regex.py | 110 ++++++++++++------ tests/e2e/plugins/test_music_tags.py | 2 - tests/e2e/plugins/test_regex.py | 53 ++++++++- tests/e2e/plugins/test_split_by_chapters.py | 5 +- .../plugins/test_regex_overrides.txt | 15 +++ 6 files changed, 147 insertions(+), 40 deletions(-) create mode 100644 tests/resources/transaction_log_summaries/plugins/test_regex_overrides.txt diff --git a/docs/config.rst b/docs/config.rst index 56438f4d..225034a3 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -213,7 +213,7 @@ regex .. autoclass:: ytdl_sub.plugins.regex.RegexOptions() :members: skip_if_match_fails -.. autoclass:: ytdl_sub.plugins.regex.SourceVariableRegex() +.. autoclass:: ytdl_sub.plugins.regex.VariableRegex() :members: match, capture_group_names, capture_group_defaults, exclude :member-order: bysource :exclude-members: partial_validate diff --git a/src/ytdl_sub/plugins/regex.py b/src/ytdl_sub/plugins/regex.py index 1e7a5b03..39485c10 100644 --- a/src/ytdl_sub/plugins/regex.py +++ b/src/ytdl_sub/plugins/regex.py @@ -11,6 +11,7 @@ from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.plugins.plugin import PluginPriority from ytdl_sub.utils.exceptions import RegexNoMatchException +from ytdl_sub.utils.exceptions import StringFormattingVariableNotFoundException from ytdl_sub.utils.logger import Logger from ytdl_sub.validators.regex_validator import RegexListValidator from ytdl_sub.validators.source_variable_validator import SourceVariableNameListValidator @@ -22,7 +23,7 @@ from ytdl_sub.validators.validators import BoolValidator logger = Logger.get(name="regex") -class SourceVariableRegex(StrictDictValidator): +class VariableRegex(StrictDictValidator): _optional_keys = {"match", "exclude", "capture_group_defaults", "capture_group_names"} @@ -65,7 +66,7 @@ class SourceVariableRegex(StrictDictValidator): @property def match(self) -> Optional[RegexListValidator]: """ - List of regex strings to try to match against a source variable. Each regex + List of regex strings to try to match against a source or override variable. Each regex string must have the same number of capture groups. """ return self._match @@ -73,9 +74,10 @@ class SourceVariableRegex(StrictDictValidator): @property def exclude(self) -> Optional[RegexListValidator]: """ - List of regex strings to try to match against a source variable. If one of the regex strings - match, then the entry will be skipped. If both ``exclude`` and ``match`` are specified, - entries will get skipped if the regex matches against both ``exclude`` and ``match``. + List of regex strings to try to match against a source or override variable. If one of the + regex strings match, then the entry will be skipped. If both ``exclude`` and ``match`` are + specified, entries will get skipped if the regex matches against both ``exclude`` and + ``match``. """ return self._exclude @@ -114,19 +116,25 @@ class FromSourceVariablesRegex(StrictDictValidator): def __init__(self, name, value): super().__init__(name, value) - self.source_variable_capture_dict: Dict[str, SourceVariableRegex] = { - key: self._validate_key(key=key, validator=SourceVariableRegex) for key in self._keys + self.variable_capture_dict: Dict[str, VariableRegex] = { + key: self._validate_key(key=key, validator=VariableRegex) for key in self._keys } class RegexOptions(PluginOptions): r""" - Performs regex matching on an entry's source variables. Regex can be used to filter entries - from proceeding with download or capture groups to create new source variables. NOTE to + Performs regex matching on an entry's source or override variables. Regex can be used to filter + entries from proceeding with download or capture groups to create new source variables. NOTE to use backslashes anywhere in your regex, i.e. ``\d``, you must add another backslash escape. This means ``\d`` should be written as ``\\d``. This is because YAML requires an escape for any backslash usage. + If you want to regex-search multiple source variables to create a logical OR effect, you can + create an override variable that contains the concatenation of them, and search that with regex. + For example, creating the override variable ``"title_and_description": "{title} {description}"`` + and using ``title_and_description`` can regex match/exclude from either ``title`` or + ``description``. + Usage: .. code-block:: yaml @@ -216,9 +224,9 @@ class RegexOptions(PluginOptions): """ for key, regex_options in self.source_variable_capture_dict.items(): # Ensure each variable getting captured is a source variable - if key not in source_variables: + if key not in source_variables and key not in override_variables: raise self._validation_exception( - f"cannot regex capture '{key}' because it is not a source variable" + f"cannot regex capture '{key}' because it is not a source or override variable" ) # Ensure the capture group names are not existing source/override variables @@ -235,13 +243,13 @@ class RegexOptions(PluginOptions): ) @property - def source_variable_capture_dict(self) -> Dict[str, SourceVariableRegex]: + def source_variable_capture_dict(self) -> Dict[str, VariableRegex]: """ Returns ------- Dict of { source variable: capture options } """ - return self._from.source_variable_capture_dict + return self._from.variable_capture_dict def added_source_variables(self) -> List[str]: """ @@ -267,28 +275,56 @@ class RegexPlugin(Plugin[RegexOptions]): ) @classmethod - def _add_processed_regex_source_var(cls, entry: Entry, source_var: str) -> None: + def _add_processed_regex_variable_name(cls, entry: Entry, source_var: str) -> None: if not entry.kwargs_contains(YTDL_SUB_REGEX_SOURCE_VARS): entry.add_kwargs({YTDL_SUB_REGEX_SOURCE_VARS: []}) entry.kwargs(YTDL_SUB_REGEX_SOURCE_VARS).append(source_var) @classmethod - def _contains_processed_regex_source_var(cls, entry: Entry, source_var: str) -> bool: - return source_var in entry.kwargs_get(YTDL_SUB_REGEX_SOURCE_VARS, []) + def _contains_processed_regex_variable(cls, entry: Entry, variable_name: str) -> bool: + return variable_name in entry.kwargs_get(YTDL_SUB_REGEX_SOURCE_VARS, []) - def _try_skip_entry(self, entry: Entry, source_var: str) -> None: + def _try_skip_entry(self, entry: Entry, variable_name: str) -> None: # Skip the entry if toggled if self.plugin_options.skip_if_match_fails: logger.info( "Regex failed to match '%s' from '%s', skipping.", - source_var, + variable_name, entry.title, ) return None # Otherwise, error - raise RegexNoMatchException(f"Regex failed to match '{source_var}' from '{entry.title}'") + raise RegexNoMatchException(f"Regex failed to match '{variable_name}' from '{entry.title}'") + + def _can_process_at_metadata_stage(self, entry: Entry, variable_name: str) -> bool: + # If the variable is an override... + if variable_name in self.overrides.dict: + # Try to see if it can resolve + try: + self.overrides.apply_formatter( + formatter=self.overrides.dict[variable_name], + entry=entry, + ) + # If it can not from missing variables (from post-metadata stage), return False + except StringFormattingVariableNotFoundException: + return False + # If it is a source variable and not present, return false + elif variable_name not in entry.to_dict(): + return False + + return True + + def _get_regex_input_string(self, entry: Entry, variable_name: str) -> str: + # Apply override formatter if it's an override + if variable_name in self.overrides.dict: + return self.overrides.apply_formatter( + formatter=self.overrides.dict[variable_name], + entry=entry, + ) + # Otherwise pluck from the entry's source variable + return entry.to_dict()[variable_name] def _modify_entry_metadata(self, entry: Entry, is_metadata_stage: bool) -> Optional[Entry]: """ @@ -308,46 +344,50 @@ class RegexPlugin(Plugin[RegexOptions]): ValidationException If no capture and no defaults """ - entry_variable_dict = entry.to_dict() - # Iterate each source var to capture and add to the entry - for source_var, regex_options in self.plugin_options.source_variable_capture_dict.items(): + for ( + variable_name, + regex_options, + ) in self.plugin_options.source_variable_capture_dict.items(): # Record which regex source variables are processed, to # process as many variables as possible in the metadata stage, then the rest # after the media file has been downloaded. - if self._contains_processed_regex_source_var(entry, source_var): + if self._contains_processed_regex_variable(entry, variable_name): continue - # Continue if the source var isn't in the dict since entry variables could be added - # after the metadata stage - if is_metadata_stage and source_var not in entry_variable_dict: + # If it's the metadata stage, and it can't be processed, skip until post-metadata + if is_metadata_stage and not self._can_process_at_metadata_stage( + entry=entry, variable_name=variable_name + ): continue - self._add_processed_regex_source_var(entry, source_var) + self._add_processed_regex_variable_name(entry, variable_name) + + regex_input_str = self._get_regex_input_string( + entry=entry, + variable_name=variable_name, + ) if ( regex_options.exclude is not None - and regex_options.exclude.match_any(input_str=entry_variable_dict[source_var]) - is not None + and regex_options.exclude.match_any(input_str=regex_input_str) is not None ): - return self._try_skip_entry(entry=entry, source_var=source_var) + return self._try_skip_entry(entry=entry, variable_name=variable_name) # If match is present if regex_options.match is not None: - maybe_capture = regex_options.match.match_any( - input_str=entry_variable_dict[source_var] - ) + maybe_capture = regex_options.match.match_any(input_str=regex_input_str) # And nothing matched if maybe_capture is None: # and no defaults if not regex_options.has_defaults: - return self._try_skip_entry(entry=entry, source_var=source_var) + return self._try_skip_entry(entry=entry, variable_name=variable_name) # otherwise, use defaults (apply them using the original entry source dict) source_variables_and_overrides_dict = dict( - entry_variable_dict, **self.overrides.dict_with_format_strings + entry.to_dict(), **self.overrides.dict_with_format_strings ) # add both the default... diff --git a/tests/e2e/plugins/test_music_tags.py b/tests/e2e/plugins/test_music_tags.py index c6cecf21..5538357b 100644 --- a/tests/e2e/plugins/test_music_tags.py +++ b/tests/e2e/plugins/test_music_tags.py @@ -1,8 +1,6 @@ import re import pytest -from expected_download import assert_expected_downloads -from expected_transaction_log import assert_transaction_log_matches from ytdl_sub.subscriptions.subscription import Subscription from ytdl_sub.utils.exceptions import ValidationException diff --git a/tests/e2e/plugins/test_regex.py b/tests/e2e/plugins/test_regex.py index fc4bd6b4..32e899eb 100644 --- a/tests/e2e/plugins/test_regex.py +++ b/tests/e2e/plugins/test_regex.py @@ -146,6 +146,33 @@ def regex_subscription_dict_match_and_exclude(regex_subscription_dict_base, outp ) +@pytest.fixture +def regex_subscription_dict_match_and_exclude_override_variable( + regex_subscription_dict_base, output_directory +): + return mergedeep.merge( + regex_subscription_dict_base, + { + "regex": { + # tests that skip_if_match_fails defaults to True + "from": { + "override_title": { + "exclude": [ + "should not cap", + ".*Feb.*", # should filter out march video + ], + }, + "override_description": { + "match": [".*http:\\/\\/(.+).com.*"], + "capture_group_names": ["override_description_website"], + }, + }, + }, + "overrides": {"override_title": "{title}", "override_description": "{description}"}, + }, + ) + + @pytest.fixture def playlist_subscription(music_video_config, regex_subscription_dict): return Subscription.from_dict( @@ -179,6 +206,18 @@ def playlist_subscription_exclude( ) +@pytest.fixture +def playlist_subscription_overrides( + music_video_config: ConfigFile, + regex_subscription_dict_match_and_exclude_override_variable: Dict[str, Any], +) -> Subscription: + return Subscription.from_dict( + config=music_video_config, + preset_name="regex_using_overrides_test", + preset_dict=regex_subscription_dict_match_and_exclude_override_variable, + ) + + @pytest.fixture def playlist_subscription_match_and_exclude( music_video_config: ConfigFile, regex_subscription_dict_match_and_exclude: Dict[str, Any] @@ -221,6 +260,16 @@ class TestRegex: regenerate_transaction_log=True, ) + def test_regex_using_overrides_success(self, playlist_subscription_overrides, output_directory): + # Should only contain the march video + transaction_log = playlist_subscription_overrides.download(dry_run=True) + assert_transaction_log_matches( + output_directory=output_directory, + transaction_log=transaction_log, + transaction_log_summary_file_name="plugins/test_regex_overrides.txt", + regenerate_transaction_log=True, + ) + def test_regex_fails_no_match(self, playlist_subscription_no_match_fails, output_directory): with pytest.raises( RegexNoMatchException, @@ -300,7 +349,9 @@ class TestRegex: ) with pytest.raises( ValidationException, - match=re.escape("cannot regex capture 'dne' because it is not a source variable"), + match=re.escape( + "cannot regex capture 'dne' because it is not a source or override variable" + ), ): _ = Subscription.from_dict( config=music_video_config, diff --git a/tests/e2e/plugins/test_split_by_chapters.py b/tests/e2e/plugins/test_split_by_chapters.py index 4151ab71..f3e02e79 100644 --- a/tests/e2e/plugins/test_split_by_chapters.py +++ b/tests/e2e/plugins/test_split_by_chapters.py @@ -32,7 +32,9 @@ def yt_album_as_chapters_with_regex_preset_dict(yt_album_as_chapters_preset_dict { "regex": { "from": { - "chapter_title": { + # Ensure regex can handle override variables that come from the + # post-metadata stage + "override_chapter_title": { "match": r"\d+\. (.+)", "capture_group_names": "captured_track_title", "capture_group_defaults": "{chapter_title}", @@ -54,6 +56,7 @@ def yt_album_as_chapters_with_regex_preset_dict(yt_album_as_chapters_preset_dict } }, "overrides": { + "override_chapter_title": "{chapter_title}", "track_title": "{captured_track_title}", "track_album": "{captured_track_album}", "track_artist": "{captured_track_artist}", diff --git a/tests/resources/transaction_log_summaries/plugins/test_regex_overrides.txt b/tests/resources/transaction_log_summaries/plugins/test_regex_overrides.txt new file mode 100644 index 00000000..663087d2 --- /dev/null +++ b/tests/resources/transaction_log_summaries/plugins/test_regex_overrides.txt @@ -0,0 +1,15 @@ +Files created: +---------------------------------------- +{output_directory} + .ytdl-sub-regex_using_overrides_test-download-archive.json +{output_directory}/Project Zombie + Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21]-thumb.jpg + Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].info.json + Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].mp4 + Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].nfo + NFO tags: + musicvideo: + album: Music Videos + artist: Project Zombie + title: Jesse's Minecraft Server [Trailer - Mar.21] + year: 2011 \ No newline at end of file From acc7bb306bdbb206ec3f48eea8e8428bced60065 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Sat, 17 Jun 2023 13:32:12 -0700 Subject: [PATCH 14/42] [DOCS] Clean up match-filter plugin docs (#633) --- src/ytdl_sub/plugins/match_filters.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/ytdl_sub/plugins/match_filters.py b/src/ytdl_sub/plugins/match_filters.py index 27e9dce6..ef7f2a47 100644 --- a/src/ytdl_sub/plugins/match_filters.py +++ b/src/ytdl_sub/plugins/match_filters.py @@ -38,8 +38,12 @@ class MatchFiltersOptions(PluginOptions): my_example_preset: match_filters: filters: - - "original_url!*=/shorts/" - - "!is_live" + - "age_limit?100" + # Other common match-filters + # - "original_url!*=/shorts/ & !is_live" + # - "age_limit List[str]: """ The filters themselves. If used multiple times, the filter matches if at least one of the - conditions are met. + conditions are met. For logical AND's between match filters, use the ``&`` operator in + a single match filter. """ return [validator.value for validator in self._filters] From 0f39b38dc3dc40f37b592fcfea4716e6f3266458 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Sat, 17 Jun 2023 13:42:36 -0700 Subject: [PATCH 15/42] [DOCS] Actionable message for file lock errors (#634) * [DOCS] Actionable message for file lock errors" * pylint --- src/ytdl_sub/utils/file_lock.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ytdl_sub/utils/file_lock.py b/src/ytdl_sub/utils/file_lock.py index 2e21acfe..e78209dc 100644 --- a/src/ytdl_sub/utils/file_lock.py +++ b/src/ytdl_sub/utils/file_lock.py @@ -44,7 +44,19 @@ else: / str(working_directory_path).replace("/", "_") ) - lock_file = open(lock_file_path, "w", encoding="utf-8") + try: + lock_file = open(lock_file_path, "w", encoding="utf-8") + except FileNotFoundError as exc: + # pylint: disable=line-too-long + raise ValidationException( + "Failed to create a file-lock to prevent multiple instances of ytdl-sub from " + "colliding with each other. If you get this error, it typically means it tried to " + "create the file in a directory that is not a part of the same filesystem that " + "ytdl-sub is running on. See " + "https://ytdl-sub.readthedocs.io/en/latest/config.html#ytdl_sub.config.config_validator.ConfigOptions.lock_directory " + "on how to change the directory that this lock gets written to." + ) from exc + # pylint: enable=line-too-long try: fcntl.lockf(lock_file, fcntl.LOCK_EX | fcntl.LOCK_NB) From 134882a17d538c05c125671074629f82e861672d Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Sat, 17 Jun 2023 13:45:22 -0700 Subject: [PATCH 16/42] [DOCS] Fix url + multi_url docs (#635) --- src/ytdl_sub/downloaders/url/validators.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ytdl_sub/downloaders/url/validators.py b/src/ytdl_sub/downloaders/url/validators.py index 36e1fc36..52e5f367 100644 --- a/src/ytdl_sub/downloaders/url/validators.py +++ b/src/ytdl_sub/downloaders/url/validators.py @@ -75,9 +75,7 @@ class UrlValidator(StrictDictValidator): @property def url(self) -> OverridesStringFormatterValidator: """ - Required. URL to download from, listed in priority from lowest (top) to highest (bottom). - If a download exists in more than one URL, it will resolve to the bottom-most one and - inherit those variables. + Required. URL to download from. """ return self._url @@ -199,6 +197,10 @@ class MultiUrlValidator(OptionsValidator): def urls(self) -> UrlListValidator: """ Required. A list of :ref:`url` with the addition of the ``variables`` attribute. + Multiple URLs should be listed in the order of priority, with the lowest priority being the + top-most, and highest priority being the bottom-most. If a download exists in more than + one URL, it will resolve to the bottom-most one (the highest priority) and + inherit those variables. """ return self._urls From 9c4e834ab77d3e4cf0f4c8ac7224648dbfd2f2ef Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Sat, 17 Jun 2023 13:45:37 -0700 Subject: [PATCH 17/42] [DOCS] Fix url + multi_url docs (#635) From 8ae3c9ed8c67da72d9abc03c82b9f31ed78c4c3c Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Thu, 22 Jun 2023 10:50:07 -0700 Subject: [PATCH 18/42] [BACKEND] Update yt-dlp (#636) --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index 2abb1bce..573259cb 100644 --- a/setup.cfg +++ b/setup.cfg @@ -27,7 +27,7 @@ package_dir = packages=find: install_requires = - yt-dlp==2023.3.4 + yt-dlp==2023.6.22 argparse==1.4.0 colorama==0.4.6, mergedeep==1.3.4 From a8841bf15061f32d669c99edb6ff4656f2cd100a Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Sat, 24 Jun 2023 15:42:29 -0700 Subject: [PATCH 19/42] [BUGFIX] Ignore extra data streams with `-dn` in ffmpeg (#637) --- src/ytdl_sub/utils/ffmpeg.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ytdl_sub/utils/ffmpeg.py b/src/ytdl_sub/utils/ffmpeg.py index 2cb6f6a3..a3aa75b3 100644 --- a/src/ytdl_sub/utils/ffmpeg.py +++ b/src/ytdl_sub/utils/ffmpeg.py @@ -168,6 +168,7 @@ def set_ffmpeg_metadata_chapters( metadata_file.name, "-map", "0", + "-dn", # ignore data streams "-map_chapters", "1", "-bitexact", # for reproducibility @@ -192,7 +193,13 @@ def add_ffmpeg_metadata_key_values(file_path: str, key_values: Dict[str, str]) - """ tmp_file_path = FFMPEG.tmp_file_path(file_path) - ffmpeg_args = ["-i", file_path, "-map", "0"] + ffmpeg_args = [ + "-i", + file_path, + "-map", + "0", + "-dn", # ignore data streams + ] for key, value in key_values.items(): ffmpeg_args.extend(["-metadata", f"{key}={value}"]) ffmpeg_args.extend(["-codec", "copy", tmp_file_path]) From 557854fc83890438f799053b510614e2ee07a41d Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Sat, 24 Jun 2023 23:01:18 -0700 Subject: [PATCH 20/42] [FEATURE] `release_date` source variables (#638) * [FEATURE] `release_date` source variables * lint --- .../entries/variables/entry_variables.py | 187 ++++++++++++++++++ src/ytdl_sub/entries/variables/kwargs.py | 1 + tests/unit/entries/conftest.py | 17 ++ 3 files changed, 205 insertions(+) diff --git a/src/ytdl_sub/entries/variables/entry_variables.py b/src/ytdl_sub/entries/variables/entry_variables.py index 992f9ecd..8405b060 100644 --- a/src/ytdl_sub/entries/variables/entry_variables.py +++ b/src/ytdl_sub/entries/variables/entry_variables.py @@ -21,6 +21,7 @@ from ytdl_sub.entries.variables.kwargs import PLAYLIST_UPLOADER from ytdl_sub.entries.variables.kwargs import PLAYLIST_UPLOADER_ID from ytdl_sub.entries.variables.kwargs import PLAYLIST_UPLOADER_URL from ytdl_sub.entries.variables.kwargs import PLAYLIST_WEBPAGE_URL +from ytdl_sub.entries.variables.kwargs import RELEASE_DATE from ytdl_sub.entries.variables.kwargs import SOURCE_COUNT from ytdl_sub.entries.variables.kwargs import SOURCE_DESCRIPTION from ytdl_sub.entries.variables.kwargs import SOURCE_INDEX @@ -668,3 +669,189 @@ class EntryVariables(BaseEntryVariables): The uploaded date formatted as YYYY-MM-DD """ return f"{self.upload_year}-{self.upload_month_padded}-{self.upload_day_padded}" + + @property + def release_date(self: Self) -> str: + """ + Returns + ------- + str + The entry's release date, in YYYYMMDD format. If not present, return the upload date. + """ + return self.kwargs_get(RELEASE_DATE, self.upload_date) + + @property + def release_year(self: Self) -> int: + """ + Returns + ------- + int + The entry's release year + """ + return int(self.release_date[:4]) + + @property + def release_year_truncated(self: Self) -> int: + """ + Returns + ------- + int + The last two digits of the release year, i.e. 22 in 2022 + """ + return int(str(self.release_year)[-2:]) + + @property + def release_year_truncated_reversed(self: Self) -> int: + """ + Returns + ------- + int + The release year truncated, but reversed using ``100 - {release_year_truncated}``, i.e. + 2022 returns ``100 - 22`` = ``78`` + """ + return 100 - self.release_year_truncated + + @property + def release_month_reversed(self: Self) -> int: + """ + Returns + ------- + int + The release month, but reversed + using ``13 - {release_month}``, i.e. March returns ``10`` + """ + return 13 - self.release_month + + @property + def release_month_reversed_padded(self: Self) -> str: + """ + Returns + ------- + str + The reversed release month, but padded. i.e. November returns "02" + """ + return pad(self.release_month_reversed) + + @property + def release_month_padded(self: Self) -> str: + """ + Returns + ------- + str + The entry's release month padded to two digits, i.e. March returns "03" + """ + return self.release_date[4:6] + + @property + def release_day_padded(self: Self) -> str: + """ + Returns + ------- + str + The entry's release day padded to two digits, i.e. the fifth returns "05" + """ + return self.release_date[6:8] + + @property + def release_month(self: Self) -> int: + """ + Returns + ------- + int + The release month as an integer (no padding). + """ + return int(self.release_month_padded.lstrip("0")) + + @property + def release_day(self: Self) -> int: + """ + Returns + ------- + int + The release day as an integer (no padding). + """ + return int(self.release_day_padded.lstrip("0")) + + @property + def release_day_reversed(self: Self) -> int: + """ + Returns + ------- + int + The release day, but reversed using ``{total_days_in_month} + 1 - {release_day}``, + i.e. August 8th would have release_day_reversed of ``31 + 1 - 8`` = ``24`` + """ + total_days_in_month = _days_in_month[self.release_month] + if self.release_month == 2 and self.release_year % 4 == 0: # leap year + total_days_in_month += 1 + + return total_days_in_month + 1 - self.release_day + + @property + def release_day_reversed_padded(self: Self) -> str: + """ + Returns + ------- + str + The reversed release day, but padded. i.e. August 30th returns "02". + """ + return pad(self.release_day_reversed) + + @property + def release_day_of_year(self: Self) -> int: + """ + Returns + ------- + int + The day of the year, i.e. February 1st returns ``32`` + """ + output = sum(_days_in_month[: self.release_month]) + self.release_day + if self.release_month > 2 and self.release_year % 4 == 0: + output += 1 + + return output + + @property + def release_day_of_year_padded(self: Self) -> str: + """ + Returns + ------- + str + The release day of year, but padded i.e. February 1st returns "032" + """ + return pad(self.release_day_of_year, width=3) + + @property + def release_day_of_year_reversed(self: Self) -> int: + """ + Returns + ------- + int + The release day, but reversed using ``{total_days_in_year} + 1 - {release_day}``, + i.e. February 2nd would have release_day_of_year_reversed of ``365 + 1 - 32`` = ``334`` + """ + total_days_in_year = 365 + if self.release_year % 4 == 0: + total_days_in_year += 1 + + return total_days_in_year + 1 - self.release_day_of_year + + @property + def release_day_of_year_reversed_padded(self: Self) -> str: + """ + Returns + ------- + str + The reversed release day of year, but padded i.e. December 31st returns "001" + """ + return pad(self.release_day_of_year_reversed, width=3) + + @property + def release_date_standardized(self: Self) -> str: + """ + Returns + ------- + str + The release date formatted as YYYY-MM-DD + """ + return f"{self.release_year}-{self.release_month_padded}-{self.release_day_padded}" diff --git a/src/ytdl_sub/entries/variables/kwargs.py b/src/ytdl_sub/entries/variables/kwargs.py index 2adc3535..48cfa019 100644 --- a/src/ytdl_sub/entries/variables/kwargs.py +++ b/src/ytdl_sub/entries/variables/kwargs.py @@ -62,6 +62,7 @@ EXT = _("ext") TITLE = _("title") DESCRIPTION = _("description") WEBPAGE_URL = _("webpage_url") +RELEASE_DATE = _("release_date") UPLOAD_DATE = _("upload_date") UPLOADER = _("uploader") UPLOADER_ID = _("uploader_id") diff --git a/tests/unit/entries/conftest.py b/tests/unit/entries/conftest.py index 278e2420..16199c7d 100644 --- a/tests/unit/entries/conftest.py +++ b/tests/unit/entries/conftest.py @@ -135,6 +135,23 @@ def mock_entry_to_dict( "source_uploader_url": "https://yourname.here", "uid_sanitized_plex": "abc123", "title_sanitized_plex": "entry {title}", + "release_date": upload_date, + "release_date_standardized": "2021-01-12", + "release_year": 2021, + "release_year_truncated": 21, + "release_year_truncated_reversed": 79, + "release_month": 1, + "release_month_padded": "01", + "release_month_reversed": 12, + "release_month_reversed_padded": "12", + "release_day": 12, + "release_day_padded": "12", + "release_day_reversed": 20, + "release_day_reversed_padded": "20", + "release_day_of_year": 12, + "release_day_of_year_padded": "012", + "release_day_of_year_reversed": 354, + "release_day_of_year_reversed_padded": "354", } From 7a43b0a90b6bdda12c3d2a672159e09a1857f780 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Thu, 29 Jun 2023 23:57:54 -0700 Subject: [PATCH 21/42] [FEATURE] Add `__value__` to subscription files to be able to create one-liner subs (#641) * [FEATURE] Add __value__ to subscription files to create one-liner subs * docs --- docs/config.rst | 26 ++++ src/ytdl_sub/subscriptions/subscription.py | 43 +++++- tests/unit/config/test_subscription.py | 149 +++++++++++++++++---- 3 files changed, 186 insertions(+), 32 deletions(-) diff --git a/docs/config.rst b/docs/config.rst index 225034a3..99ce10cc 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -306,6 +306,32 @@ by using the file-wide ``__preset__``: This ``subscription.yaml`` is equivalent to the one above it because all subscriptions automatically set ``__preset__`` as a `parent preset`_. +File Subscription Value +^^^^^^^^^^^^^^^^^^^^^^^ +With a clever config and use of ``__preset__``, your subscriptions can typically boil +down to a name and url. You can set ``__value__`` to the name of an override variable, +and use the override variable ``subscription_name`` to achieve one-liner subscriptions. +Using the example above, we can do: + +.. code-block:: yaml + :caption: subscription.yaml + + __preset__: + preset: "playlist_preset_ex" + overrides: + playlist_name: "{subscription_name}" + + __value__: "url" + + # single-line subscription + "diy-playlist": "https://youtube.com/playlist?list=UCsvn_Po0SmunchJYtttWpOxMg" + +``"diy-playlist"`` gets assigned to the ``playlist_name`` override variable by setting +it with ``subscription_name`` , and the url gets assigned to ``url`` by setting ``__value__`` +to write values to it. + +Traditional subscriptions that can override presets will still work when using ``__value__``. + ------------------------------------------------------------------------------- .. _source-variables: diff --git a/src/ytdl_sub/subscriptions/subscription.py b/src/ytdl_sub/subscriptions/subscription.py index 395958b7..829505f8 100644 --- a/src/ytdl_sub/subscriptions/subscription.py +++ b/src/ytdl_sub/subscriptions/subscription.py @@ -5,10 +5,12 @@ from typing import List from ytdl_sub.config.config_file import ConfigFile from ytdl_sub.config.preset import Preset from ytdl_sub.subscriptions.subscription_download import SubscriptionDownload +from ytdl_sub.utils.exceptions import ValidationException from ytdl_sub.utils.yaml import load_yaml from ytdl_sub.validators.validators import LiteralDictValidator FILE_PRESET_APPLY_KEY = "__preset__" +FILE_SUBSCRIPTION_VALUE_KEY = "__value__" class Subscription(SubscriptionDownload): @@ -64,7 +66,9 @@ class Subscription(SubscriptionDownload): @classmethod def from_file_path(cls, config: ConfigFile, subscription_path: str) -> List["Subscription"]: """ - Loads subscriptions from a file and applies __preset__ to all of them if present. + Loads subscriptions from a file and applies ``__preset__`` to all of them if present. + If a subscription is in the form of key: value, it will set value to the override + variable defined in ``__value__``. Parameters ---------- @@ -76,11 +80,17 @@ class Subscription(SubscriptionDownload): Returns ------- List of subscriptions, for each one in the subscription yaml + + Raises + ------ + ValidationException + If subscription file is misconfigured """ subscriptions: List["Subscription"] = [] subscription_dict = load_yaml(file_path=subscription_path) has_file_preset = FILE_PRESET_APPLY_KEY in subscription_dict + has_file_subscription_value = FILE_SUBSCRIPTION_VALUE_KEY in subscription_dict # If a file preset is present... if has_file_preset: @@ -94,12 +104,39 @@ class Subscription(SubscriptionDownload): config = copy.deepcopy(config) config.presets.dict[FILE_PRESET_APPLY_KEY] = file_preset.dict + if has_file_subscription_value: + if not isinstance(subscription_dict[FILE_SUBSCRIPTION_VALUE_KEY], str): + raise ValidationException( + f"Using {FILE_SUBSCRIPTION_VALUE_KEY} in a subscription" + f"must be a string that corresponds to an override variable" + ) + for subscription_key, subscription_object in subscription_dict.items(): - # Skip file preset - if subscription_key == FILE_PRESET_APPLY_KEY: + # Skip file preset or value + if subscription_key in [FILE_PRESET_APPLY_KEY, FILE_SUBSCRIPTION_VALUE_KEY]: continue + # If the subscription obj is just a string, set it to the override variable + # defined in FILE_SUBSCRIPTION_VALUE_KEY + if isinstance(subscription_object, str) and has_file_subscription_value: + subscription_object = { + "overrides": { + subscription_dict[FILE_SUBSCRIPTION_VALUE_KEY]: subscription_object + } + } + elif isinstance(subscription_object, dict): + pass + elif isinstance(subscription_object, str) and not has_file_subscription_value: + raise ValidationException( + f"Subscription {subscription_key} is a string, but " + f"{FILE_SUBSCRIPTION_VALUE_KEY} is not set to an override variable" + ) + else: + raise ValidationException( + f"Subscription {subscription_key} should be in the form of a preset" + ) + # If it has file_preset, inject it as a parent preset if has_file_preset: parent_preset = subscription_object.get("preset", []) diff --git a/tests/unit/config/test_subscription.py b/tests/unit/config/test_subscription.py index 512a34d0..fd9e706c 100644 --- a/tests/unit/config/test_subscription.py +++ b/tests/unit/config/test_subscription.py @@ -1,3 +1,4 @@ +import re from typing import Dict from unittest.mock import patch @@ -5,44 +6,134 @@ import pytest from ytdl_sub.config.config_file import ConfigFile from ytdl_sub.plugins.nfo_tags import NfoTagsOptions +from ytdl_sub.subscriptions.subscription import FILE_SUBSCRIPTION_VALUE_KEY from ytdl_sub.subscriptions.subscription import Subscription +from ytdl_sub.utils.exceptions import ValidationException @pytest.fixture -def preset_file(youtube_video: Dict, output_options: Dict) -> Dict: - return { - "__preset__": { - "download": youtube_video, - "output_options": output_options, - "nfo_tags": { - "tags": {"key-3": "file_preset"}, +def preset_file(youtube_video: Dict, output_options: Dict): + with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml: + mock_load_yaml.return_value = { + "__preset__": { + "download": youtube_video, + "output_options": output_options, + "nfo_tags": { + "tags": {"key-3": "file_preset"}, + }, + "overrides": {"test_override": "original"}, }, - }, - "test_preset": { - "preset": "parent_preset_3", - "nfo_tags": { - "tags": {"key-4": "test_preset"}, + "__value__": "test_override", + "test_preset": { + "preset": "parent_preset_3", + "nfo_tags": { + "tags": {"key-4": "test_preset"}, + }, }, - }, + } + yield + + +@pytest.fixture +def preset_file_with_value(youtube_video: Dict, output_options: Dict): + with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml: + mock_load_yaml.return_value = { + "__preset__": { + "preset": "parent_preset_3", + "download": youtube_video, + "output_options": output_options, + "nfo_tags": { + "tags": {"key-3": "file_preset"}, + }, + "overrides": {"test_override": "original"}, + }, + "__value__": "test_override", + "test_value": "is_overwritten", + } + yield + + +@pytest.fixture +def preset_file_invalid_value(): + with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml: + mock_load_yaml.return_value = { + "__value__": {"should be": "string"}, + } + yield + + +@pytest.fixture +def preset_file_subscription_using_value_when_not_defined(): + with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml: + mock_load_yaml.return_value = {"sub_name": "single value, __value__ not defined"} + yield + + +@pytest.fixture +def preset_file_subscription_with_invalid_form(): + with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml: + mock_load_yaml.return_value = {"sub_name": 4332} + yield + + +@pytest.mark.usefixtures(preset_file.__name__) +def test_subscription_file_preset_applies(config_file: ConfigFile): + subs = Subscription.from_file_path(config=config_file, subscription_path="mocked") + assert len(subs) == 1 + + # Test __preset__ worked correctly + preset_sub = subs[0] + nfo_options: NfoTagsOptions = preset_sub.plugins.get(NfoTagsOptions) + tags_string_dict = { + key: formatter[0].format_string for key, formatter in nfo_options.tags.string_tags.items() + } + + assert tags_string_dict == { + "key-1": "preset_0", + "key-2": "preset_2", + "key-3": "file_preset", + "key-4": "test_preset", } -def test_subscription_file_preset_applies(config_file: ConfigFile, preset_file: Dict): - with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml: - mock_load_yaml.return_value = preset_file +@pytest.mark.usefixtures(preset_file_with_value.__name__) +def test_subscription_file_value_applies(config_file: ConfigFile): + subs = Subscription.from_file_path(config=config_file, subscription_path="mocked") + assert len(subs) == 1 - subs = Subscription.from_file_path(config=config_file, subscription_path="mocked") - assert len(subs) == 1 + # Test __value__ worked correctly + value_sub = subs[0] + assert value_sub.overrides.dict_with_format_strings.get("test_override") == "is_overwritten" - nfo_options: NfoTagsOptions = subs[0].plugins.get(NfoTagsOptions) - tags_string_dict = { - key: formatter[0].format_string - for key, formatter in nfo_options.tags.string_tags.items() - } - assert tags_string_dict == { - "key-1": "preset_0", - "key-2": "preset_2", - "key-3": "file_preset", - "key-4": "test_preset", - } +@pytest.mark.usefixtures(preset_file_invalid_value.__name__) +def test_subscription_file_bad_value(config_file: ConfigFile): + with pytest.raises( + ValidationException, + match=re.escape( + f"Using {FILE_SUBSCRIPTION_VALUE_KEY} in a subscription" + f"must be a string that corresponds to an override variable" + ), + ): + _ = Subscription.from_file_path(config=config_file, subscription_path="mocked") + + +@pytest.mark.usefixtures(preset_file_subscription_using_value_when_not_defined.__name__) +def test_subscription_file_using_value_when_not_defined(config_file: ConfigFile): + with pytest.raises( + ValidationException, + match=re.escape( + f"Subscription sub_name is a string, but " + f"{FILE_SUBSCRIPTION_VALUE_KEY} is not set to an override variable" + ), + ): + _ = Subscription.from_file_path(config=config_file, subscription_path="mocked") + + +@pytest.mark.usefixtures(preset_file_subscription_with_invalid_form.__name__) +def test_subscription_file_invalid_form(config_file: ConfigFile): + with pytest.raises( + ValidationException, + match=re.escape(f"Subscription sub_name should be in the form of a preset"), + ): + _ = Subscription.from_file_path(config=config_file, subscription_path="mocked") From b8d1f1edbb7a95e22176ad695ab1809c4699434a Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Fri, 30 Jun 2023 11:51:52 -0700 Subject: [PATCH 22/42] [FEATURE] Ability to change download archive name (#643) --- pyproject.toml | 1 + src/ytdl_sub/config/config_validator.py | 1 - src/ytdl_sub/config/defaults.py | 4 ++ src/ytdl_sub/config/preset_options.py | 18 ++++++- src/ytdl_sub/downloaders/url/downloader.py | 2 - .../subscriptions/base_subscription.py | 2 +- .../subscriptions/subscription_download.py | 3 +- .../subscription_ytdl_options.py | 4 +- .../enhanced_download_archive.py | 48 +++++-------------- 9 files changed, 38 insertions(+), 45 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 1f0df34f..d17d6c0c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,6 +14,7 @@ disable = [ "R0801", # similar lines "R0913", # Too many arguments "R0901", # too-many-ancestors + "R0902", # too-many-instance-attributes "W0511", # TODO ] diff --git a/src/ytdl_sub/config/config_validator.py b/src/ytdl_sub/config/config_validator.py index d2c353e6..5e375c8a 100644 --- a/src/ytdl_sub/config/config_validator.py +++ b/src/ytdl_sub/config/config_validator.py @@ -95,7 +95,6 @@ class PersistLogsValidator(StrictDictValidator): return self._keep_successful_logs.value -# pylint: disable=too-many-instance-attributes class ConfigOptions(StrictDictValidator): _required_keys = {"working_directory"} _optional_keys = { diff --git a/src/ytdl_sub/config/defaults.py b/src/ytdl_sub/config/defaults.py index 29f40102..22aa35dc 100644 --- a/src/ytdl_sub/config/defaults.py +++ b/src/ytdl_sub/config/defaults.py @@ -14,3 +14,7 @@ else: DEFAULT_FFPROBE_PATH = "/usr/bin/ffprobe" MAX_FILE_NAME_BYTES = os.pathconf("/", "PC_NAME_MAX") + +# Historically was hardcoded to this value. Use this as the default +# if download_archive_path is not specified +DEFAULT_DOWNLOAD_ARCHIVE_NAME = ".ytdl-sub-{subscription_name}-download-archive.json" diff --git a/src/ytdl_sub/config/preset_options.py b/src/ytdl_sub/config/preset_options.py index ca5b8278..72f1b281 100644 --- a/src/ytdl_sub/config/preset_options.py +++ b/src/ytdl_sub/config/preset_options.py @@ -6,6 +6,7 @@ from typing import Optional from yt_dlp.utils import sanitize_filename +from ytdl_sub.config.defaults import DEFAULT_DOWNLOAD_ARCHIVE_NAME from ytdl_sub.entries.entry import Entry from ytdl_sub.utils.exceptions import ValidationException from ytdl_sub.validators.file_path_validators import OverridesStringFormatterFilePathValidator @@ -235,6 +236,7 @@ class OutputOptions(StrictDictValidator): # optional thumbnail_name: "{title_sanitized}.{thumbnail_ext}" info_json_name: "{title_sanitized}.{info_json_ext}" + download_archive_name: ".ytdl-sub-{subscription_name}-download-archive.txt" maintain_download_archive: True keep_files_before: now keep_files_after: 19000101 @@ -244,7 +246,7 @@ class OutputOptions(StrictDictValidator): _optional_keys = { "thumbnail_name", "info_json_name", - "subtitles_name", + "download_archive_name", "maintain_download_archive", "keep_files_before", "keep_files_after", @@ -282,6 +284,12 @@ class OutputOptions(StrictDictValidator): key="info_json_name", validator=StringFormatterFileNameValidator ) + self._download_archive_name = self._validate_key_if_present( + key="download_archive_name", + validator=OverridesStringFormatterValidator, + default=DEFAULT_DOWNLOAD_ARCHIVE_NAME, + ) + self._maintain_download_archive = self._validate_key_if_present( key="maintain_download_archive", validator=BoolValidator, default=False ) @@ -333,6 +341,14 @@ class OutputOptions(StrictDictValidator): """ return self._info_json_name + @property + def download_archive_name(self) -> Optional[OverridesStringFormatterValidator]: + """ + Optional. The file name to store a subscriptions download archive placed relative to + the output directory. Defaults to ``.ytdl-sub-{subscription_name}-download-archive.txt`` + """ + return self._download_archive_name + @property def maintain_download_archive(self) -> bool: """ diff --git a/src/ytdl_sub/downloaders/url/downloader.py b/src/ytdl_sub/downloaders/url/downloader.py index fae279e6..9fde56ab 100644 --- a/src/ytdl_sub/downloaders/url/downloader.py +++ b/src/ytdl_sub/downloaders/url/downloader.py @@ -42,8 +42,6 @@ from ytdl_sub.utils.thumbnail import convert_download_thumbnail from ytdl_sub.utils.thumbnail import download_and_convert_url_thumbnail from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive -# pylint: disable=too-many-instance-attributes - download_logger = Logger.get(name="downloader") diff --git a/src/ytdl_sub/subscriptions/base_subscription.py b/src/ytdl_sub/subscriptions/base_subscription.py index 2a6bef23..f6ccd868 100644 --- a/src/ytdl_sub/subscriptions/base_subscription.py +++ b/src/ytdl_sub/subscriptions/base_subscription.py @@ -46,7 +46,7 @@ class BaseSubscription(ABC): self._preset_options = preset_options self._enhanced_download_archive = EnhancedDownloadArchive( - subscription_name=name, + file_name=self.overrides.apply_formatter(self.output_options.download_archive_name), working_directory=self.working_directory, output_directory=self.output_directory, ) diff --git a/src/ytdl_sub/subscriptions/subscription_download.py b/src/ytdl_sub/subscriptions/subscription_download.py index cf69f764..92ca121b 100644 --- a/src/ytdl_sub/subscriptions/subscription_download.py +++ b/src/ytdl_sub/subscriptions/subscription_download.py @@ -144,8 +144,7 @@ class SubscriptionDownload(BaseSubscription, ABC): self._enhanced_download_archive.remove_stale_files(date_range=date_range_to_keep) self._enhanced_download_archive.save_download_mappings() - FileHandler.delete(self._enhanced_download_archive.archive_working_file_path) - FileHandler.delete(self._enhanced_download_archive.mapping_working_file_path) + FileHandler.delete(self._enhanced_download_archive.working_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 70daaecc..c108033e 100644 --- a/src/ytdl_sub/subscriptions/subscription_ytdl_options.py +++ b/src/ytdl_sub/subscriptions/subscription_ytdl_options.py @@ -87,9 +87,7 @@ class SubscriptionYTDLOptions: ytdl_options = {} if self._preset.output_options.maintain_download_archive: - ytdl_options["download_archive"] = str( - Path(self._working_directory) / self._enhanced_download_archive.archive_file_name - ) + ytdl_options["download_archive"] = self._enhanced_download_archive.working_file_path return ytdl_options diff --git a/src/ytdl_sub/ytdl_additions/enhanced_download_archive.py b/src/ytdl_sub/ytdl_additions/enhanced_download_archive.py index 822de1a2..31cc3c13 100644 --- a/src/ytdl_sub/ytdl_additions/enhanced_download_archive.py +++ b/src/ytdl_sub/ytdl_additions/enhanced_download_archive.py @@ -18,7 +18,6 @@ from ytdl_sub.entries.variables.kwargs import SPLIT_BY_CHAPTERS_PARENT_ENTRY from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.file_handler import FileHandlerTransactionLog from ytdl_sub.utils.file_handler import FileMetadata -from ytdl_sub.utils.logger import Logger @dataclass @@ -370,21 +369,19 @@ class EnhancedDownloadArchive: def __init__( self, - subscription_name: str, + file_name: str, working_directory: str, output_directory: str, dry_run: bool = False, ): - self.subscription_name = subscription_name + self._file_name = file_name self._file_handler = FileHandler( working_directory=working_directory, output_directory=output_directory, dry_run=dry_run ) self._download_mapping = self._maybe_load_download_mappings( - mapping_file_path=self._mapping_output_file_path + mapping_file_path=self.output_file_path ) - self._logger = Logger.get(name=subscription_name) - self.num_entries_added: int = 0 self.num_entries_modified: int = 0 self.num_entries_removed: int = 0 @@ -418,7 +415,7 @@ class EnhancedDownloadArchive: dry_run=dry_run, ) self._download_mapping = self._maybe_load_download_mappings( - mapping_file_path=self._mapping_output_file_path + mapping_file_path=self.output_file_path ) return self @@ -431,16 +428,6 @@ class EnhancedDownloadArchive: """ return self._file_handler.dry_run - @property - def archive_file_name(self) -> str: - """ - Returns - ------- - The download archive's file name (no path) - Used to recreate yt-dlp's download archive in the working directory - """ - return f".ytdl-sub-{self.subscription_name}-download-archive.txt" - @property def working_directory(self) -> str: """ @@ -460,40 +447,31 @@ class EnhancedDownloadArchive: return self._file_handler.output_directory @property - def _mapping_file_name(self) -> str: + def file_name(self) -> str: """ Returns ------- The download mapping's file name (no path) """ - return f".ytdl-sub-{self.subscription_name}-download-archive.json" + return self._file_name @property - def _mapping_output_file_path(self) -> str: + def output_file_path(self) -> str: """ Returns ------- The download mapping's file path in the output directory. """ - return str(Path(self.output_directory) / self._mapping_file_name) + return str(Path(self.output_directory) / self.file_name) @property - def mapping_working_file_path(self) -> str: + def working_file_path(self) -> str: """ Returns ------- The download mapping's file path in the working directory. """ - return str(Path(self.working_directory) / self._mapping_file_name) - - @property - def archive_working_file_path(self) -> str: - """ - Returns - ------- - The download archive's file path in the working directory. - """ - return str(Path(self.working_directory) / self.archive_file_name) + return str(Path(self.working_directory) / self.file_name) @property def mapping(self) -> DownloadMappings: @@ -526,7 +504,7 @@ class EnhancedDownloadArchive: return self # Otherwise, create a ytdl download archive file in the working directory. - self.mapping.to_download_archive().to_file(self.archive_working_file_path) + self.mapping.to_download_archive().to_file(self.working_file_path) return self @@ -566,8 +544,8 @@ class EnhancedDownloadArchive: self """ if not self.get_file_handler_transaction_log().is_empty: - self._download_mapping.to_file(output_json_file=self.mapping_working_file_path) - self.save_file_to_output_directory(file_name=self._mapping_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) return self def delete_file_from_output_directory(self, file_name: str): From 8d2999c2b21d82ee412f06ff20d46c0ce1dc1437 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 17 Jul 2023 14:05:51 -0700 Subject: [PATCH 23/42] [BACKEND] Upgrade yt-dlp version (#654) * [BACKEND] Upgrade yt-dlp version * downgrade pyyaml * update mediafile * update fixtures --- setup.cfg | 8 ++--- .../bandcamp/test_artist_url.json | 30 +++++++++---------- .../chapters/test_chapters_from_comments.json | 4 +-- .../date_range/test_channel_recent.json | 4 +-- .../test_channel_rolling_recent.json | 2 +- .../plugins/file_convert/output.json | 2 +- .../file_convert/output_custom_ffmpeg.json | 2 +- .../test_match_filters_partial.json | 2 +- .../plugins/split_by_chapters_video.json | 22 +++++++------- ...ters_with_regex_no_chapters_video_pass.txt | 2 +- .../split_by_chapters_with_regex_video.json | 22 +++++++------- .../plugins/test_audio_extract_playlist.json | 6 ++-- .../plugins/test_audio_extract_single.json | 2 +- .../test_chapters_sb_and_embedded_subs.json | 4 +-- .../plugins/test_subtitles_embedded.json | 2 +- .../test_subtitles_embedded_and_file.json | 2 +- .../test_soundcloud_discography.json | 26 ++++++++-------- .../youtube/test_channel_full.json | 26 ++++++++-------- .../youtube/test_playlist.json | 6 ++-- .../youtube/test_video.json | 2 +- .../youtube/test_video_cli.json | 2 +- 21 files changed, 89 insertions(+), 89 deletions(-) diff --git a/setup.cfg b/setup.cfg index 573259cb..7bc55744 100644 --- a/setup.cfg +++ b/setup.cfg @@ -27,12 +27,12 @@ package_dir = packages=find: install_requires = - yt-dlp==2023.6.22 + yt-dlp==2023.7.6 argparse==1.4.0 - colorama==0.4.6, + colorama==0.4.6 mergedeep==1.3.4 - mediafile==0.10.1 - PyYAML==6.0 + mediafile==0.12.0 + PyYAML==5.3.1 [options.package_data] * = *.yaml 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 76755a56..13425b10 100644 --- a/tests/resources/expected_downloads_summaries/bandcamp/test_artist_url.json +++ b/tests/resources/expected_downloads_summaries/bandcamp/test_artist_url.json @@ -1,19 +1,19 @@ { ".ytdl-sub-jb-download-archive.json": "9f5ca17dc0d842ac4c296054c0011ace", - "El Jazzy Chavo/[2022] S950 Funk/01 - Spark it.mp3": "6f21b6f977609382fa9b9fa9817b28cc", - "El Jazzy Chavo/[2022] S950 Funk/02 - Astronomikal Funk.mp3": "870199f5e75ea170051122f7220e2f42", - "El Jazzy Chavo/[2022] S950 Funk/03 - Impulse.mp3": "3a14e5e034016ad131186caf94be00da", - "El Jazzy Chavo/[2022] S950 Funk/04 - September.mp3": "c58520ef3f7f8944151ee0fb95fb0ac5", - "El Jazzy Chavo/[2022] S950 Funk/05 - Interlune.mp3": "5a7365a253ac4a5af54e550508a40b66", - "El Jazzy Chavo/[2022] S950 Funk/06 - Ninjutsu Techniques.mp3": "07b3f74ef78cb0c869c86dded054b1e9", - "El Jazzy Chavo/[2022] S950 Funk/07 - Space Funk Flow.mp3": "fef74e222258c4845e8b51e05acd240f", - "El Jazzy Chavo/[2022] S950 Funk/08 - Cellar Groove.mp3": "743927c47df60e811d367f5ef969faaf", - "El Jazzy Chavo/[2022] S950 Funk/09 - Solar Wind.mp3": "dd97643e3dc5decefb543da3a6e31356", - "El Jazzy Chavo/[2022] S950 Funk/10 - Interlune II.mp3": "37717cbd8f837657047616743937595b", - "El Jazzy Chavo/[2022] S950 Funk/11 - Ghetto Anthem.mp3": "54089f39836d469f391f6850926a392d", - "El Jazzy Chavo/[2022] S950 Funk/12 - Street Degree.mp3": "ddd3dc74d9bc07b988e4e4da363624dd", - "El Jazzy Chavo/[2022] S950 Funk/13 - Trouble World.mp3": "90dacf561b52852312f9e3f06084bfca", - "El Jazzy Chavo/[2022] S950 Funk/14 - Relaxation.mp3": "12dc503e0f758ae0b962e941727f272b", - "El Jazzy Chavo/[2022] S950 Funk/15 - Journey From Within.mp3": "c593e610ac6853b3795781b6650fc59e", + "El Jazzy Chavo/[2022] S950 Funk/01 - Spark it.mp3": "f1fcc87884ced84be016391e3989b5c1", + "El Jazzy Chavo/[2022] S950 Funk/02 - Astronomikal Funk.mp3": "d07701404b8ddaa2e38eb51f7e2ac2d8", + "El Jazzy Chavo/[2022] S950 Funk/03 - Impulse.mp3": "43118db203e1d9427036102cfb39a1e3", + "El Jazzy Chavo/[2022] S950 Funk/04 - September.mp3": "3d75c5068e3dbb93dd86fc650c7ca84d", + "El Jazzy Chavo/[2022] S950 Funk/05 - Interlune.mp3": "63897d8af920f31af2183a17bc697c11", + "El Jazzy Chavo/[2022] S950 Funk/06 - Ninjutsu Techniques.mp3": "a500409583ee30e4cb68d64af2b32596", + "El Jazzy Chavo/[2022] S950 Funk/07 - Space Funk Flow.mp3": "1e1a12a5a42a607abf342ec4f301f471", + "El Jazzy Chavo/[2022] S950 Funk/08 - Cellar Groove.mp3": "a18ceff8785e8849d166eb2710caafa4", + "El Jazzy Chavo/[2022] S950 Funk/09 - Solar Wind.mp3": "a41665337e3fe05d7c7d9d8e6ddde737", + "El Jazzy Chavo/[2022] S950 Funk/10 - Interlune II.mp3": "8d2f3158ac9bac51aafbdbe6eb43154b", + "El Jazzy Chavo/[2022] S950 Funk/11 - Ghetto Anthem.mp3": "39085bae1b0f8544acd08f74f88cacfd", + "El Jazzy Chavo/[2022] S950 Funk/12 - Street Degree.mp3": "561f0d8fbc62f87f2149c17ee0a53ce2", + "El Jazzy Chavo/[2022] S950 Funk/13 - Trouble World.mp3": "1ad07dc6a2d6ced78449bc46a2909335", + "El Jazzy Chavo/[2022] S950 Funk/14 - Relaxation.mp3": "ba8addb0d59f26a84bbb79a6cdd1af11", + "El Jazzy Chavo/[2022] S950 Funk/15 - Journey From Within.mp3": "bd97135290482c6bbe6eac7d3a700f11", "El Jazzy Chavo/[2022] S950 Funk/folder.jpg": "62e51365dd309e76a6323f927f6fcc94" } \ 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 83aa189f..cdd1dbe4 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,7 +1,7 @@ { ".ytdl-sub-chapters_from_comments-download-archive.json": "122723ce8d257eebb05178daa26141f6", "JMC/JMC - Move 78 - Automated Improvisation [Full Album]-thumb.jpg": "c12e6a6f242680d1096a1a99d74a62c6", - "JMC/JMC - Move 78 - Automated Improvisation [Full Album].info.json": "8fe1b8c97290084a9e6149fed460cd51", - "JMC/JMC - Move 78 - Automated Improvisation [Full Album].mp4": "23b5ff14853bab45c0d44c6c5e136f72", + "JMC/JMC - Move 78 - Automated Improvisation [Full Album].info.json": "31d3e187632cffa84879027c9c7ddb2f", + "JMC/JMC - Move 78 - Automated Improvisation [Full Album].mp4": "b82e8eb3f912a4ee2b14d90332fdce89", "JMC/JMC - Move 78 - Automated Improvisation [Full Album].nfo": "7a65b184d24c68fc0ec5380432250f5b" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_recent.json b/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_recent.json index 36dace10..c5e55ad4 100644 --- a/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_recent.json +++ b/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_recent.json @@ -1,11 +1,11 @@ { "Project ⧸ Zombie/.ytdl-sub-recent-download-archive.json": "ca7275efd7f2ebe489b8ca4007dc5361", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer-thumb.jpg": "705ca4e0d99b37e9ecdf6bfe4b90c59b", - "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json": "26f8296166a30aa9b8a198ef2541475e", + "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json": "70dc8e603978c4ac2438e0a76a14d91a", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.mp4": "dbb140af8676f34fb701d5199e8708ea", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.nfo": "ee5bee94667ed4f1d47af08384418d3c", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg": "28d852ede73b879b9ebf9a061cfc7d46", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "d54f92d33e4b9486c509913598730605", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "39aea44e1987ed4950ef81661b70123f", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "083e2e77e3e01218419531c08795c9c0", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "c2f06f9eb5b42c777808a35587e5941e", "Project ⧸ Zombie/fanart.jpg": "129c6639b47299bc48062f0365e670ee", diff --git a/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_rolling_recent.json b/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_rolling_recent.json index c0237256..801dd689 100644 --- a/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_rolling_recent.json +++ b/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_rolling_recent.json @@ -1,7 +1,7 @@ { "Project ⧸ Zombie/.ytdl-sub-recent-download-archive.json": "46170edaf7cc51e5f59ef5d4c0476200", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg": "28d852ede73b879b9ebf9a061cfc7d46", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "d54f92d33e4b9486c509913598730605", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "39aea44e1987ed4950ef81661b70123f", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "083e2e77e3e01218419531c08795c9c0", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "c2f06f9eb5b42c777808a35587e5941e", "Project ⧸ Zombie/fanart.jpg": "129c6639b47299bc48062f0365e670ee", 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 0e06c5a4..f2c1d914 100644 --- a/tests/resources/expected_downloads_summaries/plugins/file_convert/output.json +++ b/tests/resources/expected_downloads_summaries/plugins/file_convert/output.json @@ -1,7 +1,7 @@ { ".ytdl-sub-file_convert_test-download-archive.json": "65aa49c7345f9fc201e42ddc4a96b19b", "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3-thumb.jpg": "662fcaadf6e80d63591bac19a5fdffb0", - "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.info.json": "f1d7f68e7fff921508dbcae121dcf33c", + "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.info.json": "5201f78cc65d5bb26aeea114e11d6264", "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.mp4": "390177bcc076e309d1534b8bb5afdcc7", "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.nfo": "cacf09ab38f9b3085da9c5af516cf22a" } \ 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 f6fd09c3..606c0991 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,7 +1,7 @@ { ".ytdl-sub-file_convert_test-download-archive.json": "74813dccf4e9732e49f5dc3c2d66f3be", "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3-thumb.jpg": "662fcaadf6e80d63591bac19a5fdffb0", - "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.info.json": "6c60af5a3ff079bfdbe62782c4afbbab", + "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.info.json": "20cf671c3a613d4aae8f5bfbf14feba0", "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.mkv": "b5f248b560f89f3f2a83fcdcd197d486", "Beyond The Guitar/Beyond The Guitar - When you hear Hugh Jackman is returning as Wolverine in Deadpool 3.nfo": "cacf09ab38f9b3085da9c5af516cf22a" } \ No newline at end of file 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 05c2cae7..13e2fb82 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,7 +1,7 @@ { ".ytdl-sub-match_filter_test-download-archive.json": "6017105735dd8fdfe18932c9c048dccf", "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21]-thumb.jpg": "e7830aa8a64b0cde65ba3f7e5fc56530", - "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "8c572fd9c3e7a16add30b5cfc4a93594", + "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "ea8e2d03835416861654e3cffed5e181", "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].nfo": "17c303f07e9b3af77c90975f843c95bd", "Project Zombie/Project Zombie - Jesse's Minecraft Server [Trailer - Mar.21].webm": "ad90ebef1ea6cbdb924670cdd7d1b9b9" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/split_by_chapters_video.json b/tests/resources/expected_downloads_summaries/plugins/split_by_chapters_video.json index 52aa3c96..7b3e68c1 100644 --- a/tests/resources/expected_downloads_summaries/plugins/split_by_chapters_video.json +++ b/tests/resources/expected_downloads_summaries/plugins/split_by_chapters_video.json @@ -1,15 +1,15 @@ { ".ytdl-sub-split_by_chapters_video-download-archive.json": "c3fb0b4f31caaa10ac7954ea93da33c4", - "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/01 - 01. Intro (Feat. Racheal Ofori & Barney Artist).mp3": "29d09da874133ce5c5f7459c2fa6cd85", - "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/02 - 02. Answers (Feat. Rick David & Kaya Thomas - Dyke).mp3": "d5432e6a4f7af9810b0e7c8eebe4898a", - "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/03 - 03. Blaze (Feat. Kaya Thomas - Dyke).mp3": "cf03da6688a73373f9295dc595156e11", - "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/04 - 04. What If (Interlude).mp3": "b7b943b6f3395c05433b8532364d63d6", - "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/05 - 05. No Peace (Feat. Tom Misch).mp3": "0d9719268900d4abcd8c0f51ad3af92c", - "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/06 - 06. Closer (Feat. Lester Duval).mp3": "bbd9ec616a0f7d3c5d13c04bb118681e", - "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/07 - 07. Delusions: Rumination (Interlude) (Feat. Racheal Ofori).mp3": "2e59ecdc0f8050bcf190a7898d7ae968", - "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/08 - 08. Dreams (Feat. Carmody).mp3": "e58966f3326b876f0ab97459b681f76f", - "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/09 - 09. Dreaming (Interlude) (Feat. Racheal Ofori).mp3": "d6939215b73457fce4e026f8c9b57ecc", - "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/10 - 10. Hopeful (Feat. Jordan Rakei).mp3": "82d0e7d8070fd15d71c2e11c0285d426", - "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/11 - 11. Sunrise (Pillows) (Feat. Emmavie).mp3": "3edb11e8cd5f270dd42ee62d9a9aa4ff", + "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/01 - 01. Intro (Feat. Racheal Ofori & Barney Artist).mp3": "8827ac62201abeb94f44a46d91628aa8", + "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/02 - 02. Answers (Feat. Rick David & Kaya Thomas - Dyke).mp3": "f17e02119bf073c4ed98da2a960b85d3", + "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/03 - 03. Blaze (Feat. Kaya Thomas - Dyke).mp3": "63c0bc97cbdaf35203011378b1860418", + "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/04 - 04. What If (Interlude).mp3": "eb1a8533390243a5c4c49d8b6871c0ce", + "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/05 - 05. No Peace (Feat. Tom Misch).mp3": "a1b54772207228bd4922ad93d249c9f5", + "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/06 - 06. Closer (Feat. Lester Duval).mp3": "1d217264368d5f078e67691ea1b3df97", + "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/07 - 07. Delusions: Rumination (Interlude) (Feat. Racheal Ofori).mp3": "4d1a1728dbd69a30bbc2ffa354851169", + "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/08 - 08. Dreams (Feat. Carmody).mp3": "c204cf16f9f44945634c6171a5192e99", + "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/09 - 09. Dreaming (Interlude) (Feat. Racheal Ofori).mp3": "795e22297f8db00697563774328ffb3a", + "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/10 - 10. Hopeful (Feat. Jordan Rakei).mp3": "3904a5cd81b5ac43850b7858fb8dd378", + "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/11 - 11. Sunrise (Pillows) (Feat. Emmavie).mp3": "a89549db5b16ff76d04fd0bbbfba3424", "Proved Records/[2017] Alfa Mist - Nocturne [Full Album]/folder.jpg": "bd3685acc53072e591bae2505ecb0648" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/split_by_chapters_with_regex_no_chapters_video_pass.txt b/tests/resources/expected_downloads_summaries/plugins/split_by_chapters_with_regex_no_chapters_video_pass.txt index 2abd841d..f5f25165 100644 --- a/tests/resources/expected_downloads_summaries/plugins/split_by_chapters_with_regex_no_chapters_video_pass.txt +++ b/tests/resources/expected_downloads_summaries/plugins/split_by_chapters_with_regex_no_chapters_video_pass.txt @@ -1,5 +1,5 @@ { ".ytdl-sub-split_by_chapters_with_regex_video-download-archive.json": "4008e43668447f1a3a6a55520a6ff475", - "Project Zombie/[2010] Oblivion Mod "Falcor" p.1/01 - Oblivion Mod "Falcor" p.1.mp3": "a3c01f164eeca4541aeed49264d2fc8c", + "Project Zombie/[2010] Oblivion Mod "Falcor" p.1/01 - Oblivion Mod "Falcor" p.1.mp3": "8fc765ce55304814942c1f38fe9e38e2", "Project Zombie/[2010] Oblivion Mod "Falcor" p.1/folder.jpg": "fb95b510681676e81c321171fc23143e" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/split_by_chapters_with_regex_video.json b/tests/resources/expected_downloads_summaries/plugins/split_by_chapters_with_regex_video.json index 12c9cd2b..3daa3ef8 100644 --- a/tests/resources/expected_downloads_summaries/plugins/split_by_chapters_with_regex_video.json +++ b/tests/resources/expected_downloads_summaries/plugins/split_by_chapters_with_regex_video.json @@ -1,15 +1,15 @@ { ".ytdl-sub-split_by_chapters_with_regex_video-download-archive.json": "9798e8289742586d0efd295a97c6c906", - "Alfa Mist/[2017] Nocturne/01 - Intro (Feat. Racheal Ofori & Barney Artist).mp3": "7be57c4dde9ba2c3fa72e9cc65b0f586", - "Alfa Mist/[2017] Nocturne/02 - Answers (Feat. Rick David & Kaya Thomas - Dyke).mp3": "5ee032da9965c51913fcfa0319d061bd", - "Alfa Mist/[2017] Nocturne/03 - Blaze (Feat. Kaya Thomas - Dyke).mp3": "82c1f35bdccfb4ec146f33661ac94d6b", - "Alfa Mist/[2017] Nocturne/04 - What If (Interlude).mp3": "040b38c249e478d8832dcea8bfeca17f", - "Alfa Mist/[2017] Nocturne/05 - No Peace (Feat. Tom Misch).mp3": "06f7e57fecdc7b4d2e37c7652791ce19", - "Alfa Mist/[2017] Nocturne/06 - Closer (Feat. Lester Duval).mp3": "91a03449c33bf9dcff5a9654a8525626", - "Alfa Mist/[2017] Nocturne/07 - Delusions: Rumination (Interlude) (Feat. Racheal Ofori).mp3": "54c26621b8d4e74f37217c836479a077", - "Alfa Mist/[2017] Nocturne/08 - Dreams (Feat. Carmody).mp3": "2704327ac5998086e77a77da164e2afd", - "Alfa Mist/[2017] Nocturne/09 - Dreaming (Interlude) (Feat. Racheal Ofori).mp3": "75b8a26d3099aa2d9ba488b33c4eb1e7", - "Alfa Mist/[2017] Nocturne/10 - Hopeful (Feat. Jordan Rakei).mp3": "0bf0979c99c55ef986efaba55c0dc858", - "Alfa Mist/[2017] Nocturne/11 - Sunrise (Pillows) (Feat. Emmavie).mp3": "78950fbfe459de8e9aa951ab6fa153bf", + "Alfa Mist/[2017] Nocturne/01 - Intro (Feat. Racheal Ofori & Barney Artist).mp3": "c10cff170976c3c5139f6073eeb3e25e", + "Alfa Mist/[2017] Nocturne/02 - Answers (Feat. Rick David & Kaya Thomas - Dyke).mp3": "881ecdbee4a0d565c0ec6eacf03115df", + "Alfa Mist/[2017] Nocturne/03 - Blaze (Feat. Kaya Thomas - Dyke).mp3": "aa5c6fbab58dd2be2660bfb65be6a172", + "Alfa Mist/[2017] Nocturne/04 - What If (Interlude).mp3": "a64ce02ed1188276c9744f92cfc81e8e", + "Alfa Mist/[2017] Nocturne/05 - No Peace (Feat. Tom Misch).mp3": "a6dbe96141515caa32f3df4f66e46f75", + "Alfa Mist/[2017] Nocturne/06 - Closer (Feat. Lester Duval).mp3": "9b8ff5357109c376cce4bdd25e724d7b", + "Alfa Mist/[2017] Nocturne/07 - Delusions: Rumination (Interlude) (Feat. Racheal Ofori).mp3": "022b077892b838c478c65ba3b5f00b55", + "Alfa Mist/[2017] Nocturne/08 - Dreams (Feat. Carmody).mp3": "75c9c0f789c378c45bb176aa6cc6ec57", + "Alfa Mist/[2017] Nocturne/09 - Dreaming (Interlude) (Feat. Racheal Ofori).mp3": "af59a3ac869249ac6ef2586fa6c59009", + "Alfa Mist/[2017] Nocturne/10 - Hopeful (Feat. Jordan Rakei).mp3": "27d36f90dc87264c57e88f3663b29467", + "Alfa Mist/[2017] Nocturne/11 - Sunrise (Pillows) (Feat. Emmavie).mp3": "be7085f9a536dfd2f70ce001c65a416c", "Alfa Mist/[2017] Nocturne/folder.jpg": "bd3685acc53072e591bae2505ecb0648" } \ 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 890aca91..aeb7550e 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,7 +1,7 @@ { ".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": "5657c5b92f8980b20d8bbee0fdc7e5d8", - "Project Zombie/[2011] Jesse's Minecraft Server/02 - Jesse's Minecraft Server [Trailer - Feb.27].ogg": "a2a3a34e02e26a6c0265530d4499473b", - "Project Zombie/[2011] Jesse's Minecraft Server/03 - Jesse's Minecraft Server [Trailer - Feb.1].ogg": "b2d6388b4ddf8e3fbca042cb123672c3", + "Project Zombie/[2011] Jesse's Minecraft Server/01 - Jesse's Minecraft Server [Trailer - Mar.21].ogg": "602166199db42b48e49483f82acc33ce", + "Project Zombie/[2011] Jesse's Minecraft Server/02 - Jesse's Minecraft Server [Trailer - Feb.27].ogg": "eae6fff43c176fe6b9001a5e1d66517c", + "Project Zombie/[2011] Jesse's Minecraft Server/03 - Jesse's Minecraft Server [Trailer - Feb.1].ogg": "67b590e4323c67229b05faf45fe557da", "Project Zombie/[2011] Jesse's Minecraft Server/folder.jpg": "e7830aa8a64b0cde65ba3f7e5fc56530" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_single.json b/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_single.json index ea2e6f49..f4aa6b67 100644 --- a/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_single.json +++ b/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_single.json @@ -1,5 +1,5 @@ { ".ytdl-sub-single_song_test-download-archive.json": "c8ff22ec3304c9f8dab18cedaed4e8b4", - "YouTube/[2019] YouTube Rewind 2019: For the Record | #YouTubeRewind/01 - YouTube Rewind 2019: For the Record | #YouTubeRewind.mp3": "7affc0ecf01f36de9cee1a7aafd776eb", + "YouTube/[2019] YouTube Rewind 2019: For the Record | #YouTubeRewind/01 - YouTube Rewind 2019: For the Record | #YouTubeRewind.mp3": "37b38834eda1293ad503e00dcff7c4dc", "YouTube/[2019] YouTube Rewind 2019: For the Record | #YouTubeRewind/folder.jpg": "50ee47c80f679029f5d3503bb91b045a" } \ No newline at end of file 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 f44caa26..9a1949aa 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,7 +1,7 @@ { ".ytdl-sub-sponsorblock_with_embedded_subs_test-download-archive.json": "40abc64a8fe93a10406bff1548a2cbe2", "JMC/JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case-thumb.jpg": "b5353a824a4800cc26f884e3025ed969", - "JMC/JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.info.json": "9dc7bee59041a2dfb82f91d29bc444b4", - "JMC/JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.mp4": "c9fac07c04da7606c98b6cdd391c539a", + "JMC/JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.info.json": "324f582f8a69d3844019e650b382773f", + "JMC/JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.mp4": "20a9ddbececcc2c75d6df06e88007b5c", "JMC/JMC - This GPU SLIDES into this Case! - Silverstone SUGO 16 ITX Case.nfo": "b9bd35e4f260c728774d8dd31f83637c" } \ 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 17bb35ec..abfcad07 100644 --- a/tests/resources/expected_downloads_summaries/plugins/test_subtitles_embedded.json +++ b/tests/resources/expected_downloads_summaries/plugins/test_subtitles_embedded.json @@ -1,7 +1,7 @@ { ".ytdl-sub-subtitles_embedded_test-download-archive.json": "1aa35c1d2663ac721f33f8374c00af1a", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind-thumb.jpg": "50ee47c80f679029f5d3503bb91b045a", - "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.info.json": "ea72e1cc74c1623bea92ba8140fa749d", + "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.info.json": "7940facc211cb3e3956af3f2ad6f19fd", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.mp4": "1f1f91f85b162c20596a2413e704b809", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.nfo": "c64964fab07574080e5da3242e3bfd48" } \ No newline at end of file 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 c3fab12c..fd33b97f 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 @@ -3,7 +3,7 @@ "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind-thumb.jpg": "50ee47c80f679029f5d3503bb91b045a", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.de.srt": "b343c3bb9257b7ee7ba38f570a115b37", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.en.srt": "fe8c6ee92cae6e059fd80fd61691adbe", - "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.info.json": "d8263cbb0e6a99e05e3631d1696c8042", + "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.info.json": "a3f7906782db2be4aa43bdd1354e80bb", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.mp4": "1f1f91f85b162c20596a2413e704b809", "JMC/JMC - YouTube Rewind 2019: For the Record | #YouTubeRewind.nfo": "c64964fab07574080e5da3242e3bfd48" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/soundcloud/test_soundcloud_discography.json b/tests/resources/expected_downloads_summaries/soundcloud/test_soundcloud_discography.json index 3504f1a1..54b5e340 100644 --- a/tests/resources/expected_downloads_summaries/soundcloud/test_soundcloud_discography.json +++ b/tests/resources/expected_downloads_summaries/soundcloud/test_soundcloud_discography.json @@ -1,19 +1,19 @@ { ".ytdl-sub-jb-download-archive.json": "1a99156e9ece62539fb2608416a07200", - "j_b/[2021] Baby Santana's Dorian Groove/01 - Baby Santana's Dorian Groove.mp3": "a8955bccae34c39e64d70a021c95e6d4", + "j_b/[2021] Baby Santana's Dorian Groove/01 - Baby Santana's Dorian Groove.mp3": "317a9ee75431d6020e3cad0883c7392f", "j_b/[2021] Baby Santana's Dorian Groove/folder.jpg": "967892be44b8c47e1be73f055a7c6f08", - "j_b/[2021] Purple Clouds/01 - Purple Clouds.mp3": "ec1d40fee597da35f5dc0126438efe54", + "j_b/[2021] Purple Clouds/01 - Purple Clouds.mp3": "4a5971c12ca6fdc335b0185a14e829f2", "j_b/[2021] Purple Clouds/folder.jpg": "967892be44b8c47e1be73f055a7c6f08", - "j_b/[2022] Acoustic Treats/01 - 20160426 184214.mp3": "768e148a2b24ed2de299ca4899d8e533", - "j_b/[2022] Acoustic Treats/02 - 20160502 123150.mp3": "a9cd2d2176f94fdad8965c1fbbc3396a", - "j_b/[2022] Acoustic Treats/03 - 20160504 143832.mp3": "f3c74e7e8595505d15a384226d0c906e", - "j_b/[2022] Acoustic Treats/04 - 20160601 221234.mp3": "d13a3008d9a39da3e5fdcd0c279718e8", - "j_b/[2022] Acoustic Treats/05 - 20160601 222440.mp3": "3a40d1108c4f6a0d004eea2151001d66", - "j_b/[2022] Acoustic Treats/06 - 20170604 190236.mp3": "8224406bb95e100f4ebcdf7fec3db1c0", - "j_b/[2022] Acoustic Treats/07 - 20170612 193646.mp3": "1ea96a8581eb81e45564617f75bd467e", - "j_b/[2022] Acoustic Treats/08 - 20170628 215206.mp3": "df14e3b41386cf408b4d1549428a17a5", - "j_b/[2022] Acoustic Treats/09 - Finding Home.mp3": "f52df647e1f5cf15df720d62b5ad64b1", - "j_b/[2022] Acoustic Treats/10 - Shallow Water WIP.mp3": "429ac1c752822230803c1a452987e492", - "j_b/[2022] Acoustic Treats/11 - Untold History.mp3": "9322445a6a7cdd506038b8714cb1731f", + "j_b/[2022] Acoustic Treats/01 - 20160426 184214.mp3": "bcc88eb579311b59ede4c13cdf24bcb9", + "j_b/[2022] Acoustic Treats/02 - 20160502 123150.mp3": "239d10c17047662c760cce834548d91d", + "j_b/[2022] Acoustic Treats/03 - 20160504 143832.mp3": "2d6e977e3e665012fdeaa0e8c2ee7375", + "j_b/[2022] Acoustic Treats/04 - 20160601 221234.mp3": "9da5b26fc231dfd0c8f09a2a3d2fe116", + "j_b/[2022] Acoustic Treats/05 - 20160601 222440.mp3": "8fb1cb262175921dbdddd6783664fa65", + "j_b/[2022] Acoustic Treats/06 - 20170604 190236.mp3": "529846e26a18be616deb3f12d858b8ea", + "j_b/[2022] Acoustic Treats/07 - 20170612 193646.mp3": "ba2be1ace7b0c31964bf0b8b15781b27", + "j_b/[2022] Acoustic Treats/08 - 20170628 215206.mp3": "ad248c0392ced4f6d548a4852fd99f1f", + "j_b/[2022] Acoustic Treats/09 - Finding Home.mp3": "52326cbd96e6f243cae77b0f68f00ef6", + "j_b/[2022] Acoustic Treats/10 - Shallow Water WIP.mp3": "a265ed7e4d3a014d09e79ac5f4fe3fc7", + "j_b/[2022] Acoustic Treats/11 - Untold History.mp3": "94d548773dded0089e73b26e6f923d9a", "j_b/[2022] Acoustic Treats/folder.jpg": "967892be44b8c47e1be73f055a7c6f08" } \ 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 0f780109..729fa982 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_channel_full.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_channel_full.json @@ -1,52 +1,52 @@ { "Project ⧸ Zombie/.ytdl-sub-pz-download-archive.json": "aadb59c92dcf14ee6617c77423a14584", "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e", - "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.info.json": "9204f865a0e2617ba66b02978e548f7b", + "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.info.json": "0e9453839a22b6a76b51790fbbb23454", "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.mp4": "6aab51d2ebb374dc965970cbacd00bda", "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.nfo": "a1970f06fbc4743fca6db0627de779f3", "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2-thumb.jpg": "8b32ee9c037fa669e444a0ac181525a1", - "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.info.json": "790297aac4b1657e79d209ecbfd0af93", + "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.info.json": "adc538d5568b311d6b71bb2a3c2f8ec2", "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.mp4": "4433a9932f0c3935cd9d339e281f38a9", "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.nfo": "4ad498ce223454a4baa7d64bb4a837d6", "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1]-thumb.jpg": "b232d253df621aa770b780c1301d364d", - "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "6b3d926670f6d7e038cb541169006ab5", + "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "ebf6e5c5ba1806d69cc8eb66fa53a2f9", "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].mp4": "36622668231135f717456ef960fc7a68", "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].nfo": "073eefa6e5c6d76edde80258ddf452ee", "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27]-thumb.jpg": "d17c379ea8b362f5b97c6b213b0342cb", - "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "d7c4f4fa828bd0da44f1f4bc779377fb", + "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "0d687426300432ffc94460d5ac90200d", "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].mp4": "692f5928b18d6d70db7b5314e08cdfd3", "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": "8b77dfe92ec6e4117f4b30d03def7ee1", + "Project ⧸ Zombie/Season 2011/s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "e03526cb4b91114dc0bfa4d75a479da4", "Project ⧸ Zombie/Season 2011/s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "f5cb35da0e2ecedee9b74db1402be06d", "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": "44070bcbe9640ea017a6bd02d50e44a5", + "Project ⧸ Zombie/Season 2011/s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).info.json": "48964586b9f85ac49caf1887158c23ab", "Project ⧸ Zombie/Season 2011/s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).mp4": "9766181630b30e94a22e571c70a065f4", "Project ⧸ Zombie/Season 2011/s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).nfo": "cb0184784a8eda842cfaf851f6e6af7d", "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|-thumb.jpg": "00ed383591779ffe98291de60f198fe9", - "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.info.json": "6d638a89c75d4302b9b80c9eae7e9f9e", + "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.info.json": "20510db3688622932727bf5dcd0a2200", "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.mp4": "2d6a06b4b8c4dac8d7c173362d9637a4", "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.nfo": "54ea4a48116aa98480a79495036c25e9", "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC]-thumb.jpg": "1718599d5189c65f7d8cf6acfa5ea851", - "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].info.json": "baf48094fdfba018283d43d4d2533745", + "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].info.json": "8df32d858656fe8c684cf50ddf16b4cf", "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].mp4": "60c3221125afbef78990bdcead78a82d", "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].nfo": "04f6aad56d85b1f65b81b6b8000f6479", "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|-thumb.jpg": "54ebe9df801b278fdd17b21afa8373a6", - "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.info.json": "552b2f6949953d61eddf9752cdcfec54", + "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.info.json": "dee712d394eea246a3b4bba436a8d7c3", "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.mp4": "2141f0f928d55e94fef7f7d3c7a4aca0", "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.nfo": "e2b078891b27cfee4c791598d046be24", "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|-thumb.jpg": "e29d49433175de8a761af35c5307791f", - "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.info.json": "6525c225dae3e1ef3991809d43a2f65d", - "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.mp4": "3fb239f0a646e515bbaaeb6f6d5cdd69", + "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.info.json": "255c5045b149c446267d6a91c0e5ebb5", + "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.mp4": "e092a7ecbe10a02556487db8cb4e1158", "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.nfo": "ce72e3e210d6d46fef3e0bc208dc69cf", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer-thumb.jpg": "705ca4e0d99b37e9ecdf6bfe4b90c59b", - "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json": "2348fcad75d9e3fd5fb9833d16ab2fdb", + "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json": "6f6ffbb3118ea6b0485b3816b6e4bba1", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.mp4": "dbb140af8676f34fb701d5199e8708ea", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.nfo": "31e92fc23d9765f8d5bd0d64834a9d1f", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg": "28d852ede73b879b9ebf9a061cfc7d46", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.en.srt": "3d2c4e7f65d2ca5e96da38ce7eecfc4e", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "bfb2cba0c2dc4888a0b8255e4bfcbf53", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "a1ec296adf1cfbe7329fa16dde78ebc3", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "083e2e77e3e01218419531c08795c9c0", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "a9b7ac3cacbda7fed9d12b0519945292", "Project ⧸ Zombie/fanart.jpg": "129c6639b47299bc48062f0365e670ee", diff --git a/tests/resources/expected_downloads_summaries/youtube/test_playlist.json b/tests/resources/expected_downloads_summaries/youtube/test_playlist.json index d6112493..8ea6647d 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_playlist.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_playlist.json @@ -1,15 +1,15 @@ { "JMC/.ytdl-sub-music_video_playlist_test-download-archive.json": "3fdab8d103e51aa70430b6da0ceb07e2", "JMC/Season 01/s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1]-thumb.jpg": "b232d253df621aa770b780c1301d364d", - "JMC/Season 01/s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "b9e6e1a1c373024e432889508142893c", + "JMC/Season 01/s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "a5b0ce6d259ad0fd8c8b5d352b35d223", "JMC/Season 01/s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1].mp4": "95f3abaabccdd76461be5dace92e9489", "JMC/Season 01/s01.e11020101 - Jesse's Minecraft Server [Trailer - Feb.1].nfo": "2a2997cbf16fb6b943d9933ad267331e", "JMC/Season 01/s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27]-thumb.jpg": "d17c379ea8b362f5b97c6b213b0342cb", - "JMC/Season 01/s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "500eb095f7942bbbc03e769c11c40fd3", + "JMC/Season 01/s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "6d28f4d284c7b41eb1c8af0bc50d1190", "JMC/Season 01/s01.e11022701 - Jesse's Minecraft Server [Trailer - Feb.27].mp4": "5465a5e5712351945e98667006b08747", "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": "d3a23e495c8063e5dfba3b9a4646c907", + "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "78d6dd9ee2a06c4c02ad1eb773d91b13", "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "c79ed62c72feb49bd02595322c6e1b89", "JMC/Season 01/s01.e11032101 - Jesse's Minecraft Server [Trailer - Mar.21].nfo": "c56083e2f3545fa2cafc4d67cbfdacf8", "JMC/season01-poster.jpg": "e7830aa8a64b0cde65ba3f7e5fc56530", diff --git a/tests/resources/expected_downloads_summaries/youtube/test_video.json b/tests/resources/expected_downloads_summaries/youtube/test_video.json index 294d9ab2..f7d75ddc 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_video.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_video.json @@ -1,6 +1,6 @@ { "JMC/JMC - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e", - "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "d5343d8444359cae9950cb99811a8fbd", + "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "73dd7eb872fe150364581de40a66777d", "JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2", "JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e" } \ No newline at end of file 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 2c9e7b9c..27e58215 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_video_cli.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_video_cli.json @@ -1,6 +1,6 @@ { "JMC/JMC - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e", - "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "34c7e0759e16e03cf41b10754dce0ce5", + "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "7ffe51eae87c1d6fd10151a366c9d207", "JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2", "JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e" } \ No newline at end of file From 3cbd07c9a4e0da81f129b8f30cfe4759a53ffb40 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Tue, 18 Jul 2023 10:48:16 -0700 Subject: [PATCH 24/42] [BACKEND] Update yt-dlp to latest commit (#655) * [BACKEND] Update yt-dlp to latest commit * git for installing commits --- docker/Dockerfile | 2 ++ docker/Dockerfile.ubuntu | 2 ++ setup.cfg | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index ad0bed55..6f6dc28d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -8,6 +8,7 @@ RUN mkdir -p /config && \ apk update --no-cache && \ apk upgrade --no-cache && \ apk add --no-cache --repository=http://dl-3.alpinelinux.org/alpine/edge/main/ \ + git \ vim \ g++ \ nano \ @@ -37,6 +38,7 @@ RUN mkdir -p /config && \ # Delete unneeded packages after install rm ytdl_sub-*.whl && \ apk del \ + git \ g++ \ make \ py3-pip \ diff --git a/docker/Dockerfile.ubuntu b/docker/Dockerfile.ubuntu index 798e07a3..4558abe5 100644 --- a/docker/Dockerfile.ubuntu +++ b/docker/Dockerfile.ubuntu @@ -19,6 +19,7 @@ RUN mkdir -p /config && \ apt-get -y update && \ apt-get -y upgrade && \ apt-get install --no-install-recommends -y \ + git \ vim \ g++ \ nano \ @@ -67,6 +68,7 @@ RUN mkdir -p /config && \ # Delete unneeded packages after install rm ytdl_sub-*.whl && \ apt-get remove -y \ + git \ g++ \ make \ xz-utils \ diff --git a/setup.cfg b/setup.cfg index 7bc55744..97ba5e01 100644 --- a/setup.cfg +++ b/setup.cfg @@ -27,12 +27,12 @@ package_dir = packages=find: install_requires = - yt-dlp==2023.7.6 argparse==1.4.0 colorama==0.4.6 mergedeep==1.3.4 mediafile==0.12.0 PyYAML==5.3.1 + yt-dlp@git+https://github.com/yt-dlp/yt-dlp@613dbce177d34ffc31053e8e01acf4bb107bcd1e [options.package_data] * = *.yaml From f0847cee63bd9c3e71e498e0034b4955e234a1ad Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Tue, 18 Jul 2023 13:17:19 -0700 Subject: [PATCH 25/42] Revert "[BACKEND] Update yt-dlp to latest commit (#655)" (#656) This reverts commit 3cbd07c9a4e0da81f129b8f30cfe4759a53ffb40. --- docker/Dockerfile | 2 -- docker/Dockerfile.ubuntu | 2 -- setup.cfg | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 6f6dc28d..ad0bed55 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -8,7 +8,6 @@ RUN mkdir -p /config && \ apk update --no-cache && \ apk upgrade --no-cache && \ apk add --no-cache --repository=http://dl-3.alpinelinux.org/alpine/edge/main/ \ - git \ vim \ g++ \ nano \ @@ -38,7 +37,6 @@ RUN mkdir -p /config && \ # Delete unneeded packages after install rm ytdl_sub-*.whl && \ apk del \ - git \ g++ \ make \ py3-pip \ diff --git a/docker/Dockerfile.ubuntu b/docker/Dockerfile.ubuntu index 4558abe5..798e07a3 100644 --- a/docker/Dockerfile.ubuntu +++ b/docker/Dockerfile.ubuntu @@ -19,7 +19,6 @@ RUN mkdir -p /config && \ apt-get -y update && \ apt-get -y upgrade && \ apt-get install --no-install-recommends -y \ - git \ vim \ g++ \ nano \ @@ -68,7 +67,6 @@ RUN mkdir -p /config && \ # Delete unneeded packages after install rm ytdl_sub-*.whl && \ apt-get remove -y \ - git \ g++ \ make \ xz-utils \ diff --git a/setup.cfg b/setup.cfg index 97ba5e01..7bc55744 100644 --- a/setup.cfg +++ b/setup.cfg @@ -27,12 +27,12 @@ package_dir = packages=find: install_requires = + yt-dlp==2023.7.6 argparse==1.4.0 colorama==0.4.6 mergedeep==1.3.4 mediafile==0.12.0 PyYAML==5.3.1 - yt-dlp@git+https://github.com/yt-dlp/yt-dlp@613dbce177d34ffc31053e8e01acf4bb107bcd1e [options.package_data] * = *.yaml From d8a64ca82c0db689f80d3aa6a452ebd8de4f95da Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 24 Jul 2023 09:36:38 -0700 Subject: [PATCH 26/42] [DOCKER] Use official phantomjs package, fix system pip install (#658) --- docker/Dockerfile | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index ad0bed55..d928c0fd 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -3,6 +3,9 @@ FROM ghcr.io/linuxserver/baseimage-alpine:edge ############################################################################### # YTDL-SUB INSTALL +# Needed for phantomjs +ENV OPENSSL_CONF="/etc/ssl" + COPY root/ / RUN mkdir -p /config && \ apk update --no-cache && \ @@ -24,15 +27,19 @@ RUN mkdir -p /config && \ aria2c --version && \ # Install phantomjs if using x86_64, ensure it is properly installed if [[ $(uname -m) == "x86_64" ]]; then \ + apk add --no-cache gcompat && \ cd /usr/share && \ - curl -L https://github.com/Overbryd/docker-phantomjs-alpine/releases/download/2.11/phantomjs-alpine-x86_64.tar.bz2 | tar xj && \ - ln -s /usr/share/phantomjs/phantomjs /usr/bin/phantomjs && \ + curl -L https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 | tar xj && \ + mv /usr/share/phantomjs-2.1.1-linux-x86_64/bin/phantomjs phantomjs && \ + rm -rf /usr/share/phantomjs-2.1.1-linux-x86_64 && \ + ln -s /usr/share/phantomjs /usr/bin/phantomjs && \ echo "Phantom JS version:" && \ phantomjs --version && \ cd -; \ fi && \ + echo "hi" && \ # Install ytdl-sub, ensure it is installed properly - python3 -m pip install --no-cache-dir ytdl_sub-*.whl && \ + python3 -m pip install --break-system-packages --no-cache-dir ytdl_sub-*.whl && \ ytdl-sub -h && \ # Delete unneeded packages after install rm ytdl_sub-*.whl && \ From 3404ed9cc5b212d5d37b4be99725b8f5adb4743d Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 24 Jul 2023 10:12:20 -0700 Subject: [PATCH 27/42] [DOCKER][BUGFIX] Use `PUID`/`PGID` to chown `/config` dir (#644) * [DOCKER][BUGFIX] Use `PUID`/`PGID` to chown `/config` dir * lint --- docker/root/etc/cont-init.d/30-config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/root/etc/cont-init.d/30-config b/docker/root/etc/cont-init.d/30-config index 9fd18e67..ed02409a 100644 --- a/docker/root/etc/cont-init.d/30-config +++ b/docker/root/etc/cont-init.d/30-config @@ -9,5 +9,5 @@ cp -R /defaults/examples /config/ # permissions -chown -R abc:abc \ +chown -R ${PUID:-abc}:${PGID:-abc} \ /config From 7e997f304d1e9813934164fd6cf49af7c126b670 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 24 Jul 2023 10:12:38 -0700 Subject: [PATCH 28/42] [REFACTOR] OptionsValidator + OptionsDictValidator (#657) * [REFACTOR] OptionsValidator + OptionsDictValidator * more --- src/ytdl_sub/config/preset.py | 8 ++++---- src/ytdl_sub/config/preset_options.py | 7 ++++++- src/ytdl_sub/downloaders/base_downloader.py | 4 ++-- src/ytdl_sub/downloaders/url/validators.py | 4 ++-- src/ytdl_sub/plugins/audio_extract.py | 4 ++-- src/ytdl_sub/plugins/chapters.py | 4 ++-- src/ytdl_sub/plugins/date_range.py | 4 ++-- src/ytdl_sub/plugins/file_convert.py | 4 ++-- src/ytdl_sub/plugins/internal/view.py | 4 ++-- src/ytdl_sub/plugins/match_filters.py | 4 ++-- src/ytdl_sub/plugins/music_tags.py | 4 ++-- src/ytdl_sub/plugins/nfo_tags.py | 4 ++-- src/ytdl_sub/plugins/plugin.py | 3 +-- src/ytdl_sub/plugins/regex.py | 4 ++-- src/ytdl_sub/plugins/split_by_chapters.py | 4 ++-- src/ytdl_sub/plugins/subtitles.py | 4 ++-- src/ytdl_sub/plugins/video_tags.py | 4 ++-- 17 files changed, 39 insertions(+), 35 deletions(-) diff --git a/src/ytdl_sub/config/preset.py b/src/ytdl_sub/config/preset.py index 5b8b107c..44d7b66d 100644 --- a/src/ytdl_sub/config/preset.py +++ b/src/ytdl_sub/config/preset.py @@ -13,6 +13,7 @@ from mergedeep import mergedeep from ytdl_sub.config.config_validator import ConfigValidator from ytdl_sub.config.preset_class_mappings import DownloadStrategyMapping from ytdl_sub.config.preset_class_mappings import PluginMapping +from ytdl_sub.config.preset_options import OptionsValidator from ytdl_sub.config.preset_options import OutputOptions from ytdl_sub.config.preset_options import Overrides from ytdl_sub.config.preset_options import YTDLOptions @@ -20,7 +21,6 @@ from ytdl_sub.downloaders.base_downloader import BaseDownloader from ytdl_sub.downloaders.base_downloader import BaseDownloaderValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.plugins.plugin import PluginOptionsT from ytdl_sub.prebuilt_presets import PREBUILT_PRESET_NAMES from ytdl_sub.prebuilt_presets import PUBLISHED_PRESET_NAMES @@ -67,9 +67,9 @@ def _parent_preset_error_message( class PresetPlugins: def __init__(self): self.plugin_types: List[Type[Plugin]] = [] - self.plugin_options: List[PluginOptions] = [] + self.plugin_options: List[OptionsValidator] = [] - def add(self, plugin_type: Type[Plugin], plugin_options: PluginOptions) -> "PresetPlugins": + def add(self, plugin_type: Type[Plugin], plugin_options: OptionsValidator) -> "PresetPlugins": """ Add a pair of plugin type and options to the list """ @@ -77,7 +77,7 @@ class PresetPlugins: self.plugin_options.append(plugin_options) return self - def zipped(self) -> Iterable[Tuple[Type[Plugin], PluginOptions]]: + def zipped(self) -> Iterable[Tuple[Type[Plugin], OptionsValidator]]: """ Returns ------- diff --git a/src/ytdl_sub/config/preset_options.py b/src/ytdl_sub/config/preset_options.py index 72f1b281..d9ba7f9c 100644 --- a/src/ytdl_sub/config/preset_options.py +++ b/src/ytdl_sub/config/preset_options.py @@ -18,11 +18,12 @@ from ytdl_sub.validators.string_formatter_validators import OverridesStringForma from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator from ytdl_sub.validators.validators import BoolValidator from ytdl_sub.validators.validators import LiteralDictValidator +from ytdl_sub.validators.validators import Validator # pylint: disable=no-self-use # pylint: disable=unused-argument -class OptionsValidator(StrictDictValidator, ABC): +class OptionsValidator(Validator, ABC): """ Abstract class that validates options for preset sections (plugins, downloaders) """ @@ -70,6 +71,10 @@ class OptionsValidator(StrictDictValidator, ABC): return None +class OptionsDictValidator(StrictDictValidator, OptionsValidator, ABC): + pass + + # pylint: enable=no-self-use # pylint: enable=unused-argument diff --git a/src/ytdl_sub/downloaders/base_downloader.py b/src/ytdl_sub/downloaders/base_downloader.py index 73759af0..dd105fb7 100644 --- a/src/ytdl_sub/downloaders/base_downloader.py +++ b/src/ytdl_sub/downloaders/base_downloader.py @@ -6,7 +6,7 @@ from typing import List from typing import Type from typing import TypeVar -from ytdl_sub.config.preset_options import OptionsValidator +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.config.preset_options import Overrides from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry @@ -14,7 +14,7 @@ from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.ytdl_additions.enhanced_download_archive import DownloadArchiver from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive -BaseDownloaderValidator = OptionsValidator +BaseDownloaderValidator = OptionsDictValidator BaseDownloaderOptionsT = TypeVar("BaseDownloaderOptionsT", bound=BaseDownloaderValidator) diff --git a/src/ytdl_sub/downloaders/url/validators.py b/src/ytdl_sub/downloaders/url/validators.py index 52e5f367..53486117 100644 --- a/src/ytdl_sub/downloaders/url/validators.py +++ b/src/ytdl_sub/downloaders/url/validators.py @@ -3,7 +3,7 @@ from typing import Dict from typing import List from typing import Optional -from ytdl_sub.config.preset_options import OptionsValidator +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.validators.strict_dict_validator import StrictDictValidator from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator from ytdl_sub.validators.string_formatter_validators import OverridesStringFormatterValidator @@ -172,7 +172,7 @@ class UrlListValidator(ListValidator[UrlValidator]): collection_variables[var] = added_variables[var] -class MultiUrlValidator(OptionsValidator): +class MultiUrlValidator(OptionsDictValidator): """ Downloads from multiple URLs. If an entry is returned from more than one URL, it will resolve to the bottom-most URL settings. diff --git a/src/ytdl_sub/plugins/audio_extract.py b/src/ytdl_sub/plugins/audio_extract.py index 0840a37d..de4b2058 100644 --- a/src/ytdl_sub/plugins/audio_extract.py +++ b/src/ytdl_sub/plugins/audio_extract.py @@ -3,17 +3,17 @@ from typing import Any from typing import Dict from typing import Optional +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.utils.exceptions import FileNotDownloadedException from ytdl_sub.validators.audo_codec_validator import AUDIO_CODEC_TYPES_EXTENSION_MAPPING from ytdl_sub.validators.audo_codec_validator import AudioTypeValidator from ytdl_sub.validators.validators import FloatValidator -class AudioExtractOptions(PluginOptions): +class AudioExtractOptions(OptionsDictValidator): """ Extracts audio from a video file. diff --git a/src/ytdl_sub/plugins/chapters.py b/src/ytdl_sub/plugins/chapters.py index 2385b8a9..03928f68 100644 --- a/src/ytdl_sub/plugins/chapters.py +++ b/src/ytdl_sub/plugins/chapters.py @@ -5,12 +5,12 @@ from typing import List from typing import Optional from typing import Set +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry from ytdl_sub.entries.variables.kwargs import COMMENTS from ytdl_sub.entries.variables.kwargs import YTDL_SUB_CUSTOM_CHAPTERS from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.utils.chapters import Chapters from ytdl_sub.utils.ffmpeg import set_ffmpeg_metadata_chapters from ytdl_sub.utils.file_handler import FileMetadata @@ -58,7 +58,7 @@ class SponsorBlockCategoryListValidator(ListValidator[SponsorBlockCategoriesVali _inner_list_type = SponsorBlockCategoriesValidator -class ChaptersOptions(PluginOptions): +class ChaptersOptions(OptionsDictValidator): """ Embeds chapters to video files if they are present. Additional options to add SponsorBlock chapters and remove specific ones. Can also remove chapters using regex. diff --git a/src/ytdl_sub/plugins/date_range.py b/src/ytdl_sub/plugins/date_range.py index d86f5c2d..fb18d892 100644 --- a/src/ytdl_sub/plugins/date_range.py +++ b/src/ytdl_sub/plugins/date_range.py @@ -1,14 +1,14 @@ from typing import Dict from typing import Optional +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.utils.datetime import to_date_range from ytdl_sub.validators.string_datetime import StringDatetimeValidator -class DateRangeOptions(PluginOptions): +class DateRangeOptions(OptionsDictValidator): """ Only download files uploaded within the specified date range. diff --git a/src/ytdl_sub/plugins/file_convert.py b/src/ytdl_sub/plugins/file_convert.py index 3ae1ebcb..86c4a303 100644 --- a/src/ytdl_sub/plugins/file_convert.py +++ b/src/ytdl_sub/plugins/file_convert.py @@ -3,10 +3,10 @@ from typing import Any from typing import Dict from typing import Optional +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.entries.variables.kwargs import EXT from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.plugins.plugin import PluginPriority from ytdl_sub.utils.exceptions import FileNotDownloadedException from ytdl_sub.utils.exceptions import ValidationException @@ -22,7 +22,7 @@ class FileConvertWithValidator(StringSelectValidator): _select_values = {"yt-dlp", "ffmpeg"} -class FileConvertOptions(PluginOptions): +class FileConvertOptions(OptionsDictValidator): """ Converts video files from one extension to another. diff --git a/src/ytdl_sub/plugins/internal/view.py b/src/ytdl_sub/plugins/internal/view.py index 66bef3e5..ff7946f7 100644 --- a/src/ytdl_sub/plugins/internal/view.py +++ b/src/ytdl_sub/plugins/internal/view.py @@ -1,17 +1,17 @@ import copy from typing import Optional +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.config.preset_options import Overrides from ytdl_sub.entries.entry import Entry from ytdl_sub.plugins.output_directory_nfo_tags import OutputDirectoryNfoTagsOptions from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.plugins.plugin import PluginPriority from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive -class ViewOptions(PluginOptions): +class ViewOptions(OptionsDictValidator): """ INTERNAL PLUGIN. Do not expose in documentation """ diff --git a/src/ytdl_sub/plugins/match_filters.py b/src/ytdl_sub/plugins/match_filters.py index ef7f2a47..8dd3ce5c 100644 --- a/src/ytdl_sub/plugins/match_filters.py +++ b/src/ytdl_sub/plugins/match_filters.py @@ -5,10 +5,10 @@ from typing import Optional from yt_dlp import match_filter_func +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.entries.variables.kwargs import YTDL_SUB_MATCH_FILTER_REJECT from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.plugins.plugin import PluginPriority from ytdl_sub.utils.logger import Logger from ytdl_sub.validators.validators import StringListValidator @@ -16,7 +16,7 @@ from ytdl_sub.validators.validators import StringListValidator logger = Logger.get("match_filters") -class MatchFiltersOptions(PluginOptions): +class MatchFiltersOptions(OptionsDictValidator): """ Set ``--match-filters``` to pass into yt-dlp to filter entries from being downloaded. Uses the same syntax as yt-dlp. diff --git a/src/ytdl_sub/plugins/music_tags.py b/src/ytdl_sub/plugins/music_tags.py index 90b7889a..97280bd6 100644 --- a/src/ytdl_sub/plugins/music_tags.py +++ b/src/ytdl_sub/plugins/music_tags.py @@ -5,9 +5,9 @@ from typing import List import mediafile +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.utils.logger import Logger from ytdl_sub.utils.thumbnail import convert_download_thumbnail @@ -45,7 +45,7 @@ class MusicTagsValidator(StrictDictValidator): return self._tags -class MusicTagsOptions(PluginOptions): +class MusicTagsOptions(OptionsDictValidator): """ Adds tags to every download audio file using `MediaFile `_, diff --git a/src/ytdl_sub/plugins/nfo_tags.py b/src/ytdl_sub/plugins/nfo_tags.py index 395cc3f2..d76bf5c6 100644 --- a/src/ytdl_sub/plugins/nfo_tags.py +++ b/src/ytdl_sub/plugins/nfo_tags.py @@ -7,9 +7,9 @@ from typing import Dict from typing import List from typing import Optional +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.utils.xml import XmlElement @@ -23,7 +23,7 @@ from ytdl_sub.validators.string_formatter_validators import StringFormatterValid from ytdl_sub.validators.validators import BoolValidator -class SharedNfoTagsOptions(PluginOptions): +class SharedNfoTagsOptions(OptionsDictValidator): """ Shared code between NFO tags and Ouptut Directory NFO Tags """ diff --git a/src/ytdl_sub/plugins/plugin.py b/src/ytdl_sub/plugins/plugin.py index 35488dfd..5f5ec03c 100644 --- a/src/ytdl_sub/plugins/plugin.py +++ b/src/ytdl_sub/plugins/plugin.py @@ -40,8 +40,7 @@ class PluginPriority: return self.modify_entry >= PluginPriority.MODIFY_ENTRY_AFTER_SPLIT -PluginOptions = OptionsValidator -PluginOptionsT = TypeVar("PluginOptionsT", bound=PluginOptions) +PluginOptionsT = TypeVar("PluginOptionsT", bound=OptionsValidator) class Plugin(DownloadArchiver, Generic[PluginOptionsT], ABC): diff --git a/src/ytdl_sub/plugins/regex.py b/src/ytdl_sub/plugins/regex.py index 39485c10..fcafd258 100644 --- a/src/ytdl_sub/plugins/regex.py +++ b/src/ytdl_sub/plugins/regex.py @@ -5,10 +5,10 @@ from typing import Optional from yt_dlp.utils import sanitize_filename +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.entries.variables.kwargs import YTDL_SUB_REGEX_SOURCE_VARS from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.plugins.plugin import PluginPriority from ytdl_sub.utils.exceptions import RegexNoMatchException from ytdl_sub.utils.exceptions import StringFormattingVariableNotFoundException @@ -121,7 +121,7 @@ class FromSourceVariablesRegex(StrictDictValidator): } -class RegexOptions(PluginOptions): +class RegexOptions(OptionsDictValidator): r""" Performs regex matching on an entry's source or override variables. Regex can be used to filter entries from proceeding with download or capture groups to create new source variables. NOTE to diff --git a/src/ytdl_sub/plugins/split_by_chapters.py b/src/ytdl_sub/plugins/split_by_chapters.py index 201d02de..63fbb11f 100644 --- a/src/ytdl_sub/plugins/split_by_chapters.py +++ b/src/ytdl_sub/plugins/split_by_chapters.py @@ -8,13 +8,13 @@ from typing import Tuple from yt_dlp.utils import sanitize_filename +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.entries.variables.kwargs import CHAPTERS from ytdl_sub.entries.variables.kwargs import SPLIT_BY_CHAPTERS_PARENT_ENTRY from ytdl_sub.entries.variables.kwargs import SPONSORBLOCK_CHAPTERS from ytdl_sub.entries.variables.kwargs import UID from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.utils.chapters import Chapters from ytdl_sub.utils.chapters import Timestamp from ytdl_sub.utils.exceptions import ValidationException @@ -47,7 +47,7 @@ class WhenNoChaptersValidator(StringSelectValidator): _select_values = {"pass", "drop", "error"} -class SplitByChaptersOptions(PluginOptions): +class SplitByChaptersOptions(OptionsDictValidator): """ Splits a file by chapters into multiple files. Each file becomes its own entry with the new source variables ``chapter_title``, ``chapter_title_sanitized``, ``chapter_index``, diff --git a/src/ytdl_sub/plugins/subtitles.py b/src/ytdl_sub/plugins/subtitles.py index 782361c5..03097863 100644 --- a/src/ytdl_sub/plugins/subtitles.py +++ b/src/ytdl_sub/plugins/subtitles.py @@ -3,10 +3,10 @@ from typing import Dict from typing import List from typing import Optional +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.utils.logger import Logger @@ -25,7 +25,7 @@ class SubtitlesTypeValidator(StringSelectValidator): _select_values = SUBTITLE_EXTENSIONS -class SubtitleOptions(PluginOptions): +class SubtitleOptions(OptionsDictValidator): """ Defines how to download and store subtitles. Using this plugin creates two new variables: ``lang`` and ``subtitles_ext``. ``lang`` is dynamic since you can download multiple subtitles. diff --git a/src/ytdl_sub/plugins/video_tags.py b/src/ytdl_sub/plugins/video_tags.py index e1fb85a4..fc5366f6 100644 --- a/src/ytdl_sub/plugins/video_tags.py +++ b/src/ytdl_sub/plugins/video_tags.py @@ -1,15 +1,15 @@ from typing import Any from typing import Dict +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptions from ytdl_sub.utils.ffmpeg import add_ffmpeg_metadata_key_values from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator -class VideoTagsOptions(PluginOptions): +class VideoTagsOptions(OptionsDictValidator): """ Adds tags to every downloaded video file using ffmpeg ``-metadata key=value`` args. From 0cbd2af4d32536c02d7df0528644dc9c7ffb42eb Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 24 Jul 2023 12:07:36 -0700 Subject: [PATCH 29/42] [FEATURE] `embed_thumbnail` plugin (#659) * [REFACTOR] OptionsValidator + OptionsDictValidator * more * [FEATURE] Dedicated embed_thumbnail plugin * tests * fix test * docs * deprecation notices * priority to run after file convert * naming * fixtures --- docs/config.rst | 11 +- docs/deprecation_notices.rst | 25 +++++ docs/index.rst | 1 + src/ytdl_sub/config/preset_class_mappings.py | 2 + src/ytdl_sub/plugins/embed_thumbnail.py | 102 ++++++++++++++++++ src/ytdl_sub/plugins/music_tags.py | 7 +- src/ytdl_sub/plugins/plugin.py | 3 + tests/e2e/plugins/test_audio_extract.py | 2 + tests/e2e/youtube/test_video.py | 2 + .../youtube/test_video.json | 4 +- .../youtube/test_video_cli.json | 4 +- .../plugins/test_audio_extract_single.txt | 1 + .../youtube/test_video.txt | 1 + .../youtube/test_video_cli.txt | 1 + tests/unit/config/test_config_file.py | 6 +- 15 files changed, 164 insertions(+), 8 deletions(-) create mode 100644 docs/deprecation_notices.rst create mode 100644 src/ytdl_sub/plugins/embed_thumbnail.py diff --git a/docs/config.rst b/docs/config.rst index 99ce10cc..adb05693 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -165,6 +165,15 @@ date_range :member-order: bysource :exclude-members: partial_validate +------------------------------------------------------------------------------- + +embed_thumbnail +'''''''''''''''' + +.. autoclass:: ytdl_sub.plugins.embed_thumbnail.EmbedThumbnailOptions() + +------------------------------------------------------------------------------- + file_convert '''''''''''' .. autoclass:: ytdl_sub.plugins.file_convert.FileConvertOptions() @@ -186,7 +195,7 @@ music_tags '''''''''' .. autoclass:: ytdl_sub.plugins.music_tags.MusicTagsOptions() :members: - :exclude-members: partial_validate + :exclude-members: partial_validate, embed_thumbnail ------------------------------------------------------------------------------- diff --git a/docs/deprecation_notices.rst b/docs/deprecation_notices.rst new file mode 100644 index 00000000..2a05181c --- /dev/null +++ b/docs/deprecation_notices.rst @@ -0,0 +1,25 @@ +Deprecation Notices +=================== + +July 2023 +--------- + +embed_thumbnail +^^^^^^^^^^^^^^^ + +Embedding thumbnails has its own dedicated plugin now, which supports both audio and video files. +It will be removed from ``music_tags`` in October 2023. Convert from: + +.. code-block:: yaml + + my_example_preset: + music_tags: + embed_thumbnail: True + +To the following: + +.. code-block:: yaml + + my_example_preset: + embed_thumbnail: True + diff --git a/docs/index.rst b/docs/index.rst index 7974add8..1ef6df9f 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -26,3 +26,4 @@ Contents getting_started presets config + deprecation_notices diff --git a/src/ytdl_sub/config/preset_class_mappings.py b/src/ytdl_sub/config/preset_class_mappings.py index dac9e996..a77e4988 100644 --- a/src/ytdl_sub/config/preset_class_mappings.py +++ b/src/ytdl_sub/config/preset_class_mappings.py @@ -8,6 +8,7 @@ from ytdl_sub.downloaders.url.url import UrlDownloader from ytdl_sub.plugins.audio_extract import AudioExtractPlugin from ytdl_sub.plugins.chapters import ChaptersPlugin from ytdl_sub.plugins.date_range import DateRangePlugin +from ytdl_sub.plugins.embed_thumbnail import EmbedThumbnailPlugin from ytdl_sub.plugins.file_convert import FileConvertPlugin from ytdl_sub.plugins.internal.view import ViewPlugin from ytdl_sub.plugins.match_filters import MatchFiltersPlugin @@ -107,6 +108,7 @@ class PluginMapping: "_view": ViewPlugin, "audio_extract": AudioExtractPlugin, "date_range": DateRangePlugin, + "embed_thumbnail": EmbedThumbnailPlugin, "file_convert": FileConvertPlugin, "match_filters": MatchFiltersPlugin, "music_tags": MusicTagsPlugin, diff --git a/src/ytdl_sub/plugins/embed_thumbnail.py b/src/ytdl_sub/plugins/embed_thumbnail.py new file mode 100644 index 00000000..fac7e050 --- /dev/null +++ b/src/ytdl_sub/plugins/embed_thumbnail.py @@ -0,0 +1,102 @@ +from typing import List +from typing import Optional + +import mediafile + +from ytdl_sub.config.preset_options import OptionsValidator +from ytdl_sub.entries.entry import Entry +from ytdl_sub.plugins.plugin import Plugin +from ytdl_sub.plugins.plugin import PluginPriority +from ytdl_sub.utils.ffmpeg import FFMPEG +from ytdl_sub.utils.file_handler import FileHandler +from ytdl_sub.utils.file_handler import FileMetadata +from ytdl_sub.utils.logger import Logger +from ytdl_sub.utils.thumbnail import convert_download_thumbnail +from ytdl_sub.validators.audo_codec_validator import AUDIO_CODEC_EXTS +from ytdl_sub.validators.validators import BoolValidator + +logger = Logger.get("embed_thumbnail") + + +class EmbedThumbnailOptions(BoolValidator, OptionsValidator): + """ + Whether to embed thumbnails to the audio/video file or not. + + Usage: + + .. code-block:: yaml + + presets: + my_example_preset: + embed_thumbnail: True + """ + + +class EmbedThumbnailPlugin(Plugin[EmbedThumbnailOptions]): + plugin_options_type = EmbedThumbnailOptions + priority = PluginPriority(post_process=PluginPriority.POST_PROCESS_AFTER_FILE_CONVERT) + + @property + def _embed_thumbnail(self) -> bool: + return self.plugin_options.value + + @classmethod + def _embed_video_thumbnail(cls, entry: Entry) -> None: + file_path = entry.get_download_file_path() + thumbnail_path = entry.get_download_thumbnail_path() + tmp_file_path = FFMPEG.tmp_file_path(file_path) + try: + ffmpeg_args: List[str] = [ + "-i", + file_path, + "-i", + thumbnail_path, + "-map", + "1", + "-map", + "0", + "-dn", # ignore data streams + "-c", + "copy", + "-bitexact", # for reproducibility + "-disposition:0", + "attached_pic", + tmp_file_path, + ] + FFMPEG.run(ffmpeg_args) + FileHandler.move(tmp_file_path, file_path) + finally: + FileHandler.delete(tmp_file_path) + + @classmethod + def _embed_audio_file(cls, entry: Entry) -> None: + audio_file = mediafile.MediaFile(entry.get_download_file_path()) + with open(entry.get_download_thumbnail_path(), "rb") as thumb: + mediafile_img = mediafile.Image( + data=thumb.read(), desc="cover", type=mediafile.ImageType.front + ) + + audio_file.images = [mediafile_img] + audio_file.save() + + def post_process_entry(self, entry: Entry) -> Optional[FileMetadata]: + """ + Maybe embed the thumbnail + """ + if not self._embed_thumbnail: + return None + + if entry.ext == "webm": + logger.warning("webm does not support embedded thumbnails, skipping") + return None + + if not self.is_dry_run: + # convert the entry thumbnail so it is embedded as jpg + convert_download_thumbnail(entry=entry) + + if entry.ext in AUDIO_CODEC_EXTS: + self._embed_audio_file(entry) + else: + self._embed_video_thumbnail(entry) + + return FileMetadata("Embedded thumbnail") diff --git a/src/ytdl_sub/plugins/music_tags.py b/src/ytdl_sub/plugins/music_tags.py index 97280bd6..4f671d26 100644 --- a/src/ytdl_sub/plugins/music_tags.py +++ b/src/ytdl_sub/plugins/music_tags.py @@ -70,8 +70,6 @@ class MusicTagsOptions(OptionsDictValidator): albumartists: - "{artist}" - "ytdl-sub" - # Optional - embed_thumbnail: False """ _required_keys = {"tags"} @@ -149,6 +147,11 @@ class MusicTagsPlugin(Plugin[MusicTagsOptions]): setattr(audio_file, tag_name, tag_value[0]) if self.plugin_options.embed_thumbnail: + logger.warning( + "music_tags.embed_thumbnail is now deprecated. Use the dedicated " + "embed_thumbnail plugin instead. This will be removed in October of 2023." + ) + # convert the entry thumbnail so it is embedded as jpg convert_download_thumbnail(entry=entry) diff --git a/src/ytdl_sub/plugins/plugin.py b/src/ytdl_sub/plugins/plugin.py index 5f5ec03c..630f2270 100644 --- a/src/ytdl_sub/plugins/plugin.py +++ b/src/ytdl_sub/plugins/plugin.py @@ -24,6 +24,9 @@ class PluginPriority: # If modify_entry priority is >= to this value, run after split MODIFY_ENTRY_AFTER_SPLIT = 10 + # if post_process is >= to this value, run after file_convert + POST_PROCESS_AFTER_FILE_CONVERT = 10 + MODIFY_ENTRY_FIRST = 0 def __init__(self, modify_entry: int = 5, post_process: int = 5): diff --git a/tests/e2e/plugins/test_audio_extract.py b/tests/e2e/plugins/test_audio_extract.py index 1a3563c7..48aeb9d0 100644 --- a/tests/e2e/plugins/test_audio_extract.py +++ b/tests/e2e/plugins/test_audio_extract.py @@ -11,6 +11,8 @@ def single_song_preset_dict(output_directory): "preset": "single", # test multi-tags "music_tags": {"embed_thumbnail": True, "tags": {"genres": ["multi_tag_1", "multi_tag_2"]}}, + # test the new embed_thumbnail plugin + "embed_thumbnail": True, # download the worst format so it is fast "ytdl_options": { "format": "worst[ext=mp4]", diff --git a/tests/e2e/youtube/test_video.py b/tests/e2e/youtube/test_video.py index e7a1f2f6..3219692d 100644 --- a/tests/e2e/youtube/test_video.py +++ b/tests/e2e/youtube/test_video.py @@ -17,6 +17,8 @@ def single_video_preset_dict(output_directory): "output_directory": output_directory, "maintain_download_archive": False, }, + # embed thumb into the video + "embed_thumbnail": True, # download the worst format so it is fast "ytdl_options": { "format": "worst[ext=mp4]", diff --git a/tests/resources/expected_downloads_summaries/youtube/test_video.json b/tests/resources/expected_downloads_summaries/youtube/test_video.json index f7d75ddc..bdf3a223 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_video.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_video.json @@ -1,6 +1,6 @@ { "JMC/JMC - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e", - "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "73dd7eb872fe150364581de40a66777d", - "JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2", + "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "08b0f7d93488d625bd7311ab925cec77", + "JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "797b44f3207be01651780d6d86cb70bb", "JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e" } \ No newline at end of file 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 27e58215..ba733bde 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_video_cli.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_video_cli.json @@ -1,6 +1,6 @@ { "JMC/JMC - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e", - "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "7ffe51eae87c1d6fd10151a366c9d207", - "JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2", + "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "ebb744c59a37dff5df6e33f926c8eebb", + "JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "797b44f3207be01651780d6d86cb70bb", "JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e" } \ No newline at end of file diff --git a/tests/resources/transaction_log_summaries/plugins/test_audio_extract_single.txt b/tests/resources/transaction_log_summaries/plugins/test_audio_extract_single.txt index 6327e106..5c9b995a 100644 --- a/tests/resources/transaction_log_summaries/plugins/test_audio_extract_single.txt +++ b/tests/resources/transaction_log_summaries/plugins/test_audio_extract_single.txt @@ -18,4 +18,5 @@ Files created: track: 1 tracktotal: 1 year: 2019 + Embedded thumbnail folder.jpg \ No newline at end of file diff --git a/tests/resources/transaction_log_summaries/youtube/test_video.txt b/tests/resources/transaction_log_summaries/youtube/test_video.txt index 8162ad7f..43da748f 100644 --- a/tests/resources/transaction_log_summaries/youtube/test_video.txt +++ b/tests/resources/transaction_log_summaries/youtube/test_video.txt @@ -6,6 +6,7 @@ Files created: JMC - Oblivion Mod "Falcor" p.1.mp4 Video Tags: title: Oblivion Mod "Falcor" p.1 + Embedded thumbnail JMC - Oblivion Mod "Falcor" p.1.nfo NFO tags: musicvideo: 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 8162ad7f..43da748f 100644 --- a/tests/resources/transaction_log_summaries/youtube/test_video_cli.txt +++ b/tests/resources/transaction_log_summaries/youtube/test_video_cli.txt @@ -6,6 +6,7 @@ Files created: JMC - Oblivion Mod "Falcor" p.1.mp4 Video Tags: title: Oblivion Mod "Falcor" p.1 + Embedded thumbnail JMC - Oblivion Mod "Falcor" p.1.nfo NFO tags: musicvideo: diff --git a/tests/unit/config/test_config_file.py b/tests/unit/config/test_config_file.py index 2bda9621..24de3269 100644 --- a/tests/unit/config/test_config_file.py +++ b/tests/unit/config/test_config_file.py @@ -51,7 +51,11 @@ class TestConfigFilePartiallyValidatesPresets: @pytest.mark.parametrize("plugin", PluginMapping.plugins()) def test_success__empty_plugins(self, plugin: str): - self._partial_validate({plugin: {}}) + excluded_plugins = [ + "embed_thumbnail", # value is bool, not dict + ] + if plugin not in excluded_plugins: + self._partial_validate({plugin: {}}) @pytest.mark.parametrize("source", DownloadStrategyMapping.sources()) def test_success__empty_sources(self, source: str): From cc38db9c7a5f4409ef3cb583e6012432d1a9b51d Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 24 Jul 2023 18:05:54 -0700 Subject: [PATCH 30/42] [FEATURE] Simplify ``music_tags`` plugin (#660) * [FEATURE] Simplify ``music_tags`` plugin * docs * more compatible * check old format better * better dict instantiate --- docs/config.rst | 2 - docs/deprecation_notices.rst | 13 +++-- examples/music_audio_config.yaml | 24 +++++---- src/ytdl_sub/plugins/music_tags.py | 50 +++++++++++-------- tests/e2e/plugins/test_audio_extract.py | 48 +++++++++++++++++- tests/e2e/plugins/test_music_tags.py | 2 +- .../plugins/test_audio_extract_single.json | 2 +- .../test_audio_extract_single_old_format.json | 5 ++ .../plugins/test_audio_extract_single.txt | 2 +- .../test_audio_extract_single_old_format.txt | 21 ++++++++ 10 files changed, 127 insertions(+), 42 deletions(-) create mode 100644 tests/resources/expected_downloads_summaries/plugins/test_audio_extract_single_old_format.json create mode 100644 tests/resources/transaction_log_summaries/plugins/test_audio_extract_single_old_format.txt diff --git a/docs/config.rst b/docs/config.rst index adb05693..273328e7 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -194,8 +194,6 @@ match_filters music_tags '''''''''' .. autoclass:: ytdl_sub.plugins.music_tags.MusicTagsOptions() - :members: - :exclude-members: partial_validate, embed_thumbnail ------------------------------------------------------------------------------- diff --git a/docs/deprecation_notices.rst b/docs/deprecation_notices.rst index 2a05181c..e9875915 100644 --- a/docs/deprecation_notices.rst +++ b/docs/deprecation_notices.rst @@ -4,17 +4,19 @@ Deprecation Notices July 2023 --------- -embed_thumbnail -^^^^^^^^^^^^^^^ +music_tags +^^^^^^^^^^ -Embedding thumbnails has its own dedicated plugin now, which supports both audio and video files. -It will be removed from ``music_tags`` in October 2023. Convert from: +Music tags is getting simplified. ``tags`` will now reside directly under music_tags, and +``embed_thumbnail`` is getting moved to its own plugin (supports video files as well). Convert from: .. code-block:: yaml my_example_preset: music_tags: embed_thumbnail: True + tags: + artist: "Elvis Presley" To the following: @@ -22,4 +24,7 @@ To the following: my_example_preset: embed_thumbnail: True + music_tags: + artist: "Elvis Presley" +The old format will be removed in October 2023. diff --git a/examples/music_audio_config.yaml b/examples/music_audio_config.yaml index 70bc40fb..b9b30bce 100644 --- a/examples/music_audio_config.yaml +++ b/examples/music_audio_config.yaml @@ -64,17 +64,19 @@ presets: # It is recommended to keep most of this as-is, and use override # variables to set them to be what you want. music_tags: - tags: - artist: "{track_artist}" - artists: "{track_artist}" - albumartist: "{track_artist}" - albumartists: "{track_artist}" - title: "{track_title}" - album: "{track_album}" - track: "{track_number}" - tracktotal: "{track_total}" - year: "{track_year}" - genre: "{track_genre}" + artist: "{track_artist}" + artists: "{track_artist}" + albumartist: "{track_artist}" + albumartists: "{track_artist}" + title: "{track_title}" + album: "{track_album}" + track: "{track_number}" + tracktotal: "{track_total}" + year: "{track_year}" + genre: "{track_genre}" + + # Optionally embed the thumbnail into the track + embed_thumbnail: False # For every configurable field, make it an override variable, # so we can carefully tune different use-cases by only modifying override variables. diff --git a/src/ytdl_sub/plugins/music_tags.py b/src/ytdl_sub/plugins/music_tags.py index 4f671d26..d5928567 100644 --- a/src/ytdl_sub/plugins/music_tags.py +++ b/src/ytdl_sub/plugins/music_tags.py @@ -1,3 +1,4 @@ +import copy from collections import defaultdict from typing import Any from typing import Dict @@ -65,32 +66,31 @@ class MusicTagsOptions(OptionsDictValidator): tags: artist: "{artist}" album: "{album}" - genre: "ytdl-sub" # Supports id3v2.4 multi-tags + genres: + - "{genre}" + - "ytdl-sub" albumartists: - "{artist}" - "ytdl-sub" """ - _required_keys = {"tags"} - _optional_keys = {"embed_thumbnail"} - - @classmethod - def partial_validate(cls, name: str, value: Any) -> None: - """ - Partially validate music tags - """ - if isinstance(value, dict): - value["tags"] = value.get("tags", {}) - _ = cls(name, value) + _optional_keys = {"tags", "embed_thumbnail"} + _allow_extra_keys = True def __init__(self, name, value): super().__init__(name, value) - self._tags = self._validate_key(key="tags", validator=MusicTagsValidator) self._embed_thumbnail = self._validate_key_if_present( - key="embed_thumbnail", validator=BoolValidator, default=False - ).value + key="embed_thumbnail", validator=BoolValidator + ) + + new_tags_dict: Dict[str, Any] = copy.deepcopy(value) + old_tags_dict = new_tags_dict.pop("tags", {}) + new_tags_dict.pop("embed_thumbnail", None) + + self._is_old_format = len(old_tags_dict) > 0 or self._embed_thumbnail is not None + self._tags = MusicTagsValidator(name=name, value=dict(old_tags_dict, **new_tags_dict)) @property def tags(self) -> MusicTagsValidator: @@ -105,7 +105,9 @@ class MusicTagsOptions(OptionsDictValidator): """ Optional. Whether to embed the thumbnail into the audio file. """ - return self._embed_thumbnail + if self._embed_thumbnail is None: + return False + return self._embed_thumbnail.value class MusicTagsPlugin(Plugin[MusicTagsOptions]): @@ -122,6 +124,18 @@ class MusicTagsPlugin(Plugin[MusicTagsOptions]): f"to audio using the audio_extract plugin." ) + # pylint: disable=protected-access + if self.plugin_options._is_old_format: + logger.warning( + "music_tags.tags is now deprecated. Place your tags directly under music_tags " + "instead. The old format will be removed in October of 2023." + ) + if self.plugin_options.embed_thumbnail: + logger.warning( + "music_tags.embed_thumbnail is also deprecated. Use the dedicated " + "embed_thumbnail plugin instead. This will be removed in October of 2023." + ) + # Resolve the tags into this dict tags_to_write: Dict[str, List[str]] = defaultdict(list) for tag_name, tag_formatters in self.plugin_options.tags.as_lists.items(): @@ -147,10 +161,6 @@ class MusicTagsPlugin(Plugin[MusicTagsOptions]): setattr(audio_file, tag_name, tag_value[0]) if self.plugin_options.embed_thumbnail: - logger.warning( - "music_tags.embed_thumbnail is now deprecated. Use the dedicated " - "embed_thumbnail plugin instead. This will be removed in October of 2023." - ) # convert the entry thumbnail so it is embedded as jpg convert_download_thumbnail(entry=entry) diff --git a/tests/e2e/plugins/test_audio_extract.py b/tests/e2e/plugins/test_audio_extract.py index 48aeb9d0..ef906929 100644 --- a/tests/e2e/plugins/test_audio_extract.py +++ b/tests/e2e/plugins/test_audio_extract.py @@ -6,11 +6,29 @@ from ytdl_sub.subscriptions.subscription import Subscription @pytest.fixture -def single_song_preset_dict(output_directory): +def single_song_preset_dict_old_format(output_directory): return { "preset": "single", # test multi-tags "music_tags": {"embed_thumbnail": True, "tags": {"genres": ["multi_tag_1", "multi_tag_2"]}}, + # download the worst format so it is fast + "ytdl_options": { + "format": "worst[ext=mp4]", + "postprocessor_args": {"ffmpeg": ["-bitexact"]}, # Must add this for reproducibility + }, + "overrides": { + "url": "https://www.youtube.com/watch?v=2lAe1cqCOXo", + "music_directory": output_directory, + }, + } + + +@pytest.fixture +def single_song_preset_dict(output_directory): + return { + "preset": "single", + # test multi-tags + "music_tags": {"genres": ["multi_tag_1", "multi_tag_2"]}, # test the new embed_thumbnail plugin "embed_thumbnail": True, # download the worst format so it is fast @@ -44,7 +62,33 @@ def multiple_songs_preset_dict(output_directory): class TestAudioExtract: @pytest.mark.parametrize("dry_run", [True, False]) - def test_audio_extract_single_song( + def test_audio_extract_single_song_old_format( + self, + music_audio_config, + single_song_preset_dict_old_format, + output_directory, + dry_run, + ): + subscription = Subscription.from_dict( + config=music_audio_config, + preset_name="single_song_test", + preset_dict=single_song_preset_dict_old_format, + ) + + transaction_log = subscription.download(dry_run=dry_run) + assert_transaction_log_matches( + output_directory=output_directory, + transaction_log=transaction_log, + transaction_log_summary_file_name="plugins/test_audio_extract_single_old_format.txt", + ) + assert_expected_downloads( + output_directory=output_directory, + dry_run=dry_run, + expected_download_summary_file_name="plugins/test_audio_extract_single_old_format.json", + ) + + @pytest.mark.parametrize("dry_run", [True, False]) + def test_audio_extract_single_song_new_format( self, music_audio_config, single_song_preset_dict, diff --git a/tests/e2e/plugins/test_music_tags.py b/tests/e2e/plugins/test_music_tags.py index 5538357b..702015ca 100644 --- a/tests/e2e/plugins/test_music_tags.py +++ b/tests/e2e/plugins/test_music_tags.py @@ -15,7 +15,7 @@ def single_song_video_dict(output_directory): }, "output_options": {"output_directory": output_directory, "file_name": "will_error.mp4"}, # test multi-tags - "music_tags": {"embed_thumbnail": True, "tags": {"genres": ["multi_tag_1", "multi_tag_2"]}}, + "music_tags": {"genres": ["multi_tag_1", "multi_tag_2"]}, # download the worst format so it is fast "ytdl_options": { "format": "worst[ext=mp4]", diff --git a/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_single.json b/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_single.json index f4aa6b67..2a4f44d8 100644 --- a/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_single.json +++ b/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_single.json @@ -1,5 +1,5 @@ { ".ytdl-sub-single_song_test-download-archive.json": "c8ff22ec3304c9f8dab18cedaed4e8b4", - "YouTube/[2019] YouTube Rewind 2019: For the Record | #YouTubeRewind/01 - YouTube Rewind 2019: For the Record | #YouTubeRewind.mp3": "37b38834eda1293ad503e00dcff7c4dc", + "YouTube/[2019] YouTube Rewind 2019: For the Record | #YouTubeRewind/01 - YouTube Rewind 2019: For the Record | #YouTubeRewind.mp3": "33c69b0dce605e9f78fe23246ce442dd", "YouTube/[2019] YouTube Rewind 2019: For the Record | #YouTubeRewind/folder.jpg": "50ee47c80f679029f5d3503bb91b045a" } \ No newline at end of file diff --git a/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_single_old_format.json b/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_single_old_format.json new file mode 100644 index 00000000..f4aa6b67 --- /dev/null +++ b/tests/resources/expected_downloads_summaries/plugins/test_audio_extract_single_old_format.json @@ -0,0 +1,5 @@ +{ + ".ytdl-sub-single_song_test-download-archive.json": "c8ff22ec3304c9f8dab18cedaed4e8b4", + "YouTube/[2019] YouTube Rewind 2019: For the Record | #YouTubeRewind/01 - YouTube Rewind 2019: For the Record | #YouTubeRewind.mp3": "37b38834eda1293ad503e00dcff7c4dc", + "YouTube/[2019] YouTube Rewind 2019: For the Record | #YouTubeRewind/folder.jpg": "50ee47c80f679029f5d3503bb91b045a" +} \ No newline at end of file diff --git a/tests/resources/transaction_log_summaries/plugins/test_audio_extract_single.txt b/tests/resources/transaction_log_summaries/plugins/test_audio_extract_single.txt index 5c9b995a..3a12643e 100644 --- a/tests/resources/transaction_log_summaries/plugins/test_audio_extract_single.txt +++ b/tests/resources/transaction_log_summaries/plugins/test_audio_extract_single.txt @@ -4,7 +4,7 @@ Files created: .ytdl-sub-single_song_test-download-archive.json {output_directory}/YouTube/[2019] YouTube Rewind 2019: For the Record | #YouTubeRewind 01 - YouTube Rewind 2019: For the Record | #YouTubeRewind.mp3 - Embedded Thumbnail, Music Tags: + Music Tags: album: YouTube Rewind 2019: For the Record | #YouTubeRewind albumartist: YouTube albumartists: YouTube diff --git a/tests/resources/transaction_log_summaries/plugins/test_audio_extract_single_old_format.txt b/tests/resources/transaction_log_summaries/plugins/test_audio_extract_single_old_format.txt new file mode 100644 index 00000000..6327e106 --- /dev/null +++ b/tests/resources/transaction_log_summaries/plugins/test_audio_extract_single_old_format.txt @@ -0,0 +1,21 @@ +Files created: +---------------------------------------- +{output_directory} + .ytdl-sub-single_song_test-download-archive.json +{output_directory}/YouTube/[2019] YouTube Rewind 2019: For the Record | #YouTubeRewind + 01 - YouTube Rewind 2019: For the Record | #YouTubeRewind.mp3 + Embedded Thumbnail, Music Tags: + album: YouTube Rewind 2019: For the Record | #YouTubeRewind + albumartist: YouTube + albumartists: YouTube + artist: YouTube + artists: YouTube + genre: Unset + genres: + - multi_tag_1 + - multi_tag_2 + title: YouTube Rewind 2019: For the Record | #YouTubeRewind + track: 1 + tracktotal: 1 + year: 2019 + folder.jpg \ No newline at end of file From 77487aee86ff8b80129f1a4df6c38e04f90f8cf9 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 24 Jul 2023 18:18:53 -0700 Subject: [PATCH 31/42] [FEATURE] Simplify ``video_tags`` (#661) * [FEATURE] Simplify ``video_tags`` * video tags old * change for episode * deprecation notice --- docs/config.rst | 2 - docs/deprecation_notices.rst | 23 ++++++++- src/ytdl_sub/plugins/video_tags.py | 28 ++++++++--- .../prebuilt_presets/tv_show/episode.yaml | 17 +++---- tests/e2e/youtube/test_video.py | 49 +++++++++++++++++-- 5 files changed, 98 insertions(+), 21 deletions(-) diff --git a/docs/config.rst b/docs/config.rst index 273328e7..71805d2d 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -248,8 +248,6 @@ subtitles video_tags '''''''''' .. autoclass:: ytdl_sub.plugins.video_tags.VideoTagsOptions() - :members: - :exclude-members: partial_validate ------------------------------------------------------------------------------- diff --git a/docs/deprecation_notices.rst b/docs/deprecation_notices.rst index e9875915..212beea0 100644 --- a/docs/deprecation_notices.rst +++ b/docs/deprecation_notices.rst @@ -7,7 +7,7 @@ July 2023 music_tags ^^^^^^^^^^ -Music tags is getting simplified. ``tags`` will now reside directly under music_tags, and +Music tags are getting simplified. ``tags`` will now reside directly under music_tags, and ``embed_thumbnail`` is getting moved to its own plugin (supports video files as well). Convert from: .. code-block:: yaml @@ -28,3 +28,24 @@ To the following: artist: "Elvis Presley" The old format will be removed in October 2023. + +video_tags +^^^^^^^^^^ + +Video tags are getting simplified as well. ``tags`` will now reside directly under video_tags. +Convert from: + +.. code-block:: yaml + + my_example_preset: + video_tags: + tags: + title: "Elvis Presley Documentary" + +To the following: + +.. code-block:: yaml + + my_example_preset: + video_tags: + title: "Elvis Presley Documentary" diff --git a/src/ytdl_sub/plugins/video_tags.py b/src/ytdl_sub/plugins/video_tags.py index fc5366f6..ebc4607d 100644 --- a/src/ytdl_sub/plugins/video_tags.py +++ b/src/ytdl_sub/plugins/video_tags.py @@ -1,3 +1,4 @@ +import copy from typing import Any from typing import Dict @@ -6,8 +7,11 @@ from ytdl_sub.entries.entry import Entry from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.utils.ffmpeg import add_ffmpeg_metadata_key_values from ytdl_sub.utils.file_handler import FileMetadata +from ytdl_sub.utils.logger import Logger from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator +logger = Logger.get("video_tags") + class VideoTagsOptions(OptionsDictValidator): """ @@ -20,13 +24,13 @@ class VideoTagsOptions(OptionsDictValidator): presets: my_example_preset: video_tags: - tags: - title: "{title}" - date: "{upload_date}" - description: "{description}" + title: "{title}" + date: "{upload_date}" + description: "{description}" """ - _required_keys = {"tags"} + _optional_keys = {"tags"} + _allow_extra_keys = True @classmethod def partial_validate(cls, name: str, value: Any) -> None: @@ -39,7 +43,12 @@ class VideoTagsOptions(OptionsDictValidator): def __init__(self, name, value): super().__init__(name, value) - self._tags = self._validate_key(key="tags", validator=DictFormatterValidator) + + new_tags_dict: Dict[str, Any] = copy.deepcopy(value) + old_tags_dict = new_tags_dict.pop("tags", {}) + + self._is_old_format = len(old_tags_dict) > 0 + self._tags = DictFormatterValidator(name=name, value=dict(old_tags_dict, **new_tags_dict)) @property def tags(self) -> DictFormatterValidator: @@ -56,6 +65,13 @@ class VideoTagsPlugin(Plugin[VideoTagsOptions]): """ Tags the entry's audio file using values defined in the metadata options """ + # pylint: disable=protected-access + if self.plugin_options._is_old_format: + logger.warning( + "video_tags.tags is now deprecated. Place your tags directly under video_tags " + "instead. The old format will be removed in October of 2023." + ) + tags_to_write: Dict[str, str] = {} for tag_name, tag_formatter in self.plugin_options.tags.dict.items(): tag_value = self.overrides.apply_formatter(formatter=tag_formatter, entry=entry) diff --git a/src/ytdl_sub/prebuilt_presets/tv_show/episode.yaml b/src/ytdl_sub/prebuilt_presets/tv_show/episode.yaml index c50ca842..2aec4ab5 100644 --- a/src/ytdl_sub/prebuilt_presets/tv_show/episode.yaml +++ b/src/ytdl_sub/prebuilt_presets/tv_show/episode.yaml @@ -38,15 +38,14 @@ presets: _episode_video_tags: video_tags: - tags: - show: "{tv_show_name}" - genre: "{tv_show_genre}" - episode_id: "{episode_number}" - title: "{episode_title}" - synopsis: "{episode_plot}" - year: "{episode_year}" - date: "{episode_date_standardized}" - contentRating: "{episode_content_rating}" + show: "{tv_show_name}" + genre: "{tv_show_genre}" + episode_id: "{episode_number}" + title: "{episode_title}" + synopsis: "{episode_plot}" + year: "{episode_year}" + date: "{episode_date_standardized}" + contentRating: "{episode_content_rating}" _episode_nfo_tags: nfo_tags: diff --git a/tests/e2e/youtube/test_video.py b/tests/e2e/youtube/test_video.py index 3219692d..7916eab4 100644 --- a/tests/e2e/youtube/test_video.py +++ b/tests/e2e/youtube/test_video.py @@ -7,6 +7,32 @@ from expected_transaction_log import assert_transaction_log_matches from ytdl_sub.subscriptions.subscription import Subscription +@pytest.fixture +def single_video_preset_dict_old_video_tags_format(output_directory): + return { + "preset": "music_video", + "download": {"url": "https://youtube.com/watch?v=HKTNxEqsN3Q"}, + # override the output directory with our fixture-generated dir + "output_options": { + "output_directory": output_directory, + "maintain_download_archive": False, + }, + # embed thumb into the video + "embed_thumbnail": True, + # download the worst format so it is fast + "ytdl_options": { + "format": "worst[ext=mp4]", + }, + # also test video tags + "video_tags": { + "tags": { + "title": "{title}", + } + }, + "overrides": {"artist": "JMC"}, + } + + @pytest.fixture def single_video_preset_dict(output_directory): return { @@ -25,9 +51,7 @@ def single_video_preset_dict(output_directory): }, # also test video tags "video_tags": { - "tags": { - "title": "{title}", - } + "title": "{title}", }, "overrides": {"artist": "JMC"}, } @@ -71,6 +95,25 @@ def single_video_preset_dict_dl_args(single_video_preset_dict): class TestYoutubeVideo: + def test_single_video_old_video_tags_format_download( + self, + music_video_config, + single_video_preset_dict_old_video_tags_format, + output_directory, + ): + single_video_subscription = Subscription.from_dict( + config=music_video_config, + preset_name="music_video_single_video_test", + preset_dict=single_video_preset_dict_old_video_tags_format, + ) + + transaction_log = single_video_subscription.download(dry_run=True) + assert_transaction_log_matches( + output_directory=output_directory, + transaction_log=transaction_log, + transaction_log_summary_file_name="youtube/test_video.txt", + ) + @pytest.mark.parametrize("dry_run", [True, False]) def test_single_video_download( self, From bb03c916564fb9cef3d084eaddc9d623b32a15fa Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Tue, 25 Jul 2023 00:10:54 -0700 Subject: [PATCH 32/42] [BACKEND] Links to deprecation (#662) --- src/ytdl_sub/plugins/music_tags.py | 4 +++- src/ytdl_sub/plugins/video_tags.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ytdl_sub/plugins/music_tags.py b/src/ytdl_sub/plugins/music_tags.py index d5928567..43974492 100644 --- a/src/ytdl_sub/plugins/music_tags.py +++ b/src/ytdl_sub/plugins/music_tags.py @@ -128,7 +128,9 @@ class MusicTagsPlugin(Plugin[MusicTagsOptions]): if self.plugin_options._is_old_format: logger.warning( "music_tags.tags is now deprecated. Place your tags directly under music_tags " - "instead. The old format will be removed in October of 2023." + "instead. The old format will be removed in October of 2023. See " + "https://ytdl-sub.readthedocs.io/en/latest/deprecation_notices.html#music-tags " + "for more details." ) if self.plugin_options.embed_thumbnail: logger.warning( diff --git a/src/ytdl_sub/plugins/video_tags.py b/src/ytdl_sub/plugins/video_tags.py index ebc4607d..02601f3b 100644 --- a/src/ytdl_sub/plugins/video_tags.py +++ b/src/ytdl_sub/plugins/video_tags.py @@ -69,7 +69,9 @@ class VideoTagsPlugin(Plugin[VideoTagsOptions]): if self.plugin_options._is_old_format: logger.warning( "video_tags.tags is now deprecated. Place your tags directly under video_tags " - "instead. The old format will be removed in October of 2023." + "instead. The old format will be removed in October of 2023. See " + "https://ytdl-sub.readthedocs.io/en/latest/deprecation_notices.html#video-tags " + "for more details." ) tags_to_write: Dict[str, str] = {} From dcd636192c75c75dfcc5a93d3dc9a631389f2572 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Tue, 25 Jul 2023 00:36:51 -0700 Subject: [PATCH 33/42] [REFACTOR] `download` abstraction overhaul (#663) * [REFACTOR] `download` abstraction overhaul * remove plugin options --- src/ytdl_sub/config/preset.py | 12 ++--- src/ytdl_sub/config/preset_options.py | 4 ++ src/ytdl_sub/downloaders/base_downloader.py | 19 ++++---- .../downloaders/downloader_validator.py | 45 +++++++++++++++++++ .../info_json/info_json_downloader.py | 7 ++- src/ytdl_sub/downloaders/url/downloader.py | 45 +++---------------- src/ytdl_sub/downloaders/url/multi_url.py | 2 +- src/ytdl_sub/downloaders/url/url.py | 2 +- src/ytdl_sub/plugins/plugin.py | 12 ++--- .../subscriptions/base_subscription.py | 4 +- 10 files changed, 79 insertions(+), 73 deletions(-) create mode 100644 src/ytdl_sub/downloaders/downloader_validator.py diff --git a/src/ytdl_sub/config/preset.py b/src/ytdl_sub/config/preset.py index 44d7b66d..45b4db69 100644 --- a/src/ytdl_sub/config/preset.py +++ b/src/ytdl_sub/config/preset.py @@ -16,12 +16,12 @@ from ytdl_sub.config.preset_class_mappings import PluginMapping from ytdl_sub.config.preset_options import OptionsValidator from ytdl_sub.config.preset_options import OutputOptions from ytdl_sub.config.preset_options import Overrides +from ytdl_sub.config.preset_options import TOptionsValidator from ytdl_sub.config.preset_options import YTDLOptions from ytdl_sub.downloaders.base_downloader import BaseDownloader -from ytdl_sub.downloaders.base_downloader import BaseDownloaderValidator +from ytdl_sub.downloaders.downloader_validator import DownloaderValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginOptionsT from ytdl_sub.prebuilt_presets import PREBUILT_PRESET_NAMES from ytdl_sub.prebuilt_presets import PUBLISHED_PRESET_NAMES from ytdl_sub.utils.exceptions import ValidationException @@ -85,7 +85,7 @@ class PresetPlugins: """ return zip(self.plugin_types, self.plugin_options) - def get(self, plugin_type: Type[PluginOptionsT]) -> Optional[PluginOptionsT]: + def get(self, plugin_type: Type[TOptionsValidator]) -> Optional[TOptionsValidator]: """ Parameters ---------- @@ -277,7 +277,7 @@ class Preset(_PresetShell): def __validate_and_get_downloader_options( self, downloader_source: str, downloader: Type[BaseDownloader] - ) -> BaseDownloaderValidator: + ) -> DownloaderValidator: # Remove the download_strategy key before validating it against the downloader options # TODO: make this cleaner del self._dict[downloader_source]["download_strategy"] @@ -287,9 +287,9 @@ class Preset(_PresetShell): def __validate_and_get_downloader_and_options( self, - ) -> Tuple[Type[BaseDownloader], BaseDownloaderValidator]: + ) -> Tuple[Type[BaseDownloader], DownloaderValidator]: downloader: Optional[Type[BaseDownloader]] = None - download_options: Optional[BaseDownloaderValidator] = None + download_options: Optional[DownloaderValidator] = None downloader_sources = DownloadStrategyMapping.sources() for key in self._keys: diff --git a/src/ytdl_sub/config/preset_options.py b/src/ytdl_sub/config/preset_options.py index d9ba7f9c..55533b47 100644 --- a/src/ytdl_sub/config/preset_options.py +++ b/src/ytdl_sub/config/preset_options.py @@ -3,6 +3,7 @@ from typing import Any from typing import Dict from typing import List from typing import Optional +from typing import TypeVar from yt_dlp.utils import sanitize_filename @@ -71,6 +72,9 @@ class OptionsValidator(Validator, ABC): return None +TOptionsValidator = TypeVar("TOptionsValidator", bound=OptionsValidator) + + class OptionsDictValidator(StrictDictValidator, OptionsValidator, ABC): pass diff --git a/src/ytdl_sub/downloaders/base_downloader.py b/src/ytdl_sub/downloaders/base_downloader.py index dd105fb7..b0c5f367 100644 --- a/src/ytdl_sub/downloaders/base_downloader.py +++ b/src/ytdl_sub/downloaders/base_downloader.py @@ -4,21 +4,18 @@ from typing import Generic from typing import Iterable from typing import List from typing import Type -from typing import TypeVar -from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.config.preset_options import Overrides +from ytdl_sub.config.preset_options import TOptionsValidator +from ytdl_sub.downloaders.downloader_validator import TDownloaderValidator from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.ytdl_additions.enhanced_download_archive import DownloadArchiver from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive -BaseDownloaderValidator = OptionsDictValidator -BaseDownloaderOptionsT = TypeVar("BaseDownloaderOptionsT", bound=BaseDownloaderValidator) - -class BaseDownloaderPlugin(Plugin[BaseDownloaderOptionsT], ABC): +class BaseDownloaderPlugin(Plugin[TDownloaderValidator], ABC): """ Plugins that get added automatically by using a downloader. Downloader options are the plugin options. @@ -26,7 +23,7 @@ class BaseDownloaderPlugin(Plugin[BaseDownloaderOptionsT], ABC): def __init__( self, - downloader_options: BaseDownloaderOptionsT, + downloader_options: TDownloaderValidator, overrides: Overrides, enhanced_download_archive: EnhancedDownloadArchive, ): @@ -38,12 +35,12 @@ class BaseDownloaderPlugin(Plugin[BaseDownloaderOptionsT], ABC): ) -class BaseDownloader(DownloadArchiver, Generic[BaseDownloaderOptionsT], ABC): - downloader_options_type: Type[BaseDownloaderOptionsT] +class BaseDownloader(DownloadArchiver, Generic[TOptionsValidator], ABC): + downloader_options_type: Type[TOptionsValidator] def __init__( self, - download_options: BaseDownloaderOptionsT, + download_options: TOptionsValidator, enhanced_download_archive: EnhancedDownloadArchive, download_ytdl_options: YTDLOptionsBuilder, metadata_ytdl_options: YTDLOptionsBuilder, @@ -67,7 +64,7 @@ class BaseDownloader(DownloadArchiver, Generic[BaseDownloaderOptionsT], ABC): @classmethod def added_plugins( cls, - downloader_options: BaseDownloaderOptionsT, + downloader_options: TOptionsValidator, enhanced_download_archive: EnhancedDownloadArchive, overrides: Overrides, ) -> List[BaseDownloaderPlugin]: diff --git a/src/ytdl_sub/downloaders/downloader_validator.py b/src/ytdl_sub/downloaders/downloader_validator.py new file mode 100644 index 00000000..a88bb0bd --- /dev/null +++ b/src/ytdl_sub/downloaders/downloader_validator.py @@ -0,0 +1,45 @@ +import abc +from abc import ABC +from typing import Dict +from typing import List +from typing import TypeVar + +from ytdl_sub.config.preset_options import OptionsValidator +from ytdl_sub.downloaders.url.validators import MultiUrlValidator + + +class DownloaderValidator(OptionsValidator, ABC): + """ + Placeholder class to define downloader options + """ + + @property + @abc.abstractmethod + def collection_validator(self) -> MultiUrlValidator: + """ + Returns + ------- + MultiUrlValidator + To determine how the entries are downloaded + """ + + def added_source_variables(self) -> List[str]: + """ + Returns + ------- + Added source variables on the collection + """ + return self.collection_validator.added_source_variables() + + def validate_with_variables( + self, source_variables: List[str], override_variables: Dict[str, str] + ) -> None: + """ + Validates any source variables added by the collection + """ + self.collection_validator.validate_with_variables( + source_variables=source_variables, override_variables=override_variables + ) + + +TDownloaderValidator = TypeVar("TDownloaderValidator", bound=DownloaderValidator) diff --git a/src/ytdl_sub/downloaders/info_json/info_json_downloader.py b/src/ytdl_sub/downloaders/info_json/info_json_downloader.py index 447d760c..d2facc3b 100644 --- a/src/ytdl_sub/downloaders/info_json/info_json_downloader.py +++ b/src/ytdl_sub/downloaders/info_json/info_json_downloader.py @@ -5,10 +5,9 @@ from typing import Dict from typing import Iterable from typing import List +from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.config.preset_options import Overrides from ytdl_sub.downloaders.base_downloader import BaseDownloader -from ytdl_sub.downloaders.base_downloader import BaseDownloaderOptionsT -from ytdl_sub.downloaders.base_downloader import BaseDownloaderValidator from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry from ytdl_sub.utils.exceptions import ValidationException @@ -18,7 +17,7 @@ from ytdl_sub.ytdl_additions.enhanced_download_archive import DownloadMapping from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive -class InfoJsonDownloaderOptions(BaseDownloaderValidator): +class InfoJsonDownloaderOptions(OptionsDictValidator): _optional_keys = {"no-op"} @@ -27,7 +26,7 @@ class InfoJsonDownloader(BaseDownloader[InfoJsonDownloaderOptions]): def __init__( self, - download_options: BaseDownloaderOptionsT, + download_options: InfoJsonDownloaderOptions, enhanced_download_archive: EnhancedDownloadArchive, download_ytdl_options: YTDLOptionsBuilder, metadata_ytdl_options: YTDLOptionsBuilder, diff --git a/src/ytdl_sub/downloaders/url/downloader.py b/src/ytdl_sub/downloaders/url/downloader.py index 9fde56ab..1828e626 100644 --- a/src/ytdl_sub/downloaders/url/downloader.py +++ b/src/ytdl_sub/downloaders/url/downloader.py @@ -1,4 +1,3 @@ -import abc import contextlib import os from abc import ABC @@ -15,9 +14,9 @@ from yt_dlp.utils import RejectedVideoReached from ytdl_sub.config.preset_options import Overrides from ytdl_sub.downloaders.base_downloader import BaseDownloader -from ytdl_sub.downloaders.base_downloader import BaseDownloaderOptionsT from ytdl_sub.downloaders.base_downloader import BaseDownloaderPlugin -from ytdl_sub.downloaders.base_downloader import BaseDownloaderValidator +from ytdl_sub.downloaders.downloader_validator import DownloaderValidator +from ytdl_sub.downloaders.downloader_validator import TDownloaderValidator from ytdl_sub.downloaders.url.validators import MultiUrlValidator from ytdl_sub.downloaders.url.validators import UrlThumbnailListValidator from ytdl_sub.downloaders.url.validators import UrlValidator @@ -45,40 +44,6 @@ from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadAr download_logger = Logger.get(name="downloader") -class DownloaderValidator(BaseDownloaderValidator, ABC): - """ - Placeholder class to define downloader options - """ - - @property - @abc.abstractmethod - def collection_validator(self) -> MultiUrlValidator: - """ - Returns - ------- - MultiUrlValidator - To determine how the entries are downloaded - """ - - def added_source_variables(self) -> List[str]: - """ - Returns - ------- - Added source variables on the collection - """ - return self.collection_validator.added_source_variables() - - def validate_with_variables( - self, source_variables: List[str], override_variables: Dict[str, str] - ) -> None: - """ - Validates any source variables added by the collection - """ - self.collection_validator.validate_with_variables( - source_variables=source_variables, override_variables=override_variables - ) - - class URLDownloadState: def __init__(self, entries_total: int): self.entries_total = entries_total @@ -221,7 +186,7 @@ class UrlDownloaderCollectionVariablePlugin(BaseDownloaderPlugin): return entry -class BaseUrlDownloader(BaseDownloader[BaseDownloaderOptionsT], ABC): +class BaseUrlDownloader(BaseDownloader[TDownloaderValidator], ABC): """ Class that interacts with ytdl to perform the download of metadata and content, and should translate that to list of Entry objects. @@ -230,7 +195,7 @@ class BaseUrlDownloader(BaseDownloader[BaseDownloaderOptionsT], ABC): @classmethod def added_plugins( cls, - downloader_options: BaseDownloaderOptionsT, + downloader_options: TDownloaderValidator, enhanced_download_archive: EnhancedDownloadArchive, overrides: Overrides, ) -> List[Plugin]: @@ -264,7 +229,7 @@ class BaseUrlDownloader(BaseDownloader[BaseDownloaderOptionsT], ABC): def __init__( self, - download_options: BaseDownloaderOptionsT, + download_options: TDownloaderValidator, enhanced_download_archive: EnhancedDownloadArchive, download_ytdl_options: YTDLOptionsBuilder, metadata_ytdl_options: YTDLOptionsBuilder, diff --git a/src/ytdl_sub/downloaders/url/multi_url.py b/src/ytdl_sub/downloaders/url/multi_url.py index a4ada5e7..822bd0ed 100644 --- a/src/ytdl_sub/downloaders/url/multi_url.py +++ b/src/ytdl_sub/downloaders/url/multi_url.py @@ -1,8 +1,8 @@ from typing import Dict from typing import List +from ytdl_sub.downloaders.downloader_validator import DownloaderValidator from ytdl_sub.downloaders.url.downloader import BaseUrlDownloader -from ytdl_sub.downloaders.url.downloader import DownloaderValidator from ytdl_sub.downloaders.url.validators import MultiUrlValidator diff --git a/src/ytdl_sub/downloaders/url/url.py b/src/ytdl_sub/downloaders/url/url.py index 53eeef60..9d8df650 100644 --- a/src/ytdl_sub/downloaders/url/url.py +++ b/src/ytdl_sub/downloaders/url/url.py @@ -1,5 +1,5 @@ +from ytdl_sub.downloaders.downloader_validator import DownloaderValidator from ytdl_sub.downloaders.url.downloader import BaseUrlDownloader -from ytdl_sub.downloaders.url.downloader import DownloaderValidator from ytdl_sub.downloaders.url.validators import MultiUrlValidator from ytdl_sub.downloaders.url.validators import UrlValidator diff --git a/src/ytdl_sub/plugins/plugin.py b/src/ytdl_sub/plugins/plugin.py index 630f2270..46d896d7 100644 --- a/src/ytdl_sub/plugins/plugin.py +++ b/src/ytdl_sub/plugins/plugin.py @@ -5,10 +5,9 @@ from typing import List from typing import Optional from typing import Tuple from typing import Type -from typing import TypeVar -from ytdl_sub.config.preset_options import OptionsValidator from ytdl_sub.config.preset_options import Overrides +from ytdl_sub.config.preset_options import TOptionsValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.utils.logger import Logger @@ -43,15 +42,12 @@ class PluginPriority: return self.modify_entry >= PluginPriority.MODIFY_ENTRY_AFTER_SPLIT -PluginOptionsT = TypeVar("PluginOptionsT", bound=OptionsValidator) - - -class Plugin(DownloadArchiver, Generic[PluginOptionsT], ABC): +class Plugin(DownloadArchiver, Generic[TOptionsValidator], ABC): """ Class to define the new plugin functionality """ - plugin_options_type: Type[PluginOptionsT] = NotImplemented + plugin_options_type: Type[TOptionsValidator] = NotImplemented priority: PluginPriority = PluginPriority() # If the plugin creates multiple entries from a single entry @@ -59,7 +55,7 @@ class Plugin(DownloadArchiver, Generic[PluginOptionsT], ABC): def __init__( self, - plugin_options: PluginOptionsT, + plugin_options: TOptionsValidator, overrides: Overrides, enhanced_download_archive: EnhancedDownloadArchive, ): diff --git a/src/ytdl_sub/subscriptions/base_subscription.py b/src/ytdl_sub/subscriptions/base_subscription.py index f6ccd868..14dbb9fc 100644 --- a/src/ytdl_sub/subscriptions/base_subscription.py +++ b/src/ytdl_sub/subscriptions/base_subscription.py @@ -9,7 +9,7 @@ from ytdl_sub.config.preset_options import OutputOptions from ytdl_sub.config.preset_options import Overrides from ytdl_sub.config.preset_options import YTDLOptions from ytdl_sub.downloaders.base_downloader import BaseDownloader -from ytdl_sub.downloaders.base_downloader import BaseDownloaderValidator +from ytdl_sub.downloaders.downloader_validator import DownloaderValidator from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive @@ -61,7 +61,7 @@ class BaseSubscription(ABC): return self._preset_options.downloader @property - def downloader_options(self) -> BaseDownloaderValidator: + def downloader_options(self) -> DownloaderValidator: """ Returns ------- From e3c662bc35c0e40a5fa66a84f47b198220dab529 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Tue, 25 Jul 2023 12:11:50 -0700 Subject: [PATCH 34/42] [REFACTOR] Shared plugin code (#664) * [REFACTOR] Shared plugin code * arg names * all plugins have priority * split abstract method * lint * lint --- src/ytdl_sub/{plugins => config}/plugin.py | 68 +++++++++++-------- src/ytdl_sub/config/preset.py | 2 +- src/ytdl_sub/config/preset_class_mappings.py | 2 +- src/ytdl_sub/downloaders/base_downloader.py | 4 +- src/ytdl_sub/downloaders/url/downloader.py | 2 +- src/ytdl_sub/plugins/audio_extract.py | 2 +- src/ytdl_sub/plugins/chapters.py | 2 +- src/ytdl_sub/plugins/date_range.py | 2 +- src/ytdl_sub/plugins/embed_thumbnail.py | 4 +- src/ytdl_sub/plugins/file_convert.py | 4 +- src/ytdl_sub/plugins/internal/view.py | 13 ++-- src/ytdl_sub/plugins/match_filters.py | 4 +- src/ytdl_sub/plugins/music_tags.py | 2 +- src/ytdl_sub/plugins/nfo_tags.py | 2 +- .../plugins/output_directory_nfo_tags.py | 4 +- src/ytdl_sub/plugins/regex.py | 4 +- src/ytdl_sub/plugins/split_by_chapters.py | 5 +- src/ytdl_sub/plugins/subtitles.py | 2 +- src/ytdl_sub/plugins/video_tags.py | 2 +- .../subscriptions/subscription_download.py | 11 +-- .../subscription_ytdl_options.py | 2 +- 21 files changed, 77 insertions(+), 66 deletions(-) rename src/ytdl_sub/{plugins => config}/plugin.py (85%) diff --git a/src/ytdl_sub/plugins/plugin.py b/src/ytdl_sub/config/plugin.py similarity index 85% rename from src/ytdl_sub/plugins/plugin.py rename to src/ytdl_sub/config/plugin.py index 46d896d7..b6c4bf5e 100644 --- a/src/ytdl_sub/plugins/plugin.py +++ b/src/ytdl_sub/config/plugin.py @@ -1,4 +1,5 @@ from abc import ABC +from abc import abstractmethod from typing import Dict from typing import Generic from typing import List @@ -10,7 +11,6 @@ from ytdl_sub.config.preset_options import Overrides from ytdl_sub.config.preset_options import TOptionsValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.utils.file_handler import FileMetadata -from ytdl_sub.utils.logger import Logger from ytdl_sub.ytdl_additions.enhanced_download_archive import DownloadArchiver from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive @@ -42,30 +42,33 @@ class PluginPriority: return self.modify_entry >= PluginPriority.MODIFY_ENTRY_AFTER_SPLIT -class Plugin(DownloadArchiver, Generic[TOptionsValidator], ABC): +# pylint: disable=no-self-use,unused-argument + + +class BasePlugin(DownloadArchiver, Generic[TOptionsValidator], ABC): """ - Class to define the new plugin functionality + Shared code amongst all SourcePlugins (downloaders) and Plugins (post-download modification) """ - plugin_options_type: Type[TOptionsValidator] = NotImplemented priority: PluginPriority = PluginPriority() - - # If the plugin creates multiple entries from a single entry - is_split_plugin: bool = False + plugin_options_type: Type[TOptionsValidator] def __init__( self, - plugin_options: TOptionsValidator, + options: TOptionsValidator, overrides: Overrides, enhanced_download_archive: EnhancedDownloadArchive, ): DownloadArchiver.__init__(self=self, enhanced_download_archive=enhanced_download_archive) - self.plugin_options = plugin_options + self.plugin_options = options self.overrides = overrides - # TODO pass yaml snake case name in the class somewhere, and use it for the logger - self._logger = Logger.get(self.__class__.__name__) - # pylint: disable=no-self-use,unused-argument + +class Plugin(BasePlugin[TOptionsValidator], Generic[TOptionsValidator], ABC): + """ + Class to define the new plugin functionality + """ + def ytdl_options(self) -> Optional[Dict]: """ Returns @@ -73,22 +76,6 @@ class Plugin(DownloadArchiver, Generic[TOptionsValidator], ABC): ytdl options to enable/disable when downloading entries for this specific plugin """ - def split(self, entry: Entry) -> List[Tuple[Entry, FileMetadata]]: - """ - Very specialized function that takes an entry and creates multiple entries from it. - Should mark ``is_split_plugin`` on the plugin class. - - Parameters - ---------- - entry - Entry to create multiple entries from - - Returns - ------- - List of entries and metadata created from the source entry - """ - return [] - def modify_entry_metadata(self, entry: Entry) -> Optional[Entry]: """ After entry metadata has been gathered, perform preprocessing on the metadata @@ -135,9 +122,30 @@ class Plugin(DownloadArchiver, Generic[TOptionsValidator], ABC): """ return None - # pylint: enable=no-self-use,unused-argument - def post_process_subscription(self): """ After all downloaded files have been post-processed, apply a subscription-wide post process """ + + +class SplitPlugin(Plugin[TOptionsValidator], Generic[TOptionsValidator], ABC): + """ + Plugin that splits entries into zero or more entries + """ + + @abstractmethod + def split(self, entry: Entry) -> List[Tuple[Entry, FileMetadata]]: + """ + Very specialized function that takes an entry and creates multiple entries from it. + Should mark ``is_split_plugin`` on the plugin class. + + Parameters + ---------- + entry + Entry to create multiple entries from + + Returns + ------- + List of entries and metadata created from the source entry + """ + return [] diff --git a/src/ytdl_sub/config/preset.py b/src/ytdl_sub/config/preset.py index 45b4db69..4cac9d71 100644 --- a/src/ytdl_sub/config/preset.py +++ b/src/ytdl_sub/config/preset.py @@ -11,6 +11,7 @@ from typing import Union from mergedeep import mergedeep from ytdl_sub.config.config_validator import ConfigValidator +from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset_class_mappings import DownloadStrategyMapping from ytdl_sub.config.preset_class_mappings import PluginMapping from ytdl_sub.config.preset_options import OptionsValidator @@ -21,7 +22,6 @@ from ytdl_sub.config.preset_options import YTDLOptions from ytdl_sub.downloaders.base_downloader import BaseDownloader from ytdl_sub.downloaders.downloader_validator import DownloaderValidator from ytdl_sub.entries.entry import Entry -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.prebuilt_presets import PREBUILT_PRESET_NAMES from ytdl_sub.prebuilt_presets import PUBLISHED_PRESET_NAMES from ytdl_sub.utils.exceptions import ValidationException diff --git a/src/ytdl_sub/config/preset_class_mappings.py b/src/ytdl_sub/config/preset_class_mappings.py index a77e4988..ee5fe43c 100644 --- a/src/ytdl_sub/config/preset_class_mappings.py +++ b/src/ytdl_sub/config/preset_class_mappings.py @@ -2,6 +2,7 @@ from typing import Dict from typing import List from typing import Type +from ytdl_sub.config.plugin import Plugin from ytdl_sub.downloaders.base_downloader import BaseDownloader from ytdl_sub.downloaders.url.multi_url import MultiUrlDownloader from ytdl_sub.downloaders.url.url import UrlDownloader @@ -15,7 +16,6 @@ from ytdl_sub.plugins.match_filters import MatchFiltersPlugin from ytdl_sub.plugins.music_tags import MusicTagsPlugin from ytdl_sub.plugins.nfo_tags import NfoTagsPlugin from ytdl_sub.plugins.output_directory_nfo_tags import OutputDirectoryNfoTagsPlugin -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.plugins.regex import RegexPlugin from ytdl_sub.plugins.split_by_chapters import SplitByChaptersPlugin from ytdl_sub.plugins.subtitles import SubtitlesPlugin diff --git a/src/ytdl_sub/downloaders/base_downloader.py b/src/ytdl_sub/downloaders/base_downloader.py index b0c5f367..3976ccb4 100644 --- a/src/ytdl_sub/downloaders/base_downloader.py +++ b/src/ytdl_sub/downloaders/base_downloader.py @@ -5,12 +5,12 @@ from typing import Iterable from typing import List from typing import Type +from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset_options import Overrides from ytdl_sub.config.preset_options import TOptionsValidator from ytdl_sub.downloaders.downloader_validator import TDownloaderValidator from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.ytdl_additions.enhanced_download_archive import DownloadArchiver from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive @@ -29,7 +29,7 @@ class BaseDownloaderPlugin(Plugin[TDownloaderValidator], ABC): ): super().__init__( # Downloader plugins use download options as their plugin options - plugin_options=downloader_options, + options=downloader_options, overrides=overrides, enhanced_download_archive=enhanced_download_archive, ) diff --git a/src/ytdl_sub/downloaders/url/downloader.py b/src/ytdl_sub/downloaders/url/downloader.py index 1828e626..7a7b4425 100644 --- a/src/ytdl_sub/downloaders/url/downloader.py +++ b/src/ytdl_sub/downloaders/url/downloader.py @@ -12,6 +12,7 @@ from typing import Tuple from yt_dlp.utils import RejectedVideoReached +from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset_options import Overrides from ytdl_sub.downloaders.base_downloader import BaseDownloader from ytdl_sub.downloaders.base_downloader import BaseDownloaderPlugin @@ -33,7 +34,6 @@ from ytdl_sub.entries.variables.kwargs import SOURCE_ENTRY from ytdl_sub.entries.variables.kwargs import SPONSORBLOCK_CHAPTERS from ytdl_sub.entries.variables.kwargs import UPLOAD_DATE_INDEX from ytdl_sub.entries.variables.kwargs import YTDL_SUB_MATCH_FILTER_REJECT -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.logger import Logger from ytdl_sub.utils.thumbnail import ThumbnailTypes diff --git a/src/ytdl_sub/plugins/audio_extract.py b/src/ytdl_sub/plugins/audio_extract.py index de4b2058..7418a146 100644 --- a/src/ytdl_sub/plugins/audio_extract.py +++ b/src/ytdl_sub/plugins/audio_extract.py @@ -3,10 +3,10 @@ from typing import Any from typing import Dict from typing import Optional +from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.utils.exceptions import FileNotDownloadedException from ytdl_sub.validators.audo_codec_validator import AUDIO_CODEC_TYPES_EXTENSION_MAPPING from ytdl_sub.validators.audo_codec_validator import AudioTypeValidator diff --git a/src/ytdl_sub/plugins/chapters.py b/src/ytdl_sub/plugins/chapters.py index 03928f68..456994f5 100644 --- a/src/ytdl_sub/plugins/chapters.py +++ b/src/ytdl_sub/plugins/chapters.py @@ -5,12 +5,12 @@ from typing import List from typing import Optional from typing import Set +from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry from ytdl_sub.entries.variables.kwargs import COMMENTS from ytdl_sub.entries.variables.kwargs import YTDL_SUB_CUSTOM_CHAPTERS -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.utils.chapters import Chapters from ytdl_sub.utils.ffmpeg import set_ffmpeg_metadata_chapters from ytdl_sub.utils.file_handler import FileMetadata diff --git a/src/ytdl_sub/plugins/date_range.py b/src/ytdl_sub/plugins/date_range.py index fb18d892..3ad3932b 100644 --- a/src/ytdl_sub/plugins/date_range.py +++ b/src/ytdl_sub/plugins/date_range.py @@ -1,9 +1,9 @@ from typing import Dict from typing import Optional +from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.utils.datetime import to_date_range from ytdl_sub.validators.string_datetime import StringDatetimeValidator diff --git a/src/ytdl_sub/plugins/embed_thumbnail.py b/src/ytdl_sub/plugins/embed_thumbnail.py index fac7e050..45dbd776 100644 --- a/src/ytdl_sub/plugins/embed_thumbnail.py +++ b/src/ytdl_sub/plugins/embed_thumbnail.py @@ -3,10 +3,10 @@ from typing import Optional import mediafile +from ytdl_sub.config.plugin import Plugin +from ytdl_sub.config.plugin import PluginPriority from ytdl_sub.config.preset_options import OptionsValidator from ytdl_sub.entries.entry import Entry -from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginPriority from ytdl_sub.utils.ffmpeg import FFMPEG from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.file_handler import FileMetadata diff --git a/src/ytdl_sub/plugins/file_convert.py b/src/ytdl_sub/plugins/file_convert.py index 86c4a303..8d2e1cd0 100644 --- a/src/ytdl_sub/plugins/file_convert.py +++ b/src/ytdl_sub/plugins/file_convert.py @@ -3,11 +3,11 @@ from typing import Any from typing import Dict from typing import Optional +from ytdl_sub.config.plugin import Plugin +from ytdl_sub.config.plugin import PluginPriority from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.entries.variables.kwargs import EXT -from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginPriority from ytdl_sub.utils.exceptions import FileNotDownloadedException from ytdl_sub.utils.exceptions import ValidationException from ytdl_sub.utils.ffmpeg import FFMPEG diff --git a/src/ytdl_sub/plugins/internal/view.py b/src/ytdl_sub/plugins/internal/view.py index ff7946f7..fa8d5471 100644 --- a/src/ytdl_sub/plugins/internal/view.py +++ b/src/ytdl_sub/plugins/internal/view.py @@ -1,12 +1,11 @@ import copy from typing import Optional +from ytdl_sub.config.plugin import Plugin +from ytdl_sub.config.plugin import PluginPriority from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.config.preset_options import Overrides from ytdl_sub.entries.entry import Entry -from ytdl_sub.plugins.output_directory_nfo_tags import OutputDirectoryNfoTagsOptions -from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginPriority from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive @@ -27,11 +26,15 @@ class ViewPlugin(Plugin[ViewOptions]): def __init__( self, - plugin_options: OutputDirectoryNfoTagsOptions, + options: ViewOptions, overrides: Overrides, enhanced_download_archive: EnhancedDownloadArchive, ): - super().__init__(plugin_options, overrides, enhanced_download_archive) + super().__init__( + options=options, + overrides=overrides, + enhanced_download_archive=enhanced_download_archive, + ) self._first_entry: Optional[Entry] = None @classmethod diff --git a/src/ytdl_sub/plugins/match_filters.py b/src/ytdl_sub/plugins/match_filters.py index 8dd3ce5c..dda5f370 100644 --- a/src/ytdl_sub/plugins/match_filters.py +++ b/src/ytdl_sub/plugins/match_filters.py @@ -5,11 +5,11 @@ from typing import Optional from yt_dlp import match_filter_func +from ytdl_sub.config.plugin import Plugin +from ytdl_sub.config.plugin import PluginPriority from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.entries.variables.kwargs import YTDL_SUB_MATCH_FILTER_REJECT -from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginPriority from ytdl_sub.utils.logger import Logger from ytdl_sub.validators.validators import StringListValidator diff --git a/src/ytdl_sub/plugins/music_tags.py b/src/ytdl_sub/plugins/music_tags.py index 43974492..7dcbfdaa 100644 --- a/src/ytdl_sub/plugins/music_tags.py +++ b/src/ytdl_sub/plugins/music_tags.py @@ -6,9 +6,9 @@ from typing import List import mediafile +from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.utils.logger import Logger from ytdl_sub.utils.thumbnail import convert_download_thumbnail diff --git a/src/ytdl_sub/plugins/nfo_tags.py b/src/ytdl_sub/plugins/nfo_tags.py index d76bf5c6..f9b3cc33 100644 --- a/src/ytdl_sub/plugins/nfo_tags.py +++ b/src/ytdl_sub/plugins/nfo_tags.py @@ -7,9 +7,9 @@ from typing import Dict from typing import List from typing import Optional +from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.utils.xml import XmlElement diff --git a/src/ytdl_sub/plugins/output_directory_nfo_tags.py b/src/ytdl_sub/plugins/output_directory_nfo_tags.py index cc050a6e..d1e23ab1 100644 --- a/src/ytdl_sub/plugins/output_directory_nfo_tags.py +++ b/src/ytdl_sub/plugins/output_directory_nfo_tags.py @@ -93,11 +93,11 @@ class OutputDirectoryNfoTagsPlugin(SharedNfoTagsPlugin): def __init__( self, - plugin_options: OutputDirectoryNfoTagsOptions, + options: OutputDirectoryNfoTagsOptions, overrides: Overrides, enhanced_download_archive: EnhancedDownloadArchive, ): - super().__init__(plugin_options, overrides, enhanced_download_archive) + super().__init__(options, overrides, enhanced_download_archive) self._last_entry: Optional[Entry] = None def post_process_entry(self, entry: Entry) -> None: diff --git a/src/ytdl_sub/plugins/regex.py b/src/ytdl_sub/plugins/regex.py index fcafd258..29fe58be 100644 --- a/src/ytdl_sub/plugins/regex.py +++ b/src/ytdl_sub/plugins/regex.py @@ -5,11 +5,11 @@ from typing import Optional from yt_dlp.utils import sanitize_filename +from ytdl_sub.config.plugin import Plugin +from ytdl_sub.config.plugin import PluginPriority from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.entries.variables.kwargs import YTDL_SUB_REGEX_SOURCE_VARS -from ytdl_sub.plugins.plugin import Plugin -from ytdl_sub.plugins.plugin import PluginPriority from ytdl_sub.utils.exceptions import RegexNoMatchException from ytdl_sub.utils.exceptions import StringFormattingVariableNotFoundException from ytdl_sub.utils.logger import Logger diff --git a/src/ytdl_sub/plugins/split_by_chapters.py b/src/ytdl_sub/plugins/split_by_chapters.py index 63fbb11f..f684f921 100644 --- a/src/ytdl_sub/plugins/split_by_chapters.py +++ b/src/ytdl_sub/plugins/split_by_chapters.py @@ -8,13 +8,13 @@ from typing import Tuple from yt_dlp.utils import sanitize_filename +from ytdl_sub.config.plugin import SplitPlugin from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.entries.variables.kwargs import CHAPTERS from ytdl_sub.entries.variables.kwargs import SPLIT_BY_CHAPTERS_PARENT_ENTRY from ytdl_sub.entries.variables.kwargs import SPONSORBLOCK_CHAPTERS from ytdl_sub.entries.variables.kwargs import UID -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.utils.chapters import Chapters from ytdl_sub.utils.chapters import Timestamp from ytdl_sub.utils.exceptions import ValidationException @@ -101,9 +101,8 @@ class SplitByChaptersOptions(OptionsDictValidator): return self._when_no_chapters -class SplitByChaptersPlugin(Plugin[SplitByChaptersOptions]): +class SplitByChaptersPlugin(SplitPlugin[SplitByChaptersOptions]): plugin_options_type = SplitByChaptersOptions - is_split_plugin = True def _create_split_entry( self, source_entry: Entry, title: str, idx: int, chapters: Chapters diff --git a/src/ytdl_sub/plugins/subtitles.py b/src/ytdl_sub/plugins/subtitles.py index 03097863..4dff539d 100644 --- a/src/ytdl_sub/plugins/subtitles.py +++ b/src/ytdl_sub/plugins/subtitles.py @@ -3,10 +3,10 @@ from typing import Dict from typing import List from typing import Optional +from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.utils.logger import Logger diff --git a/src/ytdl_sub/plugins/video_tags.py b/src/ytdl_sub/plugins/video_tags.py index 02601f3b..e27af4d8 100644 --- a/src/ytdl_sub/plugins/video_tags.py +++ b/src/ytdl_sub/plugins/video_tags.py @@ -2,9 +2,9 @@ import copy from typing import Any from typing import Dict +from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.utils.ffmpeg import add_ffmpeg_metadata_key_values from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.utils.logger import Logger diff --git a/src/ytdl_sub/subscriptions/subscription_download.py b/src/ytdl_sub/subscriptions/subscription_download.py index 92ca121b..7234a3df 100644 --- a/src/ytdl_sub/subscriptions/subscription_download.py +++ b/src/ytdl_sub/subscriptions/subscription_download.py @@ -6,12 +6,13 @@ from pathlib import Path from typing import List from typing import Optional +from ytdl_sub.config.plugin import Plugin +from ytdl_sub.config.plugin import SplitPlugin from ytdl_sub.downloaders.base_downloader import BaseDownloader from ytdl_sub.downloaders.info_json.info_json_downloader import InfoJsonDownloader from ytdl_sub.downloaders.info_json.info_json_downloader import InfoJsonDownloaderOptions from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.subscriptions.base_subscription import BaseSubscription from ytdl_sub.subscriptions.subscription_ytdl_options import SubscriptionYTDLOptions from ytdl_sub.utils.datetime import to_date_range @@ -22,8 +23,8 @@ from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.utils.thumbnail import convert_download_thumbnail -def _get_split_plugin(plugins: List[Plugin]) -> Optional[Plugin]: - split_plugins = [plugin for plugin in plugins if plugin.is_split_plugin] +def _get_split_plugin(plugins: List[Plugin]) -> Optional[SplitPlugin]: + split_plugins = [plugin for plugin in plugins if isinstance(plugin, SplitPlugin)] if len(split_plugins) == 1: return split_plugins[0] @@ -182,7 +183,7 @@ class SubscriptionDownload(BaseSubscription, ABC): for plugin_type, plugin_options in self.plugins.zipped(): plugin = plugin_type( - plugin_options=plugin_options, + options=plugin_options, overrides=self.overrides, enhanced_download_archive=self._enhanced_download_archive, ) @@ -243,7 +244,7 @@ class SubscriptionDownload(BaseSubscription, ABC): self._cleanup_entry_files(entry) def _process_split_entry( - self, split_plugin: Plugin, plugins: List[Plugin], dry_run: bool, entry: Entry + self, split_plugin: SplitPlugin, plugins: List[Plugin], dry_run: bool, entry: Entry ) -> None: entry_: Optional[Entry] = entry diff --git a/src/ytdl_sub/subscriptions/subscription_ytdl_options.py b/src/ytdl_sub/subscriptions/subscription_ytdl_options.py index c108033e..ee873a4e 100644 --- a/src/ytdl_sub/subscriptions/subscription_ytdl_options.py +++ b/src/ytdl_sub/subscriptions/subscription_ytdl_options.py @@ -5,6 +5,7 @@ from typing import Optional from typing import Type from typing import TypeVar +from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset import Preset from ytdl_sub.downloaders.base_downloader import BaseDownloader from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder @@ -13,7 +14,6 @@ from ytdl_sub.plugins.chapters import ChaptersPlugin from ytdl_sub.plugins.date_range import DateRangePlugin from ytdl_sub.plugins.file_convert import FileConvertPlugin from ytdl_sub.plugins.match_filters import MatchFiltersPlugin -from ytdl_sub.plugins.plugin import Plugin from ytdl_sub.plugins.subtitles import SubtitlesPlugin from ytdl_sub.utils.ffmpeg import FFMPEG from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive From 1236af270d5509dbf1ad90813cd81577379a4932 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Tue, 25 Jul 2023 12:37:56 -0700 Subject: [PATCH 35/42] [REFACTOR] SourcePlugin (#666) * [REFACTOR] SourcePlugin * param name --- src/ytdl_sub/config/preset.py | 23 +++++------ src/ytdl_sub/config/preset_class_mappings.py | 6 +-- .../info_json/info_json_downloader.py | 10 ++--- .../{base_downloader.py => source_plugin.py} | 37 +++++------------ src/ytdl_sub/downloaders/url/downloader.py | 40 ++++++++++--------- src/ytdl_sub/downloaders/url/multi_url.py | 8 ++-- .../multi_url_source_options_validator.py} | 6 ++- src/ytdl_sub/downloaders/url/url.py | 8 ++-- .../subscriptions/base_subscription.py | 8 ++-- .../subscriptions/subscription_download.py | 8 ++-- .../subscription_ytdl_options.py | 4 +- 11 files changed, 75 insertions(+), 83 deletions(-) rename src/ytdl_sub/downloaders/{base_downloader.py => source_plugin.py} (65%) rename src/ytdl_sub/downloaders/{downloader_validator.py => url/multi_url_source_options_validator.py} (86%) diff --git a/src/ytdl_sub/config/preset.py b/src/ytdl_sub/config/preset.py index 4cac9d71..fdedfdb9 100644 --- a/src/ytdl_sub/config/preset.py +++ b/src/ytdl_sub/config/preset.py @@ -19,8 +19,7 @@ from ytdl_sub.config.preset_options import OutputOptions from ytdl_sub.config.preset_options import Overrides from ytdl_sub.config.preset_options import TOptionsValidator from ytdl_sub.config.preset_options import YTDLOptions -from ytdl_sub.downloaders.base_downloader import BaseDownloader -from ytdl_sub.downloaders.downloader_validator import DownloaderValidator +from ytdl_sub.downloaders.source_plugin import SourcePlugin from ytdl_sub.entries.entry import Entry from ytdl_sub.prebuilt_presets import PREBUILT_PRESET_NAMES from ytdl_sub.prebuilt_presets import PUBLISHED_PRESET_NAMES @@ -121,7 +120,7 @@ class DownloadStrategyValidator(StrictDictValidator): validator=StringValidator, ).value - def get(self, downloader_source: str) -> Type[BaseDownloader]: + def get(self, downloader_source: str) -> Type[SourcePlugin]: """ Parameters ---------- @@ -213,7 +212,7 @@ class Preset(_PresetShell): ) del source_dict["download_strategy"] - downloader.downloader_options_type.partial_validate( + downloader.plugin_options_type.partial_validate( name=f"{name}.{source_name}", value=source_dict ) @@ -270,26 +269,24 @@ class Preset(_PresetShell): def _source_variables(self) -> List[str]: return Entry.source_variables() - def __validate_and_get_downloader(self, downloader_source: str) -> Type[BaseDownloader]: + def __validate_and_get_downloader(self, downloader_source: str) -> Type[SourcePlugin]: return self._validate_key(key=downloader_source, validator=DownloadStrategyValidator).get( downloader_source=downloader_source ) def __validate_and_get_downloader_options( - self, downloader_source: str, downloader: Type[BaseDownloader] - ) -> DownloaderValidator: + self, downloader_source: str, downloader: Type[SourcePlugin] + ) -> OptionsValidator: # Remove the download_strategy key before validating it against the downloader options # TODO: make this cleaner del self._dict[downloader_source]["download_strategy"] - return self._validate_key( - key=downloader_source, validator=downloader.downloader_options_type - ) + return self._validate_key(key=downloader_source, validator=downloader.plugin_options_type) def __validate_and_get_downloader_and_options( self, - ) -> Tuple[Type[BaseDownloader], DownloaderValidator]: - downloader: Optional[Type[BaseDownloader]] = None - download_options: Optional[DownloaderValidator] = None + ) -> Tuple[Type[SourcePlugin], OptionsValidator]: + downloader: Optional[Type[SourcePlugin]] = None + download_options: Optional[OptionsValidator] = None downloader_sources = DownloadStrategyMapping.sources() for key in self._keys: diff --git a/src/ytdl_sub/config/preset_class_mappings.py b/src/ytdl_sub/config/preset_class_mappings.py index ee5fe43c..5ab2f7c2 100644 --- a/src/ytdl_sub/config/preset_class_mappings.py +++ b/src/ytdl_sub/config/preset_class_mappings.py @@ -3,7 +3,7 @@ from typing import List from typing import Type from ytdl_sub.config.plugin import Plugin -from ytdl_sub.downloaders.base_downloader import BaseDownloader +from ytdl_sub.downloaders.source_plugin import SourcePlugin from ytdl_sub.downloaders.url.multi_url import MultiUrlDownloader from ytdl_sub.downloaders.url.url import UrlDownloader from ytdl_sub.plugins.audio_extract import AudioExtractPlugin @@ -27,7 +27,7 @@ class DownloadStrategyMapping: Maps downloader strategies defined in the preset to its respective downloader class """ - _MAPPING: Dict[str, Dict[str, Type[BaseDownloader]]] = { + _MAPPING: Dict[str, Dict[str, Type[SourcePlugin]]] = { "download": { "multi_url": MultiUrlDownloader, "url": UrlDownloader, @@ -82,7 +82,7 @@ class DownloadStrategyMapping: ) @classmethod - def get(cls, source: str, download_strategy: str) -> Type[BaseDownloader]: + def get(cls, source: str, download_strategy: str) -> Type[SourcePlugin]: """ Parameters ---------- diff --git a/src/ytdl_sub/downloaders/info_json/info_json_downloader.py b/src/ytdl_sub/downloaders/info_json/info_json_downloader.py index d2facc3b..f0c37083 100644 --- a/src/ytdl_sub/downloaders/info_json/info_json_downloader.py +++ b/src/ytdl_sub/downloaders/info_json/info_json_downloader.py @@ -7,7 +7,7 @@ from typing import List from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.config.preset_options import Overrides -from ytdl_sub.downloaders.base_downloader import BaseDownloader +from ytdl_sub.downloaders.source_plugin import SourcePlugin from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry from ytdl_sub.utils.exceptions import ValidationException @@ -21,19 +21,19 @@ class InfoJsonDownloaderOptions(OptionsDictValidator): _optional_keys = {"no-op"} -class InfoJsonDownloader(BaseDownloader[InfoJsonDownloaderOptions]): - downloader_options_type = InfoJsonDownloaderOptions +class InfoJsonDownloader(SourcePlugin[InfoJsonDownloaderOptions]): + plugin_options_type = InfoJsonDownloaderOptions def __init__( self, - download_options: InfoJsonDownloaderOptions, + options: InfoJsonDownloaderOptions, enhanced_download_archive: EnhancedDownloadArchive, download_ytdl_options: YTDLOptionsBuilder, metadata_ytdl_options: YTDLOptionsBuilder, overrides: Overrides, ): super().__init__( - download_options=download_options, + options=options, enhanced_download_archive=enhanced_download_archive, download_ytdl_options=download_ytdl_options, metadata_ytdl_options=metadata_ytdl_options, diff --git a/src/ytdl_sub/downloaders/base_downloader.py b/src/ytdl_sub/downloaders/source_plugin.py similarity index 65% rename from src/ytdl_sub/downloaders/base_downloader.py rename to src/ytdl_sub/downloaders/source_plugin.py index 3976ccb4..f10ae796 100644 --- a/src/ytdl_sub/downloaders/base_downloader.py +++ b/src/ytdl_sub/downloaders/source_plugin.py @@ -3,52 +3,37 @@ from abc import ABC from typing import Generic from typing import Iterable from typing import List -from typing import Type +from ytdl_sub.config.plugin import BasePlugin from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset_options import Overrides from ytdl_sub.config.preset_options import TOptionsValidator -from ytdl_sub.downloaders.downloader_validator import TDownloaderValidator from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry -from ytdl_sub.ytdl_additions.enhanced_download_archive import DownloadArchiver from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive -class BaseDownloaderPlugin(Plugin[TDownloaderValidator], ABC): +class SourcePluginExtension(Plugin[TOptionsValidator], ABC): """ Plugins that get added automatically by using a downloader. Downloader options are the plugin options. """ + +class SourcePlugin(BasePlugin[TOptionsValidator], Generic[TOptionsValidator], ABC): def __init__( self, - downloader_options: TDownloaderValidator, - overrides: Overrides, - enhanced_download_archive: EnhancedDownloadArchive, - ): - super().__init__( - # Downloader plugins use download options as their plugin options - options=downloader_options, - overrides=overrides, - enhanced_download_archive=enhanced_download_archive, - ) - - -class BaseDownloader(DownloadArchiver, Generic[TOptionsValidator], ABC): - downloader_options_type: Type[TOptionsValidator] - - def __init__( - self, - download_options: TOptionsValidator, + options: TOptionsValidator, enhanced_download_archive: EnhancedDownloadArchive, download_ytdl_options: YTDLOptionsBuilder, metadata_ytdl_options: YTDLOptionsBuilder, overrides: Overrides, ): - super().__init__(enhanced_download_archive=enhanced_download_archive) - self.download_options = download_options - self.overrides = overrides + super().__init__( + options=options, + overrides=overrides, + enhanced_download_archive=enhanced_download_archive, + ) self._download_ytdl_options_builder = download_ytdl_options self._metadata_ytdl_options_builder = metadata_ytdl_options @@ -67,7 +52,7 @@ class BaseDownloader(DownloadArchiver, Generic[TOptionsValidator], ABC): downloader_options: TOptionsValidator, enhanced_download_archive: EnhancedDownloadArchive, overrides: Overrides, - ) -> List[BaseDownloaderPlugin]: + ) -> List[SourcePluginExtension]: """Add these plugins from the Downloader to the subscription""" return [] diff --git a/src/ytdl_sub/downloaders/url/downloader.py b/src/ytdl_sub/downloaders/url/downloader.py index 7a7b4425..f8023d32 100644 --- a/src/ytdl_sub/downloaders/url/downloader.py +++ b/src/ytdl_sub/downloaders/url/downloader.py @@ -14,10 +14,14 @@ from yt_dlp.utils import RejectedVideoReached from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset_options import Overrides -from ytdl_sub.downloaders.base_downloader import BaseDownloader -from ytdl_sub.downloaders.base_downloader import BaseDownloaderPlugin -from ytdl_sub.downloaders.downloader_validator import DownloaderValidator -from ytdl_sub.downloaders.downloader_validator import TDownloaderValidator +from ytdl_sub.downloaders.source_plugin import SourcePlugin +from ytdl_sub.downloaders.source_plugin import SourcePluginExtension +from ytdl_sub.downloaders.url.multi_url_source_options_validator import ( + MultiUrlSourceOptionsValidator, +) +from ytdl_sub.downloaders.url.multi_url_source_options_validator import ( + TMultiURLSourceOptionsValidator, +) from ytdl_sub.downloaders.url.validators import MultiUrlValidator from ytdl_sub.downloaders.url.validators import UrlThumbnailListValidator from ytdl_sub.downloaders.url.validators import UrlValidator @@ -50,22 +54,22 @@ class URLDownloadState: self.entries_downloaded = 0 -class UrlDownloaderThumbnailPlugin(BaseDownloaderPlugin): +class UrlDownloaderThumbnailPlugin(SourcePluginExtension): def __init__( self, - downloader_options: DownloaderValidator, + options: MultiUrlSourceOptionsValidator, overrides: Overrides, enhanced_download_archive: EnhancedDownloadArchive, ): super().__init__( - downloader_options=downloader_options, + options=options, overrides=overrides, enhanced_download_archive=enhanced_download_archive, ) self._thumbnails_downloaded: Set[str] = set() self._collection_url_mapping: Dict[str, UrlValidator] = { self.overrides.apply_formatter(collection_url.url): collection_url - for collection_url in downloader_options.collection_validator.urls.list + for collection_url in options.collection_validator.urls.list } def _download_parent_thumbnails( @@ -149,15 +153,15 @@ class UrlDownloaderThumbnailPlugin(BaseDownloaderPlugin): return entry -class UrlDownloaderCollectionVariablePlugin(BaseDownloaderPlugin): +class UrlDownloaderCollectionVariablePlugin(SourcePluginExtension): def __init__( self, - downloader_options: DownloaderValidator, + downloader_options: MultiUrlSourceOptionsValidator, overrides: Overrides, enhanced_download_archive: EnhancedDownloadArchive, ): super().__init__( - downloader_options=downloader_options, + options=downloader_options, overrides=overrides, enhanced_download_archive=enhanced_download_archive, ) @@ -186,7 +190,7 @@ class UrlDownloaderCollectionVariablePlugin(BaseDownloaderPlugin): return entry -class BaseUrlDownloader(BaseDownloader[TDownloaderValidator], ABC): +class BaseUrlDownloader(SourcePlugin[TMultiURLSourceOptionsValidator], ABC): """ Class that interacts with ytdl to perform the download of metadata and content, and should translate that to list of Entry objects. @@ -195,7 +199,7 @@ class BaseUrlDownloader(BaseDownloader[TDownloaderValidator], ABC): @classmethod def added_plugins( cls, - downloader_options: TDownloaderValidator, + downloader_options: TMultiURLSourceOptionsValidator, enhanced_download_archive: EnhancedDownloadArchive, overrides: Overrides, ) -> List[Plugin]: @@ -206,7 +210,7 @@ class BaseUrlDownloader(BaseDownloader[TDownloaderValidator], ABC): """ return [ UrlDownloaderThumbnailPlugin( - downloader_options=downloader_options, + options=downloader_options, overrides=overrides, enhanced_download_archive=enhanced_download_archive, ), @@ -229,7 +233,7 @@ class BaseUrlDownloader(BaseDownloader[TDownloaderValidator], ABC): def __init__( self, - download_options: TDownloaderValidator, + options: TMultiURLSourceOptionsValidator, enhanced_download_archive: EnhancedDownloadArchive, download_ytdl_options: YTDLOptionsBuilder, metadata_ytdl_options: YTDLOptionsBuilder, @@ -238,7 +242,7 @@ class BaseUrlDownloader(BaseDownloader[TDownloaderValidator], ABC): """ Parameters ---------- - download_options + options Options validator for this downloader enhanced_download_archive Download archive @@ -250,7 +254,7 @@ class BaseUrlDownloader(BaseDownloader[TDownloaderValidator], ABC): Override variables """ super().__init__( - download_options=download_options, + options=options, enhanced_download_archive=enhanced_download_archive, download_ytdl_options=download_ytdl_options, metadata_ytdl_options=metadata_ytdl_options, @@ -315,7 +319,7 @@ class BaseUrlDownloader(BaseDownloader[TDownloaderValidator], ABC): @property def collection(self) -> MultiUrlValidator: """Return the download options collection""" - return self.download_options.collection_validator + return self.plugin_options.collection_validator @contextlib.contextmanager def _separate_download_archives(self, clear_info_json_files: bool = False): diff --git a/src/ytdl_sub/downloaders/url/multi_url.py b/src/ytdl_sub/downloaders/url/multi_url.py index 822bd0ed..40c2d5d3 100644 --- a/src/ytdl_sub/downloaders/url/multi_url.py +++ b/src/ytdl_sub/downloaders/url/multi_url.py @@ -1,12 +1,14 @@ from typing import Dict from typing import List -from ytdl_sub.downloaders.downloader_validator import DownloaderValidator from ytdl_sub.downloaders.url.downloader import BaseUrlDownloader +from ytdl_sub.downloaders.url.multi_url_source_options_validator import ( + MultiUrlSourceOptionsValidator, +) from ytdl_sub.downloaders.url.validators import MultiUrlValidator -class MultiUrlDownloadOptions(MultiUrlValidator, DownloaderValidator): +class MultiUrlDownloadOptions(MultiUrlValidator, MultiUrlSourceOptionsValidator): """ Downloads from multiple URLs. If an entry is returned from more than one URL, it will resolve to the bottom-most URL settings. @@ -65,4 +67,4 @@ class MultiUrlDownloadOptions(MultiUrlValidator, DownloaderValidator): class MultiUrlDownloader(BaseUrlDownloader[MultiUrlDownloadOptions]): - downloader_options_type = MultiUrlDownloadOptions + plugin_options_type = MultiUrlDownloadOptions diff --git a/src/ytdl_sub/downloaders/downloader_validator.py b/src/ytdl_sub/downloaders/url/multi_url_source_options_validator.py similarity index 86% rename from src/ytdl_sub/downloaders/downloader_validator.py rename to src/ytdl_sub/downloaders/url/multi_url_source_options_validator.py index a88bb0bd..4ccedf54 100644 --- a/src/ytdl_sub/downloaders/downloader_validator.py +++ b/src/ytdl_sub/downloaders/url/multi_url_source_options_validator.py @@ -8,7 +8,7 @@ from ytdl_sub.config.preset_options import OptionsValidator from ytdl_sub.downloaders.url.validators import MultiUrlValidator -class DownloaderValidator(OptionsValidator, ABC): +class MultiUrlSourceOptionsValidator(OptionsValidator, ABC): """ Placeholder class to define downloader options """ @@ -42,4 +42,6 @@ class DownloaderValidator(OptionsValidator, ABC): ) -TDownloaderValidator = TypeVar("TDownloaderValidator", bound=DownloaderValidator) +TMultiURLSourceOptionsValidator = TypeVar( + "TMultiURLSourceOptionsValidator", bound=MultiUrlSourceOptionsValidator +) diff --git a/src/ytdl_sub/downloaders/url/url.py b/src/ytdl_sub/downloaders/url/url.py index 9d8df650..cd79c430 100644 --- a/src/ytdl_sub/downloaders/url/url.py +++ b/src/ytdl_sub/downloaders/url/url.py @@ -1,10 +1,12 @@ -from ytdl_sub.downloaders.downloader_validator import DownloaderValidator from ytdl_sub.downloaders.url.downloader import BaseUrlDownloader +from ytdl_sub.downloaders.url.multi_url_source_options_validator import ( + MultiUrlSourceOptionsValidator, +) from ytdl_sub.downloaders.url.validators import MultiUrlValidator from ytdl_sub.downloaders.url.validators import UrlValidator -class UrlDownloadOptions(UrlValidator, DownloaderValidator): +class UrlDownloadOptions(UrlValidator, MultiUrlSourceOptionsValidator): """ Downloads from a single URL supported by yt-dlp. @@ -37,4 +39,4 @@ class UrlDownloadOptions(UrlValidator, DownloaderValidator): class UrlDownloader(BaseUrlDownloader[UrlDownloadOptions]): - downloader_options_type = UrlDownloadOptions + plugin_options_type = UrlDownloadOptions diff --git a/src/ytdl_sub/subscriptions/base_subscription.py b/src/ytdl_sub/subscriptions/base_subscription.py index 14dbb9fc..82c697b5 100644 --- a/src/ytdl_sub/subscriptions/base_subscription.py +++ b/src/ytdl_sub/subscriptions/base_subscription.py @@ -5,11 +5,11 @@ from typing import Type from ytdl_sub.config.config_validator import ConfigOptions from ytdl_sub.config.preset import Preset from ytdl_sub.config.preset import PresetPlugins +from ytdl_sub.config.preset_options import OptionsValidator from ytdl_sub.config.preset_options import OutputOptions from ytdl_sub.config.preset_options import Overrides from ytdl_sub.config.preset_options import YTDLOptions -from ytdl_sub.downloaders.base_downloader import BaseDownloader -from ytdl_sub.downloaders.downloader_validator import DownloaderValidator +from ytdl_sub.downloaders.source_plugin import SourcePlugin from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive @@ -52,7 +52,7 @@ class BaseSubscription(ABC): ) @property - def downloader_class(self) -> Type[BaseDownloader]: + def downloader_class(self) -> Type[SourcePlugin]: """ Returns ------- @@ -61,7 +61,7 @@ class BaseSubscription(ABC): return self._preset_options.downloader @property - def downloader_options(self) -> DownloaderValidator: + def downloader_options(self) -> OptionsValidator: """ Returns ------- diff --git a/src/ytdl_sub/subscriptions/subscription_download.py b/src/ytdl_sub/subscriptions/subscription_download.py index 7234a3df..528c7959 100644 --- a/src/ytdl_sub/subscriptions/subscription_download.py +++ b/src/ytdl_sub/subscriptions/subscription_download.py @@ -8,9 +8,9 @@ from typing import Optional from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.plugin import SplitPlugin -from ytdl_sub.downloaders.base_downloader import BaseDownloader from ytdl_sub.downloaders.info_json.info_json_downloader import InfoJsonDownloader from ytdl_sub.downloaders.info_json.info_json_downloader import InfoJsonDownloaderOptions +from ytdl_sub.downloaders.source_plugin import SourcePlugin from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry from ytdl_sub.subscriptions.base_subscription import BaseSubscription @@ -291,7 +291,7 @@ class SubscriptionDownload(BaseSubscription, ABC): def _process_subscription( self, plugins: List[Plugin], - downloader: BaseDownloader, + downloader: SourcePlugin, dry_run: bool, ) -> FileHandlerTransactionLog: with self._subscription_download_context_managers(): @@ -340,7 +340,7 @@ class SubscriptionDownload(BaseSubscription, ABC): ) downloader = self.downloader_class( - download_options=self.downloader_options, + options=self.downloader_options, enhanced_download_archive=self._enhanced_download_archive, download_ytdl_options=subscription_ytdl_options.download_builder(), metadata_ytdl_options=subscription_ytdl_options.metadata_builder(), @@ -366,7 +366,7 @@ class SubscriptionDownload(BaseSubscription, ABC): plugins = self._initialize_plugins() downloader = InfoJsonDownloader( - download_options=InfoJsonDownloaderOptions(name="no-op", value={}), + options=InfoJsonDownloaderOptions(name="no-op", value={}), enhanced_download_archive=self._enhanced_download_archive, download_ytdl_options=YTDLOptionsBuilder(), metadata_ytdl_options=YTDLOptionsBuilder(), diff --git a/src/ytdl_sub/subscriptions/subscription_ytdl_options.py b/src/ytdl_sub/subscriptions/subscription_ytdl_options.py index ee873a4e..b4bdeb3e 100644 --- a/src/ytdl_sub/subscriptions/subscription_ytdl_options.py +++ b/src/ytdl_sub/subscriptions/subscription_ytdl_options.py @@ -7,7 +7,7 @@ from typing import TypeVar from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset import Preset -from ytdl_sub.downloaders.base_downloader import BaseDownloader +from ytdl_sub.downloaders.source_plugin import SourcePlugin from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.plugins.audio_extract import AudioExtractPlugin from ytdl_sub.plugins.chapters import ChaptersPlugin @@ -43,7 +43,7 @@ class SubscriptionYTDLOptions: return None @property - def _downloader(self) -> Type[BaseDownloader]: + def _downloader(self) -> Type[SourcePlugin]: return self._preset.downloader @property From bf3c61213b78fcf312936ffdc0afb1a9a6d7f0f0 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Tue, 25 Jul 2023 14:04:18 -0700 Subject: [PATCH 36/42] [REFACTOR] SourcePluginExtension (#667) * [REFACTOR] SourcePluginExtension * param name * priority to plugin extensions * info json --- src/ytdl_sub/config/plugin.py | 5 ++- src/ytdl_sub/downloaders/source_plugin.py | 35 +++++++++++----- src/ytdl_sub/downloaders/url/downloader.py | 37 +++++------------ .../subscriptions/subscription_download.py | 40 ++++++++++++------- 4 files changed, 63 insertions(+), 54 deletions(-) diff --git a/src/ytdl_sub/config/plugin.py b/src/ytdl_sub/config/plugin.py index b6c4bf5e..6930e632 100644 --- a/src/ytdl_sub/config/plugin.py +++ b/src/ytdl_sub/config/plugin.py @@ -28,7 +28,10 @@ class PluginPriority: MODIFY_ENTRY_FIRST = 0 - def __init__(self, modify_entry: int = 5, post_process: int = 5): + def __init__( + self, modify_entry_metadata: int = 5, modify_entry: int = 5, post_process: int = 5 + ): + self.modify_entry_metadata = modify_entry_metadata self.modify_entry = modify_entry self.post_process = post_process diff --git a/src/ytdl_sub/downloaders/source_plugin.py b/src/ytdl_sub/downloaders/source_plugin.py index f10ae796..59958ba1 100644 --- a/src/ytdl_sub/downloaders/source_plugin.py +++ b/src/ytdl_sub/downloaders/source_plugin.py @@ -1,8 +1,12 @@ import abc from abc import ABC +from typing import Dict from typing import Generic from typing import Iterable from typing import List +from typing import Optional +from typing import Type +from typing import final from ytdl_sub.config.plugin import BasePlugin from ytdl_sub.config.plugin import Plugin @@ -19,8 +23,18 @@ class SourcePluginExtension(Plugin[TOptionsValidator], ABC): are the plugin options. """ + @final + def ytdl_options(self) -> Optional[Dict]: + """ + SourcePluginExtensions are intended to run after downloading. ytdl_options at that point + are not needed. + """ + return None + class SourcePlugin(BasePlugin[TOptionsValidator], Generic[TOptionsValidator], ABC): + plugin_extensions: List[Type[SourcePluginExtension]] = [] + def __init__( self, options: TOptionsValidator, @@ -45,15 +59,14 @@ class SourcePlugin(BasePlugin[TOptionsValidator], Generic[TOptionsValidator], AB def download(self, entry: Entry) -> Entry: """The function to perform the download of all media entries""" - # pylint: disable=unused-argument - @classmethod - def added_plugins( - cls, - downloader_options: TOptionsValidator, - enhanced_download_archive: EnhancedDownloadArchive, - overrides: Overrides, - ) -> List[SourcePluginExtension]: + @final + def added_plugins(self) -> List[SourcePluginExtension]: """Add these plugins from the Downloader to the subscription""" - return [] - - # pylint: enable=unused-argument + return [ + plugin_extension( + options=self.plugin_options, + overrides=self.overrides, + enhanced_download_archive=self._enhanced_download_archive, + ) + for plugin_extension in self.plugin_extensions + ] diff --git a/src/ytdl_sub/downloaders/url/downloader.py b/src/ytdl_sub/downloaders/url/downloader.py index f8023d32..c6061193 100644 --- a/src/ytdl_sub/downloaders/url/downloader.py +++ b/src/ytdl_sub/downloaders/url/downloader.py @@ -12,7 +12,7 @@ from typing import Tuple from yt_dlp.utils import RejectedVideoReached -from ytdl_sub.config.plugin import Plugin +from ytdl_sub.config.plugin import PluginPriority from ytdl_sub.config.preset_options import Overrides from ytdl_sub.downloaders.source_plugin import SourcePlugin from ytdl_sub.downloaders.source_plugin import SourcePluginExtension @@ -55,6 +55,8 @@ class URLDownloadState: class UrlDownloaderThumbnailPlugin(SourcePluginExtension): + priority = PluginPriority(modify_entry=0) + def __init__( self, options: MultiUrlSourceOptionsValidator, @@ -154,21 +156,23 @@ class UrlDownloaderThumbnailPlugin(SourcePluginExtension): class UrlDownloaderCollectionVariablePlugin(SourcePluginExtension): + priority = PluginPriority(modify_entry_metadata=0) + def __init__( self, - downloader_options: MultiUrlSourceOptionsValidator, + options: MultiUrlSourceOptionsValidator, overrides: Overrides, enhanced_download_archive: EnhancedDownloadArchive, ): super().__init__( - options=downloader_options, + options=options, overrides=overrides, enhanced_download_archive=enhanced_download_archive, ) self._thumbnails_downloaded: Set[str] = set() self._collection_url_mapping: Dict[str, UrlValidator] = { self.overrides.apply_formatter(collection_url.url): collection_url - for collection_url in downloader_options.collection_validator.urls.list + for collection_url in options.collection_validator.urls.list } def modify_entry_metadata(self, entry: Entry) -> Optional[Entry]: @@ -196,30 +200,7 @@ class BaseUrlDownloader(SourcePlugin[TMultiURLSourceOptionsValidator], ABC): and should translate that to list of Entry objects. """ - @classmethod - def added_plugins( - cls, - downloader_options: TMultiURLSourceOptionsValidator, - enhanced_download_archive: EnhancedDownloadArchive, - overrides: Overrides, - ) -> List[Plugin]: - """ - Adds - 1. URL thumbnail download plugin - 2. Collection variable plugin to add to each entry - """ - return [ - UrlDownloaderThumbnailPlugin( - options=downloader_options, - overrides=overrides, - enhanced_download_archive=enhanced_download_archive, - ), - UrlDownloaderCollectionVariablePlugin( - downloader_options=downloader_options, - overrides=overrides, - enhanced_download_archive=enhanced_download_archive, - ), - ] + plugin_extensions = [UrlDownloaderThumbnailPlugin, UrlDownloaderCollectionVariablePlugin] @classmethod def ytdl_option_defaults(cls) -> Dict: diff --git a/src/ytdl_sub/subscriptions/subscription_download.py b/src/ytdl_sub/subscriptions/subscription_download.py index 528c7959..25c97a09 100644 --- a/src/ytdl_sub/subscriptions/subscription_download.py +++ b/src/ytdl_sub/subscriptions/subscription_download.py @@ -174,23 +174,14 @@ class SubscriptionDownload(BaseSubscription, ABC): ------- List of plugins defined in the subscription, initialized and ready to use. """ - # Always add plugins provided by the downloader - plugins: List[Plugin] = self.downloader_class.added_plugins( - downloader_options=self.downloader_options, - enhanced_download_archive=self._enhanced_download_archive, - overrides=self.overrides, - ) - - for plugin_type, plugin_options in self.plugins.zipped(): - plugin = plugin_type( + return [ + plugin_type( options=plugin_options, overrides=self.overrides, enhanced_download_archive=self._enhanced_download_archive, ) - - plugins.append(plugin) - - return plugins + for plugin_type, plugin_options in self.plugins.zipped() + ] @classmethod def _cleanup_entry_files(cls, entry: Entry): @@ -201,7 +192,7 @@ class SubscriptionDownload(BaseSubscription, ABC): @classmethod def _preprocess_entry(cls, plugins: List[Plugin], entry: Entry) -> Optional[Entry]: maybe_entry: Optional[Entry] = entry - for plugin in plugins: + for plugin in sorted(plugins, key=lambda _plugin: _plugin.priority.modify_entry_metadata): if (maybe_entry := plugin.modify_entry_metadata(maybe_entry)) is None: return None @@ -347,6 +338,8 @@ class SubscriptionDownload(BaseSubscription, ABC): overrides=self.overrides, ) + plugins.extend(downloader.added_plugins()) + return self._process_subscription( plugins=plugins, downloader=downloader, @@ -365,6 +358,25 @@ class SubscriptionDownload(BaseSubscription, ABC): self._enhanced_download_archive.reinitialize(dry_run=dry_run) plugins = self._initialize_plugins() + subscription_ytdl_options = SubscriptionYTDLOptions( + preset=self._preset_options, + plugins=plugins, + enhanced_download_archive=self._enhanced_download_archive, + working_directory=self.working_directory, + dry_run=dry_run, + ) + + # Re-add the original downloader class' plugins + plugins.extend( + self.downloader_class( + options=self.downloader_options, + enhanced_download_archive=self._enhanced_download_archive, + download_ytdl_options=subscription_ytdl_options.download_builder(), + metadata_ytdl_options=subscription_ytdl_options.metadata_builder(), + overrides=self.overrides, + ).added_plugins() + ) + downloader = InfoJsonDownloader( options=InfoJsonDownloaderOptions(name="no-op", value={}), enhanced_download_archive=self._enhanced_download_archive, From 3c0d05a383dbc524a101cb572b2e550d6c7614ab Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Tue, 25 Jul 2023 14:41:33 -0700 Subject: [PATCH 37/42] [REFACTOR] Single download options (#668) * [REFACTOR] Single download options * update * fix unit test msg --- src/ytdl_sub/config/preset_class_mappings.py | 5 +- src/ytdl_sub/downloaders/url/downloader.py | 21 ++++----- src/ytdl_sub/downloaders/url/multi_url.py | 36 +------------- .../url/multi_url_source_options_validator.py | 47 ------------------- src/ytdl_sub/downloaders/url/url.py | 20 +------- src/ytdl_sub/downloaders/url/validators.py | 36 +++++++++++--- tests/unit/config/test_config_file.py | 3 +- tests/unit/config/test_preset.py | 1 - tests/unit/prebuilt_presets/conftest.py | 4 +- 9 files changed, 48 insertions(+), 125 deletions(-) delete mode 100644 src/ytdl_sub/downloaders/url/multi_url_source_options_validator.py diff --git a/src/ytdl_sub/config/preset_class_mappings.py b/src/ytdl_sub/config/preset_class_mappings.py index 5ab2f7c2..f3745d5c 100644 --- a/src/ytdl_sub/config/preset_class_mappings.py +++ b/src/ytdl_sub/config/preset_class_mappings.py @@ -4,8 +4,7 @@ from typing import Type from ytdl_sub.config.plugin import Plugin from ytdl_sub.downloaders.source_plugin import SourcePlugin -from ytdl_sub.downloaders.url.multi_url import MultiUrlDownloader -from ytdl_sub.downloaders.url.url import UrlDownloader +from ytdl_sub.downloaders.url.downloader import MultiUrlDownloader from ytdl_sub.plugins.audio_extract import AudioExtractPlugin from ytdl_sub.plugins.chapters import ChaptersPlugin from ytdl_sub.plugins.date_range import DateRangePlugin @@ -30,7 +29,7 @@ class DownloadStrategyMapping: _MAPPING: Dict[str, Dict[str, Type[SourcePlugin]]] = { "download": { "multi_url": MultiUrlDownloader, - "url": UrlDownloader, + "url": MultiUrlDownloader, }, } diff --git a/src/ytdl_sub/downloaders/url/downloader.py b/src/ytdl_sub/downloaders/url/downloader.py index c6061193..96c94888 100644 --- a/src/ytdl_sub/downloaders/url/downloader.py +++ b/src/ytdl_sub/downloaders/url/downloader.py @@ -16,12 +16,6 @@ from ytdl_sub.config.plugin import PluginPriority from ytdl_sub.config.preset_options import Overrides from ytdl_sub.downloaders.source_plugin import SourcePlugin from ytdl_sub.downloaders.source_plugin import SourcePluginExtension -from ytdl_sub.downloaders.url.multi_url_source_options_validator import ( - MultiUrlSourceOptionsValidator, -) -from ytdl_sub.downloaders.url.multi_url_source_options_validator import ( - TMultiURLSourceOptionsValidator, -) from ytdl_sub.downloaders.url.validators import MultiUrlValidator from ytdl_sub.downloaders.url.validators import UrlThumbnailListValidator from ytdl_sub.downloaders.url.validators import UrlValidator @@ -59,7 +53,7 @@ class UrlDownloaderThumbnailPlugin(SourcePluginExtension): def __init__( self, - options: MultiUrlSourceOptionsValidator, + options: MultiUrlValidator, overrides: Overrides, enhanced_download_archive: EnhancedDownloadArchive, ): @@ -71,7 +65,7 @@ class UrlDownloaderThumbnailPlugin(SourcePluginExtension): self._thumbnails_downloaded: Set[str] = set() self._collection_url_mapping: Dict[str, UrlValidator] = { self.overrides.apply_formatter(collection_url.url): collection_url - for collection_url in options.collection_validator.urls.list + for collection_url in options.urls.list } def _download_parent_thumbnails( @@ -160,7 +154,7 @@ class UrlDownloaderCollectionVariablePlugin(SourcePluginExtension): def __init__( self, - options: MultiUrlSourceOptionsValidator, + options: MultiUrlValidator, overrides: Overrides, enhanced_download_archive: EnhancedDownloadArchive, ): @@ -172,7 +166,7 @@ class UrlDownloaderCollectionVariablePlugin(SourcePluginExtension): self._thumbnails_downloaded: Set[str] = set() self._collection_url_mapping: Dict[str, UrlValidator] = { self.overrides.apply_formatter(collection_url.url): collection_url - for collection_url in options.collection_validator.urls.list + for collection_url in options.urls.list } def modify_entry_metadata(self, entry: Entry) -> Optional[Entry]: @@ -194,12 +188,13 @@ class UrlDownloaderCollectionVariablePlugin(SourcePluginExtension): return entry -class BaseUrlDownloader(SourcePlugin[TMultiURLSourceOptionsValidator], ABC): +class MultiUrlDownloader(SourcePlugin[MultiUrlValidator], ABC): """ Class that interacts with ytdl to perform the download of metadata and content, and should translate that to list of Entry objects. """ + plugin_options_type = MultiUrlValidator plugin_extensions = [UrlDownloaderThumbnailPlugin, UrlDownloaderCollectionVariablePlugin] @classmethod @@ -214,7 +209,7 @@ class BaseUrlDownloader(SourcePlugin[TMultiURLSourceOptionsValidator], ABC): def __init__( self, - options: TMultiURLSourceOptionsValidator, + options: MultiUrlValidator, enhanced_download_archive: EnhancedDownloadArchive, download_ytdl_options: YTDLOptionsBuilder, metadata_ytdl_options: YTDLOptionsBuilder, @@ -300,7 +295,7 @@ class BaseUrlDownloader(SourcePlugin[TMultiURLSourceOptionsValidator], ABC): @property def collection(self) -> MultiUrlValidator: """Return the download options collection""" - return self.plugin_options.collection_validator + return self.plugin_options @contextlib.contextmanager def _separate_download_archives(self, clear_info_json_files: bool = False): diff --git a/src/ytdl_sub/downloaders/url/multi_url.py b/src/ytdl_sub/downloaders/url/multi_url.py index 40c2d5d3..01acdbb8 100644 --- a/src/ytdl_sub/downloaders/url/multi_url.py +++ b/src/ytdl_sub/downloaders/url/multi_url.py @@ -1,14 +1,8 @@ -from typing import Dict -from typing import List - -from ytdl_sub.downloaders.url.downloader import BaseUrlDownloader -from ytdl_sub.downloaders.url.multi_url_source_options_validator import ( - MultiUrlSourceOptionsValidator, -) from ytdl_sub.downloaders.url.validators import MultiUrlValidator -class MultiUrlDownloadOptions(MultiUrlValidator, MultiUrlSourceOptionsValidator): +# TODO: Remove later - keep for docstring +class MultiUrlDownloadOptions(MultiUrlValidator): """ Downloads from multiple URLs. If an entry is returned from more than one URL, it will resolve to the bottom-most URL settings. @@ -42,29 +36,3 @@ class MultiUrlDownloadOptions(MultiUrlValidator, MultiUrlSourceOptionsValidator) - name: "season{season_index}-poster.jpg" uid: "latest_entry" """ - - @property - def collection_validator(self) -> MultiUrlValidator: - """Returns itself!""" - return self - - def validate_with_variables( - self, source_variables: List[str], override_variables: Dict[str, str] - ) -> None: - """ - Validates any source variables added by the collection - """ - super().validate_with_variables( - source_variables=source_variables, override_variables=override_variables - ) - - has_non_empty_url = False - for url_validator in self.urls.list: - has_non_empty_url |= bool(url_validator.url.apply_formatter(override_variables)) - - if not has_non_empty_url: - raise self._validation_exception("Must contain at least one url that is non-empty") - - -class MultiUrlDownloader(BaseUrlDownloader[MultiUrlDownloadOptions]): - plugin_options_type = MultiUrlDownloadOptions diff --git a/src/ytdl_sub/downloaders/url/multi_url_source_options_validator.py b/src/ytdl_sub/downloaders/url/multi_url_source_options_validator.py deleted file mode 100644 index 4ccedf54..00000000 --- a/src/ytdl_sub/downloaders/url/multi_url_source_options_validator.py +++ /dev/null @@ -1,47 +0,0 @@ -import abc -from abc import ABC -from typing import Dict -from typing import List -from typing import TypeVar - -from ytdl_sub.config.preset_options import OptionsValidator -from ytdl_sub.downloaders.url.validators import MultiUrlValidator - - -class MultiUrlSourceOptionsValidator(OptionsValidator, ABC): - """ - Placeholder class to define downloader options - """ - - @property - @abc.abstractmethod - def collection_validator(self) -> MultiUrlValidator: - """ - Returns - ------- - MultiUrlValidator - To determine how the entries are downloaded - """ - - def added_source_variables(self) -> List[str]: - """ - Returns - ------- - Added source variables on the collection - """ - return self.collection_validator.added_source_variables() - - def validate_with_variables( - self, source_variables: List[str], override_variables: Dict[str, str] - ) -> None: - """ - Validates any source variables added by the collection - """ - self.collection_validator.validate_with_variables( - source_variables=source_variables, override_variables=override_variables - ) - - -TMultiURLSourceOptionsValidator = TypeVar( - "TMultiURLSourceOptionsValidator", bound=MultiUrlSourceOptionsValidator -) diff --git a/src/ytdl_sub/downloaders/url/url.py b/src/ytdl_sub/downloaders/url/url.py index cd79c430..6fcbb9a7 100644 --- a/src/ytdl_sub/downloaders/url/url.py +++ b/src/ytdl_sub/downloaders/url/url.py @@ -1,12 +1,8 @@ -from ytdl_sub.downloaders.url.downloader import BaseUrlDownloader -from ytdl_sub.downloaders.url.multi_url_source_options_validator import ( - MultiUrlSourceOptionsValidator, -) -from ytdl_sub.downloaders.url.validators import MultiUrlValidator from ytdl_sub.downloaders.url.validators import UrlValidator -class UrlDownloadOptions(UrlValidator, MultiUrlSourceOptionsValidator): +# TODO: Remove later - keep for docstring +class UrlDownloadOptions(UrlValidator): """ Downloads from a single URL supported by yt-dlp. @@ -28,15 +24,3 @@ class UrlDownloadOptions(UrlValidator, MultiUrlSourceOptionsValidator): uid: "banner_uncropped" download_reverse: True """ - - @property - def collection_validator(self) -> MultiUrlValidator: - """Returns itself!""" - return MultiUrlValidator( - name=self._name, - value={"urls": [self._value]}, - ) - - -class UrlDownloader(BaseUrlDownloader[UrlDownloadOptions]): - plugin_options_type = UrlDownloadOptions diff --git a/src/ytdl_sub/downloaders/url/validators.py b/src/ytdl_sub/downloaders/url/validators.py index 53486117..42f28ece 100644 --- a/src/ytdl_sub/downloaders/url/validators.py +++ b/src/ytdl_sub/downloaders/url/validators.py @@ -1,9 +1,10 @@ +import copy from typing import Any from typing import Dict from typing import List from typing import Optional -from ytdl_sub.config.preset_options import OptionsDictValidator +from ytdl_sub.config.preset_options import OptionsValidator from ytdl_sub.validators.strict_dict_validator import StrictDictValidator from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator from ytdl_sub.validators.string_formatter_validators import OverridesStringFormatterValidator @@ -172,26 +173,41 @@ class UrlListValidator(ListValidator[UrlValidator]): collection_variables[var] = added_variables[var] -class MultiUrlValidator(OptionsDictValidator): +class MultiUrlValidator(OptionsValidator): """ Downloads from multiple URLs. If an entry is returned from more than one URL, it will resolve to the bottom-most URL settings. """ - _required_keys = {"urls"} - @classmethod def partial_validate(cls, name: str, value: Any) -> None: """ Partially validate a collection """ if isinstance(value, dict): - value["urls"] = value.get("urls", [{"url": "placeholder"}]) + value["url"] = value.get("url", "sadfasdf") _ = cls(name, value) def __init__(self, name, value): super().__init__(name, value) - self._urls = self._validate_key(key="urls", validator=UrlListValidator) + + # Copy since we're popping things + value_copy = copy.deepcopy(value) + if isinstance(value, dict): + # Pop old required field in case it's still there + value_copy.pop("download_strategy", None) + + if "urls" in value_copy: + self._urls = UrlListValidator(name=name, value=value_copy["urls"]) + else: + # Validate using a single URL validator first + _ = UrlValidator(name=name, value=value_copy) + self._urls = UrlListValidator(name=name, value=[value_copy]) + else: + # Should error here. TODO: Add simplifications download here (string, list) + self._urls = UrlListValidator( + name=name, value=UrlValidator(name=name, value=value_copy) + ) @property def urls(self) -> UrlListValidator: @@ -248,3 +264,11 @@ class MultiUrlValidator(OptionsDictValidator): _ = StringFormatterValidator( name=f"{self._name}.{source_var_name}", value=source_var_formatter_str ).apply_formatter(base_variables) + + # Ensure at least URL is non-empty + has_non_empty_url = False + for url_validator in self.urls.list: + has_non_empty_url |= bool(url_validator.url.apply_formatter(override_variables)) + + if not has_non_empty_url: + raise self._validation_exception("Must contain at least one url that is non-empty") diff --git a/tests/unit/config/test_config_file.py b/tests/unit/config/test_config_file.py index 24de3269..0edfbd08 100644 --- a/tests/unit/config/test_config_file.py +++ b/tests/unit/config/test_config_file.py @@ -98,7 +98,8 @@ class TestConfigFilePartiallyValidatesPresets: preset_dict={"download": {"download_strategy": "multi_url", "bad_key": "nope"}}, expected_error_message="Validation error in partial_preset.download: " "'partial_preset.download' contains the field 'bad_key' which is not allowed. " - "Allowed fields: urls", + "Allowed fields: download_reverse, playlist_thumbnails, source_thumbnails, url, " + "variables", ) @pytest.mark.parametrize( diff --git a/tests/unit/config/test_preset.py b/tests/unit/config/test_preset.py index e6d65fe8..57698aed 100644 --- a/tests/unit/config/test_preset.py +++ b/tests/unit/config/test_preset.py @@ -3,7 +3,6 @@ import re import pytest from ytdl_sub.config.preset import Preset -from ytdl_sub.downloaders.url.multi_url import MultiUrlDownloadOptions from ytdl_sub.plugins.nfo_tags import NfoTagsOptions from ytdl_sub.utils.exceptions import StringFormattingVariableNotFoundException from ytdl_sub.utils.exceptions import ValidationException diff --git a/tests/unit/prebuilt_presets/conftest.py b/tests/unit/prebuilt_presets/conftest.py index 7b53e641..eb17d21a 100644 --- a/tests/unit/prebuilt_presets/conftest.py +++ b/tests/unit/prebuilt_presets/conftest.py @@ -10,7 +10,7 @@ import pytest from resources import copy_file_fixture from ytdl_sub.config.config_file import ConfigFile -from ytdl_sub.downloaders.url.downloader import BaseUrlDownloader +from ytdl_sub.downloaders.url.downloader import MultiUrlDownloader from ytdl_sub.downloaders.ytdlp import YTDLP from ytdl_sub.entries.variables.kwargs import DESCRIPTION from ytdl_sub.entries.variables.kwargs import EPOCH @@ -201,7 +201,7 @@ def mock_download_collection_entries( with patch.object( YTDLP, "extract_info_via_info_json", new=_write_entries_to_working_dir ), patch.object( - BaseUrlDownloader, "_extract_entry_info_with_retry", new=lambda _, entry: entry + MultiUrlDownloader, "_extract_entry_info_with_retry", new=lambda _, entry: entry ): # Stub out metadata. TODO: update this if we do metadata plugins yield From d24048bb015031fafc6fcdb3d47d44114df3c298 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Tue, 25 Jul 2023 19:51:50 -0700 Subject: [PATCH 38/42] [REFACTOR] No more download strategy (#669) * [REFACTOR] No more download strategy * remove more --- src/ytdl_sub/config/preset.py | 168 +----------------- src/ytdl_sub/config/preset_class_mappings.py | 79 -------- src/ytdl_sub/downloaders/url/downloader.py | 3 +- .../subscriptions/base_subscription.py | 15 +- .../subscriptions/subscription_download.py | 5 +- .../subscription_ytdl_options.py | 5 - tests/unit/config/test_config_file.py | 43 ----- 7 files changed, 12 insertions(+), 306 deletions(-) diff --git a/src/ytdl_sub/config/preset.py b/src/ytdl_sub/config/preset.py index fdedfdb9..f5ecd3ac 100644 --- a/src/ytdl_sub/config/preset.py +++ b/src/ytdl_sub/config/preset.py @@ -12,14 +12,13 @@ from mergedeep import mergedeep from ytdl_sub.config.config_validator import ConfigValidator from ytdl_sub.config.plugin import Plugin -from ytdl_sub.config.preset_class_mappings import DownloadStrategyMapping from ytdl_sub.config.preset_class_mappings import PluginMapping from ytdl_sub.config.preset_options import OptionsValidator from ytdl_sub.config.preset_options import OutputOptions from ytdl_sub.config.preset_options import Overrides from ytdl_sub.config.preset_options import TOptionsValidator from ytdl_sub.config.preset_options import YTDLOptions -from ytdl_sub.downloaders.source_plugin import SourcePlugin +from ytdl_sub.downloaders.url.validators import MultiUrlValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.prebuilt_presets import PREBUILT_PRESET_NAMES from ytdl_sub.prebuilt_presets import PUBLISHED_PRESET_NAMES @@ -34,16 +33,15 @@ from ytdl_sub.validators.string_formatter_validators import StringFormatterValid from ytdl_sub.validators.validators import DictValidator from ytdl_sub.validators.validators import ListValidator from ytdl_sub.validators.validators import StringListValidator -from ytdl_sub.validators.validators import StringValidator from ytdl_sub.validators.validators import Validator from ytdl_sub.validators.validators import validation_exception PRESET_KEYS = { "preset", + "download", "output_options", "ytdl_options", "overrides", - *DownloadStrategyMapping.sources(), *PluginMapping.plugins(), } @@ -101,49 +99,6 @@ class PresetPlugins: return None -class DownloadStrategyValidator(StrictDictValidator): - """ - Ensures a download strategy exists for a source. Does not validate any more than that. - The respective Downloader's option validator will do that. - """ - - # All media sources must define a download strategy - _required_keys = {"download_strategy"} - - # Extra fields will be strict-validated using other StictDictValidators - _allow_extra_keys = True - - def __init__(self, name: str, value: Any): - super().__init__(name=name, value=value) - self.download_strategy_name = self._validate_key( - key="download_strategy", - validator=StringValidator, - ).value - - def get(self, downloader_source: str) -> Type[SourcePlugin]: - """ - Parameters - ---------- - downloader_source: - Name of the download source - - Returns - ------- - The downloader class - - Raises - ------ - ValidationException - If the download strategy is invalid - """ - try: - return DownloadStrategyMapping.get( - source=downloader_source, download_strategy=self.download_strategy_name - ) - except ValueError as value_exc: - raise self._validation_exception(error_message=value_exc) - - class _PresetShell(StrictDictValidator): # Have all present keys optional since parent presets could not have all the # required keys. They will get validated in the init after the mergedeep of dicts @@ -152,70 +107,6 @@ class _PresetShell(StrictDictValidator): class Preset(_PresetShell): - @classmethod - def _validate_download_strategy( - cls, config: ConfigValidator, name: str, value: Dict, parent_presets: StringListValidator - ) -> None: - sources: List[str] = [] - for source_name in DownloadStrategyMapping.sources(): - if source_name in value: - sources.append(source_name) - - if len(sources) > 1: - raise validation_exception( - name=name, - error_message=f"Contains the sources {', '.join(sources)} but can only have one", - ) - - # If no sources, nothing more to validate - if not sources: - return - - # Ensure all parent/child presets use the same download strategy - preset_strs = [preset.value for preset in parent_presets.list] + [name] - download_strategy: Optional[str] = None - download_strategy_preset: Optional[str] = None - for parent_preset in preset_strs: - # See if the parent has a download strategy - parent_download_strategy = ( - config.presets.dict.get(parent_preset, {}) - .get("download", {}) - .get("download_strategy") - ) - - # If the parent download strategy is None, do nothing - if parent_download_strategy is None: - continue - - # If download strategy is not set, then set it to parent download strategy - if download_strategy is None: - download_strategy = parent_download_strategy - download_strategy_preset = parent_preset - - # If it's set and does not match the parent download strategy, error - if download_strategy is not None and download_strategy != parent_download_strategy: - raise ValidationException( - f"Preset {download_strategy_preset} uses download strategy {download_strategy}" - f", but is inherited by preset {parent_preset} which uses download strategy " - f"{parent_download_strategy}." - ) - - source_name = sources[0] - source_dict = copy.deepcopy(value[source_name]) - - # Set the parent download strategy if present - if download_strategy: - source_dict["download_strategy"] = download_strategy - - downloader = DownloadStrategyValidator(name=f"{name}.{source_name}", value=source_dict).get( - downloader_source=source_name - ) - del source_dict["download_strategy"] - - downloader.plugin_options_type.partial_validate( - name=f"{name}.{source_name}", value=source_dict - ) - @classmethod def preset_partial_validate(cls, config: ConfigValidator, name: str, value: Any) -> None: """ @@ -250,9 +141,7 @@ class Preset(_PresetShell): presets=config.presets.keys, ) - cls._validate_download_strategy( - config=config, name=name, value=value, parent_presets=parent_presets - ) + cls._partial_validate_key(name, value, "download", MultiUrlValidator) cls._partial_validate_key(name, value, "output_options", OutputOptions) cls._partial_validate_key(name, value, "ytdl_options", YTDLOptions) cls._partial_validate_key(name, value, "overrides", Overrides) @@ -269,53 +158,6 @@ class Preset(_PresetShell): def _source_variables(self) -> List[str]: return Entry.source_variables() - def __validate_and_get_downloader(self, downloader_source: str) -> Type[SourcePlugin]: - return self._validate_key(key=downloader_source, validator=DownloadStrategyValidator).get( - downloader_source=downloader_source - ) - - def __validate_and_get_downloader_options( - self, downloader_source: str, downloader: Type[SourcePlugin] - ) -> OptionsValidator: - # Remove the download_strategy key before validating it against the downloader options - # TODO: make this cleaner - del self._dict[downloader_source]["download_strategy"] - return self._validate_key(key=downloader_source, validator=downloader.plugin_options_type) - - def __validate_and_get_downloader_and_options( - self, - ) -> Tuple[Type[SourcePlugin], OptionsValidator]: - downloader: Optional[Type[SourcePlugin]] = None - download_options: Optional[OptionsValidator] = None - downloader_sources = DownloadStrategyMapping.sources() - - for key in self._keys: - # skip if the key is not a download source - if key not in downloader_sources: - continue - - # Ensure there are not multiple sources, i.e. youtube and soundcloud - if downloader: - raise self._validation_exception( - f"'{self._name}' can only have one of the following sources: " - f"{', '.join(downloader_sources)}" - ) - - downloader = self.__validate_and_get_downloader(downloader_source=key) - download_options = self.__validate_and_get_downloader_options( - downloader_source=key, downloader=downloader - ) - - # If downloader was not set, error since it is required - if not downloader: - - raise self._validation_exception( - f"'{self._name} must have one of the following sources: " - f"{', '.join(downloader_sources)}" - ) - - return downloader, download_options - def __validate_and_get_plugins(self) -> PresetPlugins: preset_plugins = PresetPlugins() @@ -474,7 +316,9 @@ class Preset(_PresetShell): # Perform the merge of parent presets before validating any keys self.__merge_parent_preset_dicts_if_present(config=config) - self.downloader, self.downloader_options = self.__validate_and_get_downloader_and_options() + self.downloader_options: MultiUrlValidator = self._validate_key( + key="download", validator=MultiUrlValidator + ) self.output_options = self._validate_key( key="output_options", diff --git a/src/ytdl_sub/config/preset_class_mappings.py b/src/ytdl_sub/config/preset_class_mappings.py index f3745d5c..060d8c89 100644 --- a/src/ytdl_sub/config/preset_class_mappings.py +++ b/src/ytdl_sub/config/preset_class_mappings.py @@ -3,8 +3,6 @@ from typing import List from typing import Type from ytdl_sub.config.plugin import Plugin -from ytdl_sub.downloaders.source_plugin import SourcePlugin -from ytdl_sub.downloaders.url.downloader import MultiUrlDownloader from ytdl_sub.plugins.audio_extract import AudioExtractPlugin from ytdl_sub.plugins.chapters import ChaptersPlugin from ytdl_sub.plugins.date_range import DateRangePlugin @@ -21,83 +19,6 @@ from ytdl_sub.plugins.subtitles import SubtitlesPlugin from ytdl_sub.plugins.video_tags import VideoTagsPlugin -class DownloadStrategyMapping: - """ - Maps downloader strategies defined in the preset to its respective downloader class - """ - - _MAPPING: Dict[str, Dict[str, Type[SourcePlugin]]] = { - "download": { - "multi_url": MultiUrlDownloader, - "url": MultiUrlDownloader, - }, - } - - @classmethod - def sources(cls) -> List[str]: - """ - Returns - ------- - Available download sources - """ - return sorted(list(cls._MAPPING.keys())) - - @classmethod - def _validate_is_source(cls, source: str) -> None: - """ - Ensure the source exists - """ - if source not in cls.sources(): - raise ValueError( - f"Tried to use source '{source}' which does not exist. Available sources: " - f"{', '.join(cls.sources())}" - ) - - @classmethod - def source_download_strategies(cls, source: str) -> List[str]: - """ - Parameters - ---------- - source - Name of the source - - Returns - ------- - Available download strategies for the given source - """ - cls._validate_is_source(source) - return sorted(list(cls._MAPPING[source].keys())) - - @classmethod - def _validate_is_download_strategy(cls, source: str, download_strategy: str) -> None: - """ - Ensure the download strategy for the given source exists - """ - if download_strategy not in cls.source_download_strategies(source): - raise ValueError( - f"Tried to use download strategy '{download_strategy}' with source '{source}', " - f"which does not exist. Available download strategies: " - f"{', '.join(cls.source_download_strategies(source))}" - ) - - @classmethod - def get(cls, source: str, download_strategy: str) -> Type[SourcePlugin]: - """ - Parameters - ---------- - source: - The source (i.e. 'youtube', 'soundcloud') of the downloader - download_strategy: - The download strategy name - - Returns - ------- - The downloader class - """ - cls._validate_is_download_strategy(source, download_strategy) - return cls._MAPPING[source][download_strategy] - - class PluginMapping: """ Maps plugins defined in the preset to its respective plugin class diff --git a/src/ytdl_sub/downloaders/url/downloader.py b/src/ytdl_sub/downloaders/url/downloader.py index 96c94888..d66749af 100644 --- a/src/ytdl_sub/downloaders/url/downloader.py +++ b/src/ytdl_sub/downloaders/url/downloader.py @@ -1,6 +1,5 @@ import contextlib import os -from abc import ABC from pathlib import Path from typing import Dict from typing import Iterable @@ -188,7 +187,7 @@ class UrlDownloaderCollectionVariablePlugin(SourcePluginExtension): return entry -class MultiUrlDownloader(SourcePlugin[MultiUrlValidator], ABC): +class MultiUrlDownloader(SourcePlugin[MultiUrlValidator]): """ Class that interacts with ytdl to perform the download of metadata and content, and should translate that to list of Entry objects. diff --git a/src/ytdl_sub/subscriptions/base_subscription.py b/src/ytdl_sub/subscriptions/base_subscription.py index 82c697b5..e5c38ca7 100644 --- a/src/ytdl_sub/subscriptions/base_subscription.py +++ b/src/ytdl_sub/subscriptions/base_subscription.py @@ -1,15 +1,13 @@ from abc import ABC from pathlib import Path -from typing import Type from ytdl_sub.config.config_validator import ConfigOptions from ytdl_sub.config.preset import Preset from ytdl_sub.config.preset import PresetPlugins -from ytdl_sub.config.preset_options import OptionsValidator from ytdl_sub.config.preset_options import OutputOptions from ytdl_sub.config.preset_options import Overrides from ytdl_sub.config.preset_options import YTDLOptions -from ytdl_sub.downloaders.source_plugin import SourcePlugin +from ytdl_sub.downloaders.url.validators import MultiUrlValidator from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive @@ -52,16 +50,7 @@ class BaseSubscription(ABC): ) @property - def downloader_class(self) -> Type[SourcePlugin]: - """ - Returns - ------- - This subscription's downloader class - """ - return self._preset_options.downloader - - @property - def downloader_options(self) -> OptionsValidator: + def downloader_options(self) -> MultiUrlValidator: """ Returns ------- diff --git a/src/ytdl_sub/subscriptions/subscription_download.py b/src/ytdl_sub/subscriptions/subscription_download.py index 25c97a09..b0de508d 100644 --- a/src/ytdl_sub/subscriptions/subscription_download.py +++ b/src/ytdl_sub/subscriptions/subscription_download.py @@ -11,6 +11,7 @@ from ytdl_sub.config.plugin import SplitPlugin from ytdl_sub.downloaders.info_json.info_json_downloader import InfoJsonDownloader from ytdl_sub.downloaders.info_json.info_json_downloader import InfoJsonDownloaderOptions from ytdl_sub.downloaders.source_plugin import SourcePlugin +from ytdl_sub.downloaders.url.downloader import MultiUrlDownloader from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.entries.entry import Entry from ytdl_sub.subscriptions.base_subscription import BaseSubscription @@ -330,7 +331,7 @@ class SubscriptionDownload(BaseSubscription, ABC): dry_run=dry_run, ) - downloader = self.downloader_class( + downloader = MultiUrlDownloader( options=self.downloader_options, enhanced_download_archive=self._enhanced_download_archive, download_ytdl_options=subscription_ytdl_options.download_builder(), @@ -368,7 +369,7 @@ class SubscriptionDownload(BaseSubscription, ABC): # Re-add the original downloader class' plugins plugins.extend( - self.downloader_class( + MultiUrlDownloader( options=self.downloader_options, enhanced_download_archive=self._enhanced_download_archive, download_ytdl_options=subscription_ytdl_options.download_builder(), diff --git a/src/ytdl_sub/subscriptions/subscription_ytdl_options.py b/src/ytdl_sub/subscriptions/subscription_ytdl_options.py index b4bdeb3e..4ce74409 100644 --- a/src/ytdl_sub/subscriptions/subscription_ytdl_options.py +++ b/src/ytdl_sub/subscriptions/subscription_ytdl_options.py @@ -7,7 +7,6 @@ from typing import TypeVar from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.preset import Preset -from ytdl_sub.downloaders.source_plugin import SourcePlugin from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder from ytdl_sub.plugins.audio_extract import AudioExtractPlugin from ytdl_sub.plugins.chapters import ChaptersPlugin @@ -42,10 +41,6 @@ class SubscriptionYTDLOptions: return plugin return None - @property - def _downloader(self) -> Type[SourcePlugin]: - return self._preset.downloader - @property def _global_options(self) -> Dict: """ diff --git a/tests/unit/config/test_config_file.py b/tests/unit/config/test_config_file.py index 0edfbd08..2966df44 100644 --- a/tests/unit/config/test_config_file.py +++ b/tests/unit/config/test_config_file.py @@ -6,7 +6,6 @@ import pytest from ytdl_sub.config.config_file import ConfigFile from ytdl_sub.config.preset import PRESET_KEYS -from ytdl_sub.config.preset_class_mappings import DownloadStrategyMapping from ytdl_sub.config.preset_class_mappings import PluginMapping from ytdl_sub.utils.exceptions import ValidationException @@ -57,11 +56,6 @@ class TestConfigFilePartiallyValidatesPresets: if plugin not in excluded_plugins: self._partial_validate({plugin: {}}) - @pytest.mark.parametrize("source", DownloadStrategyMapping.sources()) - def test_success__empty_sources(self, source: str): - for download_strategy in DownloadStrategyMapping.source_download_strategies(source): - self._partial_validate({source: {"download_strategy": download_strategy}}) - def test_error__bad_preset_section(self): self._partial_validate( preset_dict={"does_not_exist": "lol"}, @@ -78,21 +72,6 @@ class TestConfigFilePartiallyValidatesPresets: # "Contains the sources download, youtube but can only have one", # ) - def test_error__no_download_strategy(self): - self._partial_validate( - preset_dict={"download": {}}, - expected_error_message="Validation error in partial_preset.download: " - "missing the required field 'download_strategy'", - ) - - def test_error__bad_download_strategy(self): - self._partial_validate( - preset_dict={"download": {"download_strategy": "fail"}}, - expected_error_message="Validation error in partial_preset.download: " - "Tried to use download strategy 'fail' with source 'download', " - "which does not exist. Available download strategies: multi_url, url", - ) - def test_error__bad_download_strategy_args(self): self._partial_validate( preset_dict={"download": {"download_strategy": "multi_url", "bad_key": "nope"}}, @@ -186,25 +165,3 @@ class TestConfigFilePartiallyValidatesPresets: }, }, ) - - def test_partial_validate_partial_download_strategies_mismatch(self): - with pytest.raises( - ValidationException, - match=re.escape( - "Preset parent uses download strategy multi_url, but is inherited by preset child " - "which uses download strategy url." - ), - ): - _ = ConfigFile( - name="test_partial_validate", - value={ - "configuration": {"working_directory": "."}, - "presets": { - "parent": {"download": {"download_strategy": "multi_url"}}, - "child": { - "preset": "parent", - "download": {"download_strategy": "url", "url": "should work"}, - }, - }, - }, - ) From 598b1da8a46f535ba37083e20bae58f0e46fd233 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Tue, 25 Jul 2023 20:26:04 -0700 Subject: [PATCH 39/42] [REFACTOR] Purge download_strategy from configs + tests (#670) --- docker/root/defaults/config.yaml | 3 -- examples/music_audio_config.yaml | 2 - examples/music_videos_config.yaml | 1 - src/ytdl_sub/downloaders/url/multi_url.py | 1 - src/ytdl_sub/downloaders/url/url.py | 1 - .../prebuilt_presets/internal/view.yaml | 1 - .../music_videos/kodi_music_videos.yaml | 1 - .../prebuilt_presets/tv_show/tv_show.yaml | 4 -- .../tv_show/tv_show_collection.yaml | 40 ------------------- tests/e2e/plugins/test_music_tags.py | 1 - tests/unit/config/conftest.py | 1 - tests/unit/config/test_config_file.py | 39 +----------------- tests/unit/config/test_preset.py | 27 +++++-------- 13 files changed, 11 insertions(+), 111 deletions(-) diff --git a/docker/root/defaults/config.yaml b/docker/root/defaults/config.yaml index 3ff27547..f8cece1c 100644 --- a/docker/root/defaults/config.yaml +++ b/docker/root/defaults/config.yaml @@ -17,9 +17,6 @@ configuration: presets: video: - download: - download_strategy: "url" - output_options: output_directory: "/tmp/ytdl-sub-output" file_name: "{uid}.{ext}" diff --git a/examples/music_audio_config.yaml b/examples/music_audio_config.yaml index b9b30bce..a8df5f78 100644 --- a/examples/music_audio_config.yaml +++ b/examples/music_audio_config.yaml @@ -110,7 +110,6 @@ presets: preset: "base" download: - download_strategy: "url" url: "{url}" #################################################################################################### @@ -166,7 +165,6 @@ presets: # Download using the multi_url strategy download: - download_strategy: "multi_url" urls: # The first URL will be all the artist's tracks. # Treat these as singles - an album with a single track diff --git a/examples/music_videos_config.yaml b/examples/music_videos_config.yaml index 15408f01..2adacc7b 100644 --- a/examples/music_videos_config.yaml +++ b/examples/music_videos_config.yaml @@ -22,7 +22,6 @@ presets: download: # We will only use a single URL to download music video(s). # Make {url} an override variable to set later. - download_strategy: "url" url: "{url}" # For advanced YTDL users only; any YTDL parameter can be set here. diff --git a/src/ytdl_sub/downloaders/url/multi_url.py b/src/ytdl_sub/downloaders/url/multi_url.py index 01acdbb8..b55b8eed 100644 --- a/src/ytdl_sub/downloaders/url/multi_url.py +++ b/src/ytdl_sub/downloaders/url/multi_url.py @@ -15,7 +15,6 @@ class MultiUrlDownloadOptions(MultiUrlValidator): my_example_preset: download: # required - download_strategy: "multi_url" urls: - url: "youtube.com/channel/UCsvn_Po0SmunchJYtttWpOxMg" variables: diff --git a/src/ytdl_sub/downloaders/url/url.py b/src/ytdl_sub/downloaders/url/url.py index 6fcbb9a7..e5589645 100644 --- a/src/ytdl_sub/downloaders/url/url.py +++ b/src/ytdl_sub/downloaders/url/url.py @@ -14,7 +14,6 @@ class UrlDownloadOptions(UrlValidator): my_example_preset: download: # required - download_strategy: "url" url: "youtube.com/channel/UCsvn_Po0SmunchJYtttWpOxMg" # optional playlist_thumbnails: diff --git a/src/ytdl_sub/prebuilt_presets/internal/view.yaml b/src/ytdl_sub/prebuilt_presets/internal/view.yaml index 3a745ca3..ac17bb7b 100644 --- a/src/ytdl_sub/prebuilt_presets/internal/view.yaml +++ b/src/ytdl_sub/prebuilt_presets/internal/view.yaml @@ -2,7 +2,6 @@ presets: _view: download: - download_strategy: "url" url: "{url}" output_options: output_directory: "/tmp/ytdl-sub-view" diff --git a/src/ytdl_sub/prebuilt_presets/music_videos/kodi_music_videos.yaml b/src/ytdl_sub/prebuilt_presets/music_videos/kodi_music_videos.yaml index 947852aa..483a7ec0 100644 --- a/src/ytdl_sub/prebuilt_presets/music_videos/kodi_music_videos.yaml +++ b/src/ytdl_sub/prebuilt_presets/music_videos/kodi_music_videos.yaml @@ -2,7 +2,6 @@ presets: # TODO: Update this kodi_music_video: download: - download_strategy: "url" url: "{music_video_url}" output_options: diff --git a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml index 2fbd4c9a..34ac56b9 100644 --- a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml +++ b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml @@ -34,7 +34,6 @@ presets: # TV show from one or more sources. Uses {url}'s avatar and banner as poster and fanart _tv_show_by_date: download: - download_strategy: "multi_url" urls: - url: "{url}" playlist_thumbnails: @@ -87,9 +86,6 @@ presets: # TV show from a collection. Must specify additional `tv_show_collection_season` presets in # addition. Each season sets its own `collection_season_number/_padded` _tv_show_collection: - download: - download_strategy: "multi_url" - overrides: season_number: "{collection_season_number}" season_number_padded: "{collection_season_number_padded}" \ No newline at end of file diff --git a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml index a638a8be..e6b311c4 100644 --- a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml +++ b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml @@ -21,7 +21,6 @@ presets: collection_season_1: download: - download_strategy: "multi_url" urls: - url: "{collection_season_1_url}" variables: @@ -46,7 +45,6 @@ presets: collection_season_2: download: - download_strategy: "multi_url" urls: - url: "{collection_season_2_url}" variables: @@ -65,7 +63,6 @@ presets: collection_season_3: download: - download_strategy: "multi_url" urls: - url: "{collection_season_3_url}" variables: @@ -84,7 +81,6 @@ presets: collection_season_4: download: - download_strategy: "multi_url" urls: - url: "{collection_season_4_url}" variables: @@ -103,7 +99,6 @@ presets: collection_season_5: download: - download_strategy: "multi_url" urls: - url: "{collection_season_5_url}" variables: @@ -122,7 +117,6 @@ presets: collection_season_6: download: - download_strategy: "multi_url" urls: - url: "{collection_season_6_url}" variables: @@ -141,7 +135,6 @@ presets: collection_season_7: download: - download_strategy: "multi_url" urls: - url: "{collection_season_7_url}" variables: @@ -160,7 +153,6 @@ presets: collection_season_8: download: - download_strategy: "multi_url" urls: - url: "{collection_season_8_url}" variables: @@ -179,7 +171,6 @@ presets: collection_season_9: download: - download_strategy: "multi_url" urls: - url: "{collection_season_9_url}" variables: @@ -198,7 +189,6 @@ presets: collection_season_10: download: - download_strategy: "multi_url" urls: - url: "{collection_season_10_url}" variables: @@ -217,7 +207,6 @@ presets: collection_season_11: download: - download_strategy: "multi_url" urls: - url: "{collection_season_11_url}" variables: @@ -236,7 +225,6 @@ presets: collection_season_12: download: - download_strategy: "multi_url" urls: - url: "{collection_season_12_url}" variables: @@ -255,7 +243,6 @@ presets: collection_season_13: download: - download_strategy: "multi_url" urls: - url: "{collection_season_13_url}" variables: @@ -274,7 +261,6 @@ presets: collection_season_14: download: - download_strategy: "multi_url" urls: - url: "{collection_season_14_url}" variables: @@ -293,7 +279,6 @@ presets: collection_season_15: download: - download_strategy: "multi_url" urls: - url: "{collection_season_15_url}" variables: @@ -312,7 +297,6 @@ presets: collection_season_16: download: - download_strategy: "multi_url" urls: - url: "{collection_season_16_url}" variables: @@ -331,7 +315,6 @@ presets: collection_season_17: download: - download_strategy: "multi_url" urls: - url: "{collection_season_17_url}" variables: @@ -350,7 +333,6 @@ presets: collection_season_18: download: - download_strategy: "multi_url" urls: - url: "{collection_season_18_url}" variables: @@ -369,7 +351,6 @@ presets: collection_season_19: download: - download_strategy: "multi_url" urls: - url: "{collection_season_19_url}" variables: @@ -388,7 +369,6 @@ presets: collection_season_20: download: - download_strategy: "multi_url" urls: - url: "{collection_season_20_url}" variables: @@ -407,7 +387,6 @@ presets: collection_season_21: download: - download_strategy: "multi_url" urls: - url: "{collection_season_21_url}" variables: @@ -426,7 +405,6 @@ presets: collection_season_22: download: - download_strategy: "multi_url" urls: - url: "{collection_season_22_url}" variables: @@ -445,7 +423,6 @@ presets: collection_season_23: download: - download_strategy: "multi_url" urls: - url: "{collection_season_23_url}" variables: @@ -464,7 +441,6 @@ presets: collection_season_24: download: - download_strategy: "multi_url" urls: - url: "{collection_season_24_url}" variables: @@ -483,7 +459,6 @@ presets: collection_season_25: download: - download_strategy: "multi_url" urls: - url: "{collection_season_25_url}" variables: @@ -502,7 +477,6 @@ presets: collection_season_26: download: - download_strategy: "multi_url" urls: - url: "{collection_season_26_url}" variables: @@ -521,7 +495,6 @@ presets: collection_season_27: download: - download_strategy: "multi_url" urls: - url: "{collection_season_27_url}" variables: @@ -540,7 +513,6 @@ presets: collection_season_28: download: - download_strategy: "multi_url" urls: - url: "{collection_season_28_url}" variables: @@ -559,7 +531,6 @@ presets: collection_season_29: download: - download_strategy: "multi_url" urls: - url: "{collection_season_29_url}" variables: @@ -578,7 +549,6 @@ presets: collection_season_30: download: - download_strategy: "multi_url" urls: - url: "{collection_season_30_url}" variables: @@ -597,7 +567,6 @@ presets: collection_season_31: download: - download_strategy: "multi_url" urls: - url: "{collection_season_31_url}" variables: @@ -616,7 +585,6 @@ presets: collection_season_32: download: - download_strategy: "multi_url" urls: - url: "{collection_season_32_url}" variables: @@ -635,7 +603,6 @@ presets: collection_season_33: download: - download_strategy: "multi_url" urls: - url: "{collection_season_33_url}" variables: @@ -654,7 +621,6 @@ presets: collection_season_34: download: - download_strategy: "multi_url" urls: - url: "{collection_season_34_url}" variables: @@ -673,7 +639,6 @@ presets: collection_season_35: download: - download_strategy: "multi_url" urls: - url: "{collection_season_35_url}" variables: @@ -692,7 +657,6 @@ presets: collection_season_36: download: - download_strategy: "multi_url" urls: - url: "{collection_season_36_url}" variables: @@ -711,7 +675,6 @@ presets: collection_season_37: download: - download_strategy: "multi_url" urls: - url: "{collection_season_37_url}" variables: @@ -730,7 +693,6 @@ presets: collection_season_38: download: - download_strategy: "multi_url" urls: - url: "{collection_season_38_url}" variables: @@ -749,7 +711,6 @@ presets: collection_season_39: download: - download_strategy: "multi_url" urls: - url: "{collection_season_39_url}" variables: @@ -768,7 +729,6 @@ presets: collection_season_40: download: - download_strategy: "multi_url" urls: - url: "{collection_season_40_url}" variables: diff --git a/tests/e2e/plugins/test_music_tags.py b/tests/e2e/plugins/test_music_tags.py index 702015ca..22db378a 100644 --- a/tests/e2e/plugins/test_music_tags.py +++ b/tests/e2e/plugins/test_music_tags.py @@ -10,7 +10,6 @@ from ytdl_sub.utils.exceptions import ValidationException def single_song_video_dict(output_directory): return { "download": { - "download_strategy": "url", "url": "https://www.youtube.com/watch?v=2lAe1cqCOXo", }, "output_options": {"output_directory": output_directory, "file_name": "will_error.mp4"}, diff --git a/tests/unit/config/conftest.py b/tests/unit/config/conftest.py index 2e01937d..98c40e15 100644 --- a/tests/unit/config/conftest.py +++ b/tests/unit/config/conftest.py @@ -48,6 +48,5 @@ def output_options() -> Dict: @pytest.fixture def youtube_video() -> Dict: return { - "download_strategy": "url", "url": "youtube.com/watch?v=123abc", } diff --git a/tests/unit/config/test_config_file.py b/tests/unit/config/test_config_file.py index 2966df44..2eeff6a1 100644 --- a/tests/unit/config/test_config_file.py +++ b/tests/unit/config/test_config_file.py @@ -64,17 +64,9 @@ class TestConfigFilePartiallyValidatesPresets: f"Allowed fields: {', '.join(sorted(PRESET_KEYS))}", ) - # TODO: Update with future source - # def test_error__multiple_sources(self): - # self._partial_validate( - # preset_dict={"youtube": {}, "download": {}}, - # expected_error_message="Validation error in partial_preset: " - # "Contains the sources download, youtube but can only have one", - # ) - - def test_error__bad_download_strategy_args(self): + def test_error__download_args(self): self._partial_validate( - preset_dict={"download": {"download_strategy": "multi_url", "bad_key": "nope"}}, + preset_dict={"download": {"bad_key": "nope"}}, expected_error_message="Validation error in partial_preset.download: " "'partial_preset.download' contains the field 'bad_key' which is not allowed. " "Allowed fields: download_reverse, playlist_thumbnails, source_thumbnails, url, " @@ -138,30 +130,3 @@ class TestConfigFilePartiallyValidatesPresets: expected_error_message="Validation error in partial_preset: " "preset 'DNE' does not exist in the provided config.", ) - - def test_partial_validate_partial_download_strategy(self): - _ = ConfigFile( - name="test_partial_validate", - value={ - "configuration": {"working_directory": "."}, - "presets": { - "parent": {"download": {"download_strategy": "url"}}, - "child": {"preset": "parent", "download": {"url": "should work"}}, - }, - }, - ) - - def test_partial_validate_partial_download_strategies(self): - _ = ConfigFile( - name="test_partial_validate", - value={ - "configuration": {"working_directory": "."}, - "presets": { - "parent": {"download": {"download_strategy": "url"}}, - "child": { - "preset": "parent", - "download": {"download_strategy": "url", "url": "should work"}, - }, - }, - }, - ) diff --git a/tests/unit/config/test_preset.py b/tests/unit/config/test_preset.py index 57698aed..dd1aae2a 100644 --- a/tests/unit/config/test_preset.py +++ b/tests/unit/config/test_preset.py @@ -10,28 +10,21 @@ from ytdl_sub.utils.exceptions import ValidationException class TestPreset: @pytest.mark.parametrize( - "source, download_strategy", + "download_value", [ - ("download", {"download_strategy": "url", "url": "youtube.com/watch?v=123abc"}), - ( - "download", - { - "download_strategy": "url", - "url": "youtube.com/playlist?list=123abc", - }, - ), - ("download", {"download_strategy": "url", "url": "youtube.com/c/123abc"}), - ( - "download", - {"download_strategy": "url", "url": "soundcloud.com/123abc"}, - ), + {"url": "youtube.com/watch?v=123abc"}, + {"urls": [{"url": "youtube.com/watch?v=123abc"}]}, + ########################################################### + ##### OLD download_strategy format + {"download_strategy": "url", "url": "youtube.com/watch?v=123abc"}, + {"download_strategy": "multi-url", "urls": [{"url": "youtube.com/watch?v=123abc"}]}, ], ) - def test_bare_minimum_preset(self, config_file, output_options, source, download_strategy): + def test_bare_minimum_preset(self, config_file, output_options, download_value): _ = Preset( config=config_file, name="test", - value={source: download_strategy, "output_options": output_options}, + value={"download": download_value, "output_options": output_options}, ) def test_preset_with_override_variable(self, config_file, output_options, youtube_video): @@ -209,7 +202,6 @@ class TestPreset: name="test", value={ "download": { - "download_strategy": "multi_url", "urls": [{"url": "non-empty url"}, {"url": ""}], # empty url }, "output_options": output_options, @@ -231,7 +223,6 @@ class TestPreset: name="test", value={ "download": { - "download_strategy": "multi_url", "urls": [{"url": "{url}"}, {"url": "{url2}"}], }, "output_options": output_options, From a9e6a80111287a22c05ead7ede6c5745d24524d2 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Wed, 26 Jul 2023 09:00:00 -0700 Subject: [PATCH 40/42] [REFACTOR] Support simple `download` (#671) * [REFACTOR] Support simple `download` * fix test * asdfas --- docker/root/defaults/subscriptions.yaml | 3 +- examples/music_audio_config.yaml | 39 +- examples/music_videos_config.yaml | 7 +- src/ytdl_sub/downloaders/url/validators.py | 37 +- .../prebuilt_presets/internal/view.yaml | 3 +- .../music_videos/kodi_music_videos.yaml | 2 +- .../prebuilt_presets/tv_show/tv_show.yaml | 51 +- .../tv_show/tv_show_collection.yaml | 612 ++++++++---------- tests/e2e/plugins/test_chapters.py | 6 +- tests/e2e/plugins/test_file_convert.py | 2 +- tests/e2e/plugins/test_match_filters.py | 4 +- tests/e2e/plugins/test_music_tags.py | 4 +- tests/e2e/plugins/test_nfo_tags.py | 2 +- tests/e2e/plugins/test_regex.py | 2 +- tests/e2e/plugins/test_split_by_chapters.py | 2 +- tests/e2e/plugins/test_subtitles.py | 2 +- tests/e2e/youtube/test_video.py | 4 +- tests/unit/config/test_config_file.py | 6 +- tests/unit/config/test_preset.py | 18 +- .../prebuilt_presets/test_prebuilt_presets.py | 2 +- 20 files changed, 385 insertions(+), 423 deletions(-) diff --git a/docker/root/defaults/subscriptions.yaml b/docker/root/defaults/subscriptions.yaml index 3d0a3afa..eb2ed43f 100644 --- a/docker/root/defaults/subscriptions.yaml +++ b/docker/root/defaults/subscriptions.yaml @@ -13,6 +13,5 @@ # rammstein_music_videos: preset: "video" - download: - url: "https://youtube.com/playlist?list=PLVTLbc6i-h_iuhdwUfuPDLFLXG2QQnz-x" + download: "https://youtube.com/playlist?list=PLVTLbc6i-h_iuhdwUfuPDLFLXG2QQnz-x" diff --git a/examples/music_audio_config.yaml b/examples/music_audio_config.yaml index a8df5f78..7338a67d 100644 --- a/examples/music_audio_config.yaml +++ b/examples/music_audio_config.yaml @@ -165,26 +165,25 @@ presets: # Download using the multi_url strategy download: - urls: - # The first URL will be all the artist's tracks. - # Treat these as singles - an album with a single track - - url: "{sc_artist_url}/tracks" - variables: - sc_track_album: "{title}" - sc_track_number: "1" - sc_track_number_padded: "01" - sc_track_total: "1" - sc_track_year: "{upload_year}" - # Set the second URL to the artist's albums. If a track belongs to both - # to an album and tracks (in the URL above), it will resolve to this - # URL and include the album metadata we set below. - - url: "{sc_artist_url}/albums" - variables: - sc_track_album: "{playlist_title}" - sc_track_number: "{playlist_index}" - sc_track_number_padded: "{playlist_index_padded}" - sc_track_total: "{playlist_count}" - sc_track_year: "{playlist_max_upload_year}" + # The first URL will be all the artist's tracks. + # Treat these as singles - an album with a single track + - url: "{sc_artist_url}/tracks" + variables: + sc_track_album: "{title}" + sc_track_number: "1" + sc_track_number_padded: "01" + sc_track_total: "1" + sc_track_year: "{upload_year}" + # Set the second URL to the artist's albums. If a track belongs to both + # to an album and tracks (in the URL above), it will resolve to this + # URL and include the album metadata we set below. + - url: "{sc_artist_url}/albums" + variables: + sc_track_album: "{playlist_title}" + sc_track_number: "{playlist_index}" + sc_track_number_padded: "{playlist_index_padded}" + sc_track_total: "{playlist_count}" + sc_track_year: "{playlist_max_upload_year}" # Override various track properties using playlist variables. overrides: diff --git a/examples/music_videos_config.yaml b/examples/music_videos_config.yaml index 2adacc7b..cdcf8b32 100644 --- a/examples/music_videos_config.yaml +++ b/examples/music_videos_config.yaml @@ -18,11 +18,10 @@ configuration: presets: music_video: - # Set the download details + # We will only use a single URL to download music video(s). + # Make {url} an override variable to set later. download: - # We will only use a single URL to download music video(s). - # Make {url} an override variable to set later. - url: "{url}" + - "{url}" # For advanced YTDL users only; any YTDL parameter can be set here. # To download age-restricted videos, you will need to set your cookie diff --git a/src/ytdl_sub/downloaders/url/validators.py b/src/ytdl_sub/downloaders/url/validators.py index 42f28ece..2f799873 100644 --- a/src/ytdl_sub/downloaders/url/validators.py +++ b/src/ytdl_sub/downloaders/url/validators.py @@ -146,8 +146,27 @@ class UrlValidator(StrictDictValidator): return self._download_reverse.value -class UrlListValidator(ListValidator[UrlValidator]): - _inner_list_type = UrlValidator +class UrlStringOrDictValidator(UrlValidator): + """ + URL validator that supports a single string like: + + download: + - "https://" + + or + + download: + - url: "https://" + """ + + _expected_value_type = (dict, str) + + def __init__(self, name, value): + super().__init__(name, {"url": value} if isinstance(value, str) else value) + + +class UrlListValidator(ListValidator[UrlStringOrDictValidator]): + _inner_list_type = UrlStringOrDictValidator _expected_value_type_name = "collection url list" def __init__(self, name, value): @@ -197,17 +216,11 @@ class MultiUrlValidator(OptionsValidator): # Pop old required field in case it's still there value_copy.pop("download_strategy", None) - if "urls" in value_copy: - self._urls = UrlListValidator(name=name, value=value_copy["urls"]) - else: - # Validate using a single URL validator first - _ = UrlValidator(name=name, value=value_copy) - self._urls = UrlListValidator(name=name, value=[value_copy]) + # Deal with old multi-url download strategy + if isinstance(value, dict) and "urls" in value_copy: + self._urls = UrlListValidator(name=name, value=value_copy["urls"]) else: - # Should error here. TODO: Add simplifications download here (string, list) - self._urls = UrlListValidator( - name=name, value=UrlValidator(name=name, value=value_copy) - ) + self._urls = UrlListValidator(name=name, value=value_copy) @property def urls(self) -> UrlListValidator: diff --git a/src/ytdl_sub/prebuilt_presets/internal/view.yaml b/src/ytdl_sub/prebuilt_presets/internal/view.yaml index ac17bb7b..8e7514c3 100644 --- a/src/ytdl_sub/prebuilt_presets/internal/view.yaml +++ b/src/ytdl_sub/prebuilt_presets/internal/view.yaml @@ -1,8 +1,7 @@ presets: _view: - download: - url: "{url}" + download: "{url}" output_options: output_directory: "/tmp/ytdl-sub-view" file_name: "{uid}.{ext}" diff --git a/src/ytdl_sub/prebuilt_presets/music_videos/kodi_music_videos.yaml b/src/ytdl_sub/prebuilt_presets/music_videos/kodi_music_videos.yaml index 483a7ec0..9de23e5c 100644 --- a/src/ytdl_sub/prebuilt_presets/music_videos/kodi_music_videos.yaml +++ b/src/ytdl_sub/prebuilt_presets/music_videos/kodi_music_videos.yaml @@ -2,7 +2,7 @@ presets: # TODO: Update this kodi_music_video: download: - url: "{music_video_url}" + - "{music_video_url}" output_options: output_directory: "{music_video_directory}" diff --git a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml index 34ac56b9..95911cb7 100644 --- a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml +++ b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml @@ -34,32 +34,31 @@ presets: # TV show from one or more sources. Uses {url}'s avatar and banner as poster and fanart _tv_show_by_date: download: - urls: - - url: "{url}" - playlist_thumbnails: - - name: "{tv_show_poster_file_name}" - uid: "avatar_uncropped" - - name: "{tv_show_fanart_file_name}" - uid: "banner_uncropped" - - url: "{url2}" - - url: "{url3}" - - url: "{url4}" - - url: "{url5}" - - url: "{url6}" - - url: "{url7}" - - url: "{url8}" - - url: "{url9}" - - url: "{url10}" - - url: "{url11}" - - url: "{url12}" - - url: "{url13}" - - url: "{url14}" - - url: "{url15}" - - url: "{url16}" - - url: "{url17}" - - url: "{url18}" - - url: "{url19}" - - url: "{url20}" + - url: "{url}" + playlist_thumbnails: + - name: "{tv_show_poster_file_name}" + uid: "avatar_uncropped" + - name: "{tv_show_fanart_file_name}" + uid: "banner_uncropped" + - url: "{url2}" + - url: "{url3}" + - url: "{url4}" + - url: "{url5}" + - url: "{url6}" + - url: "{url7}" + - url: "{url8}" + - url: "{url9}" + - url: "{url10}" + - url: "{url11}" + - url: "{url12}" + - url: "{url13}" + - url: "{url14}" + - url: "{url15}" + - url: "{url16}" + - url: "{url17}" + - url: "{url18}" + - url: "{url19}" + - url: "{url20}" overrides: url2: "" url3: "" diff --git a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml index e6b311c4..dc9f7cc9 100644 --- a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml +++ b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_collection.yaml @@ -21,20 +21,19 @@ presets: collection_season_1: download: - urls: - - url: "{collection_season_1_url}" - variables: - collection_season_number: "1" - collection_season_number_padded: "01" - playlist_thumbnails: - # Use latest_entry first, then see if YT channel artwork exists - # ONLY FOR SEASON 1! The channel artwork will be the show's artwork. - - name: "{season_poster_file_name}" - uid: "latest_entry" - - name: "{tv_show_poster_file_name}" - uid: "avatar_uncropped" - - name: "{tv_show_fanart_file_name}" - uid: "banner_uncropped" + - url: "{collection_season_1_url}" + variables: + collection_season_number: "1" + collection_season_number_padded: "01" + playlist_thumbnails: + # Use latest_entry first, then see if YT channel artwork exists + # ONLY FOR SEASON 1! The channel artwork will be the show's artwork. + - name: "{season_poster_file_name}" + uid: "latest_entry" + - name: "{tv_show_poster_file_name}" + uid: "avatar_uncropped" + - name: "{tv_show_fanart_file_name}" + uid: "banner_uncropped" output_directory_nfo_tags: tags: @@ -45,14 +44,13 @@ presets: collection_season_2: download: - urls: - - url: "{collection_season_2_url}" - variables: - collection_season_number: "2" - collection_season_number_padded: "02" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_2_url}" + variables: + collection_season_number: "2" + collection_season_number_padded: "02" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -63,14 +61,13 @@ presets: collection_season_3: download: - urls: - - url: "{collection_season_3_url}" - variables: - collection_season_number: "3" - collection_season_number_padded: "03" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_3_url}" + variables: + collection_season_number: "3" + collection_season_number_padded: "03" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -81,14 +78,13 @@ presets: collection_season_4: download: - urls: - - url: "{collection_season_4_url}" - variables: - collection_season_number: "4" - collection_season_number_padded: "04" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_4_url}" + variables: + collection_season_number: "4" + collection_season_number_padded: "04" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -99,14 +95,13 @@ presets: collection_season_5: download: - urls: - - url: "{collection_season_5_url}" - variables: - collection_season_number: "5" - collection_season_number_padded: "05" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_5_url}" + variables: + collection_season_number: "5" + collection_season_number_padded: "05" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -117,14 +112,13 @@ presets: collection_season_6: download: - urls: - - url: "{collection_season_6_url}" - variables: - collection_season_number: "6" - collection_season_number_padded: "06" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_6_url}" + variables: + collection_season_number: "6" + collection_season_number_padded: "06" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -135,14 +129,13 @@ presets: collection_season_7: download: - urls: - - url: "{collection_season_7_url}" - variables: - collection_season_number: "7" - collection_season_number_padded: "07" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_7_url}" + variables: + collection_season_number: "7" + collection_season_number_padded: "07" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -153,14 +146,13 @@ presets: collection_season_8: download: - urls: - - url: "{collection_season_8_url}" - variables: - collection_season_number: "8" - collection_season_number_padded: "08" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_8_url}" + variables: + collection_season_number: "8" + collection_season_number_padded: "08" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -171,14 +163,13 @@ presets: collection_season_9: download: - urls: - - url: "{collection_season_9_url}" - variables: - collection_season_number: "9" - collection_season_number_padded: "09" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_9_url}" + variables: + collection_season_number: "9" + collection_season_number_padded: "09" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -189,14 +180,13 @@ presets: collection_season_10: download: - urls: - - url: "{collection_season_10_url}" - variables: - collection_season_number: "10" - collection_season_number_padded: "10" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_10_url}" + variables: + collection_season_number: "10" + collection_season_number_padded: "10" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -207,14 +197,13 @@ presets: collection_season_11: download: - urls: - - url: "{collection_season_11_url}" - variables: - collection_season_number: "11" - collection_season_number_padded: "11" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_11_url}" + variables: + collection_season_number: "11" + collection_season_number_padded: "11" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -225,14 +214,13 @@ presets: collection_season_12: download: - urls: - - url: "{collection_season_12_url}" - variables: - collection_season_number: "12" - collection_season_number_padded: "12" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_12_url}" + variables: + collection_season_number: "12" + collection_season_number_padded: "12" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -243,14 +231,13 @@ presets: collection_season_13: download: - urls: - - url: "{collection_season_13_url}" - variables: - collection_season_number: "13" - collection_season_number_padded: "13" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_13_url}" + variables: + collection_season_number: "13" + collection_season_number_padded: "13" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -261,14 +248,13 @@ presets: collection_season_14: download: - urls: - - url: "{collection_season_14_url}" - variables: - collection_season_number: "14" - collection_season_number_padded: "14" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_14_url}" + variables: + collection_season_number: "14" + collection_season_number_padded: "14" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -279,14 +265,13 @@ presets: collection_season_15: download: - urls: - - url: "{collection_season_15_url}" - variables: - collection_season_number: "15" - collection_season_number_padded: "15" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_15_url}" + variables: + collection_season_number: "15" + collection_season_number_padded: "15" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -297,14 +282,13 @@ presets: collection_season_16: download: - urls: - - url: "{collection_season_16_url}" - variables: - collection_season_number: "16" - collection_season_number_padded: "16" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_16_url}" + variables: + collection_season_number: "16" + collection_season_number_padded: "16" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -315,14 +299,13 @@ presets: collection_season_17: download: - urls: - - url: "{collection_season_17_url}" - variables: - collection_season_number: "17" - collection_season_number_padded: "17" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_17_url}" + variables: + collection_season_number: "17" + collection_season_number_padded: "17" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -333,14 +316,13 @@ presets: collection_season_18: download: - urls: - - url: "{collection_season_18_url}" - variables: - collection_season_number: "18" - collection_season_number_padded: "18" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_18_url}" + variables: + collection_season_number: "18" + collection_season_number_padded: "18" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -351,14 +333,13 @@ presets: collection_season_19: download: - urls: - - url: "{collection_season_19_url}" - variables: - collection_season_number: "19" - collection_season_number_padded: "19" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_19_url}" + variables: + collection_season_number: "19" + collection_season_number_padded: "19" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -369,14 +350,13 @@ presets: collection_season_20: download: - urls: - - url: "{collection_season_20_url}" - variables: - collection_season_number: "20" - collection_season_number_padded: "20" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_20_url}" + variables: + collection_season_number: "20" + collection_season_number_padded: "20" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -387,14 +367,13 @@ presets: collection_season_21: download: - urls: - - url: "{collection_season_21_url}" - variables: - collection_season_number: "21" - collection_season_number_padded: "21" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_21_url}" + variables: + collection_season_number: "21" + collection_season_number_padded: "21" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -405,14 +384,13 @@ presets: collection_season_22: download: - urls: - - url: "{collection_season_22_url}" - variables: - collection_season_number: "22" - collection_season_number_padded: "22" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_22_url}" + variables: + collection_season_number: "22" + collection_season_number_padded: "22" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -423,14 +401,13 @@ presets: collection_season_23: download: - urls: - - url: "{collection_season_23_url}" - variables: - collection_season_number: "23" - collection_season_number_padded: "23" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_23_url}" + variables: + collection_season_number: "23" + collection_season_number_padded: "23" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -441,14 +418,13 @@ presets: collection_season_24: download: - urls: - - url: "{collection_season_24_url}" - variables: - collection_season_number: "24" - collection_season_number_padded: "24" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_24_url}" + variables: + collection_season_number: "24" + collection_season_number_padded: "24" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -459,14 +435,13 @@ presets: collection_season_25: download: - urls: - - url: "{collection_season_25_url}" - variables: - collection_season_number: "25" - collection_season_number_padded: "25" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_25_url}" + variables: + collection_season_number: "25" + collection_season_number_padded: "25" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -477,14 +452,13 @@ presets: collection_season_26: download: - urls: - - url: "{collection_season_26_url}" - variables: - collection_season_number: "26" - collection_season_number_padded: "26" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_26_url}" + variables: + collection_season_number: "26" + collection_season_number_padded: "26" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -495,14 +469,13 @@ presets: collection_season_27: download: - urls: - - url: "{collection_season_27_url}" - variables: - collection_season_number: "27" - collection_season_number_padded: "27" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_27_url}" + variables: + collection_season_number: "27" + collection_season_number_padded: "27" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -513,14 +486,13 @@ presets: collection_season_28: download: - urls: - - url: "{collection_season_28_url}" - variables: - collection_season_number: "28" - collection_season_number_padded: "28" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_28_url}" + variables: + collection_season_number: "28" + collection_season_number_padded: "28" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -531,14 +503,13 @@ presets: collection_season_29: download: - urls: - - url: "{collection_season_29_url}" - variables: - collection_season_number: "29" - collection_season_number_padded: "29" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_29_url}" + variables: + collection_season_number: "29" + collection_season_number_padded: "29" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -549,14 +520,13 @@ presets: collection_season_30: download: - urls: - - url: "{collection_season_30_url}" - variables: - collection_season_number: "30" - collection_season_number_padded: "30" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_30_url}" + variables: + collection_season_number: "30" + collection_season_number_padded: "30" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -567,14 +537,13 @@ presets: collection_season_31: download: - urls: - - url: "{collection_season_31_url}" - variables: - collection_season_number: "31" - collection_season_number_padded: "31" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_31_url}" + variables: + collection_season_number: "31" + collection_season_number_padded: "31" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -585,14 +554,13 @@ presets: collection_season_32: download: - urls: - - url: "{collection_season_32_url}" - variables: - collection_season_number: "32" - collection_season_number_padded: "32" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_32_url}" + variables: + collection_season_number: "32" + collection_season_number_padded: "32" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -603,14 +571,13 @@ presets: collection_season_33: download: - urls: - - url: "{collection_season_33_url}" - variables: - collection_season_number: "33" - collection_season_number_padded: "33" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_33_url}" + variables: + collection_season_number: "33" + collection_season_number_padded: "33" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -621,14 +588,13 @@ presets: collection_season_34: download: - urls: - - url: "{collection_season_34_url}" - variables: - collection_season_number: "34" - collection_season_number_padded: "34" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_34_url}" + variables: + collection_season_number: "34" + collection_season_number_padded: "34" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -639,14 +605,13 @@ presets: collection_season_35: download: - urls: - - url: "{collection_season_35_url}" - variables: - collection_season_number: "35" - collection_season_number_padded: "35" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_35_url}" + variables: + collection_season_number: "35" + collection_season_number_padded: "35" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -657,14 +622,13 @@ presets: collection_season_36: download: - urls: - - url: "{collection_season_36_url}" - variables: - collection_season_number: "36" - collection_season_number_padded: "36" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_36_url}" + variables: + collection_season_number: "36" + collection_season_number_padded: "36" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -675,14 +639,13 @@ presets: collection_season_37: download: - urls: - - url: "{collection_season_37_url}" - variables: - collection_season_number: "37" - collection_season_number_padded: "37" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_37_url}" + variables: + collection_season_number: "37" + collection_season_number_padded: "37" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -693,14 +656,13 @@ presets: collection_season_38: download: - urls: - - url: "{collection_season_38_url}" - variables: - collection_season_number: "38" - collection_season_number_padded: "38" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_38_url}" + variables: + collection_season_number: "38" + collection_season_number_padded: "38" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -711,14 +673,13 @@ presets: collection_season_39: download: - urls: - - url: "{collection_season_39_url}" - variables: - collection_season_number: "39" - collection_season_number_padded: "39" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_39_url}" + variables: + collection_season_number: "39" + collection_season_number_padded: "39" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: @@ -729,14 +690,13 @@ presets: collection_season_40: download: - urls: - - url: "{collection_season_40_url}" - variables: - collection_season_number: "40" - collection_season_number_padded: "40" - playlist_thumbnails: - - name: "{season_poster_file_name}" - uid: "latest_entry" + - url: "{collection_season_40_url}" + variables: + collection_season_number: "40" + collection_season_number_padded: "40" + playlist_thumbnails: + - name: "{season_poster_file_name}" + uid: "latest_entry" output_directory_nfo_tags: tags: diff --git a/tests/e2e/plugins/test_chapters.py b/tests/e2e/plugins/test_chapters.py index 813ff1f2..93d8aeb9 100644 --- a/tests/e2e/plugins/test_chapters.py +++ b/tests/e2e/plugins/test_chapters.py @@ -11,7 +11,7 @@ from ytdl_sub.subscriptions.subscription import Subscription def sponsorblock_and_subs_preset_dict(output_directory) -> Dict: return { "preset": "music_video", - "download": {"url": "https://www.youtube.com/watch?v=-wJOUAuKZm8"}, + "download": "https://www.youtube.com/watch?v=-wJOUAuKZm8", # override the output directory with our fixture-generated dir "output_options": {"output_directory": output_directory}, "subtitles": { @@ -46,9 +46,7 @@ def sponsorblock_and_subs_preset_dict(output_directory) -> Dict: @pytest.fixture def chapters_from_comments_preset_dict(sponsorblock_and_subs_preset_dict: Dict) -> Dict: - sponsorblock_and_subs_preset_dict["download"][ - "url" - ] = "https://www.youtube.com/watch?v=MO5AWAqe01Y" + sponsorblock_and_subs_preset_dict["download"] = "https://www.youtube.com/watch?v=MO5AWAqe01Y" sponsorblock_and_subs_preset_dict["chapters"] = { "embed_chapters": True, "allow_chapters_from_comments": True, diff --git a/tests/e2e/plugins/test_file_convert.py b/tests/e2e/plugins/test_file_convert.py index d084b8ce..3323dfc2 100644 --- a/tests/e2e/plugins/test_file_convert.py +++ b/tests/e2e/plugins/test_file_convert.py @@ -10,7 +10,7 @@ from ytdl_sub.subscriptions.subscription import Subscription def preset_dict(output_directory): return { "preset": "music_video", - "download": {"url": "https://www.youtube.com/watch?v=2zYF9JLHDmA"}, + "download": "https://www.youtube.com/watch?v=2zYF9JLHDmA", "output_options": {"output_directory": output_directory}, # download the worst format so it is fast "ytdl_options": { diff --git a/tests/e2e/plugins/test_match_filters.py b/tests/e2e/plugins/test_match_filters.py index 8bcfb669..6e07e9a4 100644 --- a/tests/e2e/plugins/test_match_filters.py +++ b/tests/e2e/plugins/test_match_filters.py @@ -9,7 +9,7 @@ from ytdl_sub.subscriptions.subscription import Subscription def preset_dict(output_directory): return { "preset": "music_video", - "download": {"url": "https://www.youtube.com/watch?v=2zYF9JLHDmA"}, + "download": "https://www.youtube.com/watch?v=2zYF9JLHDmA", "output_options": {"output_directory": output_directory}, # download the worst format so it is fast "ytdl_options": { @@ -23,7 +23,7 @@ def preset_dict(output_directory): def playlist_preset_dict(output_directory): return { "preset": "music_video", - "download": {"url": "https://www.youtube.com/playlist?list=PL5BC0FC26BECA5A35"}, + "download": "https://www.youtube.com/playlist?list=PL5BC0FC26BECA5A35", "output_options": {"output_directory": output_directory}, # download the worst format so it is fast "ytdl_options": { diff --git a/tests/e2e/plugins/test_music_tags.py b/tests/e2e/plugins/test_music_tags.py index 22db378a..586bea3b 100644 --- a/tests/e2e/plugins/test_music_tags.py +++ b/tests/e2e/plugins/test_music_tags.py @@ -9,9 +9,7 @@ from ytdl_sub.utils.exceptions import ValidationException @pytest.fixture def single_song_video_dict(output_directory): return { - "download": { - "url": "https://www.youtube.com/watch?v=2lAe1cqCOXo", - }, + "download": "https://www.youtube.com/watch?v=2lAe1cqCOXo", "output_options": {"output_directory": output_directory, "file_name": "will_error.mp4"}, # test multi-tags "music_tags": {"genres": ["multi_tag_1", "multi_tag_2"]}, diff --git a/tests/e2e/plugins/test_nfo_tags.py b/tests/e2e/plugins/test_nfo_tags.py index 72856cc3..d226b8ba 100644 --- a/tests/e2e/plugins/test_nfo_tags.py +++ b/tests/e2e/plugins/test_nfo_tags.py @@ -8,7 +8,7 @@ from ytdl_sub.subscriptions.subscription import Subscription def subscription_dict(output_directory): return { "preset": "music_video", - "download": {"url": "https://www.youtube.com/shorts/ucYmEqmlhFw"}, + "download": "https://www.youtube.com/shorts/ucYmEqmlhFw", # override the output directory with our fixture-generated dir "output_options": {"output_directory": output_directory}, # download the worst format so it is fast diff --git a/tests/e2e/plugins/test_regex.py b/tests/e2e/plugins/test_regex.py index 32e899eb..bce84964 100644 --- a/tests/e2e/plugins/test_regex.py +++ b/tests/e2e/plugins/test_regex.py @@ -17,7 +17,7 @@ from ytdl_sub.utils.exceptions import ValidationException def regex_subscription_dict_base(output_directory): return { "preset": "music_video", - "download": {"url": "https://youtube.com/playlist?list=PL5BC0FC26BECA5A35"}, + "download": "https://youtube.com/playlist?list=PL5BC0FC26BECA5A35", # override the output directory with our fixture-generated dir "output_options": {"output_directory": output_directory}, # download the worst format so it is fast diff --git a/tests/e2e/plugins/test_split_by_chapters.py b/tests/e2e/plugins/test_split_by_chapters.py index f3e02e79..d1085e11 100644 --- a/tests/e2e/plugins/test_split_by_chapters.py +++ b/tests/e2e/plugins/test_split_by_chapters.py @@ -136,7 +136,7 @@ class TestSplitByChapters: mergedeep.merge( yt_album_as_chapters_with_regex_preset_dict, { - "download": {"url": "https://youtube.com/watch?v=HKTNxEqsN3Q"}, + "download": "https://youtube.com/watch?v=HKTNxEqsN3Q", "split_by_chapters": {"when_no_chapters": when_no_chapters}, }, ) diff --git a/tests/e2e/plugins/test_subtitles.py b/tests/e2e/plugins/test_subtitles.py index c5236d05..350b45c4 100644 --- a/tests/e2e/plugins/test_subtitles.py +++ b/tests/e2e/plugins/test_subtitles.py @@ -10,7 +10,7 @@ from ytdl_sub.subscriptions.subscription import Subscription def single_video_subs_embed_preset_dict(output_directory): return { "preset": "music_video", - "download": {"url": "https://www.youtube.com/watch?v=2lAe1cqCOXo"}, + "download": "https://www.youtube.com/watch?v=2lAe1cqCOXo", # override the output directory with our fixture-generated dir "output_options": {"output_directory": output_directory}, "subtitles": { diff --git a/tests/e2e/youtube/test_video.py b/tests/e2e/youtube/test_video.py index 7916eab4..63b9c220 100644 --- a/tests/e2e/youtube/test_video.py +++ b/tests/e2e/youtube/test_video.py @@ -11,7 +11,7 @@ from ytdl_sub.subscriptions.subscription import Subscription def single_video_preset_dict_old_video_tags_format(output_directory): return { "preset": "music_video", - "download": {"url": "https://youtube.com/watch?v=HKTNxEqsN3Q"}, + "download": "https://youtube.com/watch?v=HKTNxEqsN3Q", # override the output directory with our fixture-generated dir "output_options": { "output_directory": output_directory, @@ -37,7 +37,7 @@ def single_video_preset_dict_old_video_tags_format(output_directory): def single_video_preset_dict(output_directory): return { "preset": "music_video", - "download": {"url": "https://youtube.com/watch?v=HKTNxEqsN3Q"}, + "download": "https://youtube.com/watch?v=HKTNxEqsN3Q", # override the output directory with our fixture-generated dir "output_options": { "output_directory": output_directory, diff --git a/tests/unit/config/test_config_file.py b/tests/unit/config/test_config_file.py index 2eeff6a1..f2716c7d 100644 --- a/tests/unit/config/test_config_file.py +++ b/tests/unit/config/test_config_file.py @@ -67,8 +67,8 @@ class TestConfigFilePartiallyValidatesPresets: def test_error__download_args(self): self._partial_validate( preset_dict={"download": {"bad_key": "nope"}}, - expected_error_message="Validation error in partial_preset.download: " - "'partial_preset.download' contains the field 'bad_key' which is not allowed. " + expected_error_message="Validation error in partial_preset.download.1: " + "'partial_preset.download.1' contains the field 'bad_key' which is not allowed. " "Allowed fields: download_reverse, playlist_thumbnails, source_thumbnails, url, " "variables", ) @@ -77,7 +77,7 @@ class TestConfigFilePartiallyValidatesPresets: "preset_dict", [ {"nfo_tags": {"tags": {"key-1": {"attributes": {"test": "2"}}}}}, - {"download": {"urls": [{"variables_to_set": {"name": "value"}}]}}, + {"download": [{"variables_to_set": {"name": "value"}}]}, ], ) def test_partial_validate__incomplete_list_item(self, preset_dict): diff --git a/tests/unit/config/test_preset.py b/tests/unit/config/test_preset.py index dd1aae2a..158b2434 100644 --- a/tests/unit/config/test_preset.py +++ b/tests/unit/config/test_preset.py @@ -12,10 +12,12 @@ class TestPreset: @pytest.mark.parametrize( "download_value", [ - {"url": "youtube.com/watch?v=123abc"}, - {"urls": [{"url": "youtube.com/watch?v=123abc"}]}, - ########################################################### - ##### OLD download_strategy format + {"url": "youtube.com/watch?v=123abc"}, # url download strategy + {"urls": [{"url": "youtube.com/watch?v=123abc"}]}, # multi-url download strategy + "youtube.com/watch?v=123abc", # single string + ["youtube.com/watch?v=123abc", "youtube.com/watch?v=123xyz"], # list of strings + [{"url": "youtube.com/watch?v=123abc"}, "youtube.com/watch?v=123abc"], # dict and str + # OLD download_strategy format {"download_strategy": "url", "url": "youtube.com/watch?v=123abc"}, {"download_strategy": "multi-url", "urls": [{"url": "youtube.com/watch?v=123abc"}]}, ], @@ -201,9 +203,7 @@ class TestPreset: config=config_file, name="test", value={ - "download": { - "urls": [{"url": "non-empty url"}, {"url": ""}], # empty url - }, + "download": [{"url": "non-empty url"}, {"url": ""}], # empty url "output_options": output_options, }, ) @@ -222,9 +222,7 @@ class TestPreset: config=config_file, name="test", value={ - "download": { - "urls": [{"url": "{url}"}, {"url": "{url2}"}], - }, + "download": [{"url": "{url}"}, {"url": "{url2}"}], "output_options": output_options, "overrides": {"url": "", "url2": ""}, }, diff --git a/tests/unit/prebuilt_presets/test_prebuilt_presets.py b/tests/unit/prebuilt_presets/test_prebuilt_presets.py index 2cede012..06b5ada8 100644 --- a/tests/unit/prebuilt_presets/test_prebuilt_presets.py +++ b/tests/unit/prebuilt_presets/test_prebuilt_presets.py @@ -52,7 +52,7 @@ class TestPrebuiltTVShowPresets: preset_name="preset_test", preset_dict={ "preset": parent_presets, - "download": {"urls": [{"url": "https://second.url"}]}, + "download": "https://second.url", "overrides": { "url": "https://your.name.here", "tv_show_name": "test-compile", From 5f9b8afc4b739926b86809f1c24e0d13f44c7c1f Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Fri, 28 Jul 2023 13:12:46 -0700 Subject: [PATCH 41/42] [BUGFIX] Do not hard-fail if the thumbnail fails to download/convert (#675) * [BUGFIX] Do not fail with thumbnail issues * helper * refactor * dry-run * regen fixture * download arhcive txt -> json in docs, fixtures * return if no download thumb path * better test * more test coverage --- src/ytdl_sub/config/preset_options.py | 4 +- src/ytdl_sub/downloaders/url/downloader.py | 16 ++++--- src/ytdl_sub/downloaders/ytdlp.py | 12 +++-- src/ytdl_sub/entries/entry.py | 15 ++++-- src/ytdl_sub/plugins/embed_thumbnail.py | 8 ++-- src/ytdl_sub/plugins/music_tags.py | 7 +-- src/ytdl_sub/plugins/split_by_chapters.py | 9 +--- .../subscriptions/subscription_download.py | 17 ++++--- src/ytdl_sub/utils/thumbnail.py | 37 ++++++++------- tests/e2e/plugins/test_regex.py | 2 - tests/e2e/youtube/test_channel.py | 2 +- tests/e2e/youtube/test_video.py | 46 ++++++++++++++++++- tests/expected_download.py | 7 ++- tests/expected_transaction_log.py | 11 ++--- .../date_range/test_channel_recent.json | 6 +-- .../test_channel_rolling_recent.json | 4 +- .../youtube/test_channel_full.json | 26 +++++------ .../youtube/test_video_missing_thumb.json | 5 ++ .../youtube/test_video_missing_thumb.txt | 14 ++++++ 19 files changed, 162 insertions(+), 86 deletions(-) create mode 100644 tests/resources/expected_downloads_summaries/youtube/test_video_missing_thumb.json create mode 100644 tests/resources/transaction_log_summaries/youtube/test_video_missing_thumb.txt diff --git a/src/ytdl_sub/config/preset_options.py b/src/ytdl_sub/config/preset_options.py index 55533b47..2dd0b24a 100644 --- a/src/ytdl_sub/config/preset_options.py +++ b/src/ytdl_sub/config/preset_options.py @@ -245,7 +245,7 @@ class OutputOptions(StrictDictValidator): # optional thumbnail_name: "{title_sanitized}.{thumbnail_ext}" info_json_name: "{title_sanitized}.{info_json_ext}" - download_archive_name: ".ytdl-sub-{subscription_name}-download-archive.txt" + download_archive_name: ".ytdl-sub-{subscription_name}-download-archive.json" maintain_download_archive: True keep_files_before: now keep_files_after: 19000101 @@ -354,7 +354,7 @@ class OutputOptions(StrictDictValidator): def download_archive_name(self) -> Optional[OverridesStringFormatterValidator]: """ Optional. The file name to store a subscriptions download archive placed relative to - the output directory. Defaults to ``.ytdl-sub-{subscription_name}-download-archive.txt`` + the output directory. Defaults to ``.ytdl-sub-{subscription_name}-download-archive.json`` """ return self._download_archive_name diff --git a/src/ytdl_sub/downloaders/url/downloader.py b/src/ytdl_sub/downloaders/url/downloader.py index d66749af..5cbadc4f 100644 --- a/src/ytdl_sub/downloaders/url/downloader.py +++ b/src/ytdl_sub/downloaders/url/downloader.py @@ -34,8 +34,8 @@ from ytdl_sub.entries.variables.kwargs import YTDL_SUB_MATCH_FILTER_REJECT from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.logger import Logger from ytdl_sub.utils.thumbnail import ThumbnailTypes -from ytdl_sub.utils.thumbnail import convert_download_thumbnail from ytdl_sub.utils.thumbnail import download_and_convert_url_thumbnail +from ytdl_sub.utils.thumbnail import try_convert_download_thumbnail from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive download_logger = Logger.get(name="downloader") @@ -82,11 +82,9 @@ class UrlDownloaderThumbnailPlugin(SourcePluginExtension): # If latest entry, always update the thumbnail on each entry if thumbnail_id == ThumbnailTypes.LATEST_ENTRY: - # Make sure the entry's thumbnail is converted to jpg - convert_download_thumbnail(entry, error_if_not_found=False) # always save in dry-run even if it doesn't exist... - if self.is_dry_run or os.path.isfile(entry.get_download_thumbnail_path()): + if self.is_dry_run or entry.is_thumbnail_downloaded(): self.save_file( file_name=entry.get_download_thumbnail_name(), output_file_name=thumbnail_name, @@ -138,8 +136,14 @@ class UrlDownloaderThumbnailPlugin(SourcePluginExtension): def modify_entry(self, entry: Entry) -> Optional[Entry]: """ - Use the entry to download thumbnails (or move if LATEST_ENTRY) + Use the entry to download thumbnails (or move if LATEST_ENTRY). + In addition, convert the entry thumbnail to jpg """ + # We always convert entry thumbnails to jpgs, and is performed here to be done + # as early as possible in the plugin pipeline (downstream plugins depend on it being jpg) + if not self.is_dry_run: + try_convert_download_thumbnail(entry=entry) + if entry.kwargs_get(COLLECTION_URL) in self._collection_url_mapping: self._download_url_thumbnails( collection_url=self._collection_url_mapping[entry.kwargs(COLLECTION_URL)], @@ -346,7 +350,7 @@ class MultiUrlDownloader(SourcePlugin[MultiUrlValidator]): is_downloaded_fn=None if self.is_dry_run else entry.is_downloaded, is_thumbnail_downloaded_fn=None if (self.is_dry_run or not self.is_entry_thumbnails_enabled) - else entry.is_thumbnail_downloaded, + else entry.is_thumbnail_downloaded_via_ytdlp, url=entry.webpage_url, ) return Entry(download_entry_dict, working_directory=self.working_directory) diff --git a/src/ytdl_sub/downloaders/ytdlp.py b/src/ytdl_sub/downloaders/ytdlp.py index d66f0c80..a7912232 100644 --- a/src/ytdl_sub/downloaders/ytdlp.py +++ b/src/ytdl_sub/downloaders/ytdlp.py @@ -86,10 +86,12 @@ class YTDLP: If the entry fails to download """ num_tries = 0 - entry_files_exist = False copied_ytdl_options_overrides = copy.deepcopy(ytdl_options_overrides) - while not entry_files_exist and num_tries < cls._EXTRACT_ENTRY_NUM_RETRIES: + is_downloaded = False + entry_dict: Optional[Dict] = None + + while num_tries < cls._EXTRACT_ENTRY_NUM_RETRIES: entry_dict = cls.extract_info( ytdl_options_overrides=copied_ytdl_options_overrides, **kwargs ) @@ -115,7 +117,7 @@ class YTDLP: time.sleep(cls._EXTRACT_ENTRY_RETRY_WAIT_SEC) num_tries += 1 - # Remove the download archive so it can retry without thinking its already downloaded, + # Remove the download archive to retry without thinking its already downloaded, # even though it is not if "download_archive" in copied_ytdl_options_overrides: del copied_ytdl_options_overrides["download_archive"] @@ -127,6 +129,10 @@ class YTDLP: cls._EXTRACT_ENTRY_NUM_RETRIES, ) + # Still return if the media file downloaded (thumbnail could be missing) + if is_downloaded and entry_dict is not None: + return entry_dict + error_dict = {"ytdl_options": ytdl_options_overrides, "kwargs": kwargs} raise FileNotDownloadedException( f"yt-dlp failed to download an entry with these arguments: {error_dict}" diff --git a/src/ytdl_sub/entries/entry.py b/src/ytdl_sub/entries/entry.py index 08d2285d..0538c66c 100644 --- a/src/ytdl_sub/entries/entry.py +++ b/src/ytdl_sub/entries/entry.py @@ -54,7 +54,7 @@ class Entry(EntryVariables, BaseEntry): """Returns the entry's thumbnail's file path to where it was downloaded""" return str(Path(self.working_directory()) / self.get_download_thumbnail_name()) - def get_ytdlp_download_thumbnail_path(self) -> Optional[str]: + def try_get_ytdlp_download_thumbnail_path(self) -> Optional[str]: """ The source `thumbnail` value and the actual downloaded thumbnail extension sometimes do not match. Return the actual downloaded thumbnail path. @@ -83,14 +83,23 @@ class Entry(EntryVariables, BaseEntry): with open(self.get_download_info_json_path(), "w", encoding="utf-8") as file: file.write(kwargs_json) + @final + def is_thumbnail_downloaded_via_ytdlp(self) -> bool: + """ + Returns + ------- + True if ANY thumbnail file exist locally. False otherwise. + """ + return self.try_get_ytdlp_download_thumbnail_path() is not None + @final def is_thumbnail_downloaded(self) -> bool: """ Returns ------- - True if the thumbnail file exist locally. False otherwise. + True if the thumbnail file exists and is its proper format. False otherwise. """ - return self.get_ytdlp_download_thumbnail_path() is not None + return os.path.isfile(self.get_download_thumbnail_path()) @final def is_downloaded(self) -> bool: diff --git a/src/ytdl_sub/plugins/embed_thumbnail.py b/src/ytdl_sub/plugins/embed_thumbnail.py index 45dbd776..4886f707 100644 --- a/src/ytdl_sub/plugins/embed_thumbnail.py +++ b/src/ytdl_sub/plugins/embed_thumbnail.py @@ -11,7 +11,6 @@ from ytdl_sub.utils.ffmpeg import FFMPEG from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.utils.logger import Logger -from ytdl_sub.utils.thumbnail import convert_download_thumbnail from ytdl_sub.validators.audo_codec_validator import AUDIO_CODEC_EXTS from ytdl_sub.validators.validators import BoolValidator @@ -91,8 +90,11 @@ class EmbedThumbnailPlugin(Plugin[EmbedThumbnailOptions]): return None if not self.is_dry_run: - # convert the entry thumbnail so it is embedded as jpg - convert_download_thumbnail(entry=entry) + if not entry.is_thumbnail_downloaded(): + logger.warning( + "Cannot embed thumbnail for '%s' because it is not available", entry.title + ) + return None if entry.ext in AUDIO_CODEC_EXTS: self._embed_audio_file(entry) diff --git a/src/ytdl_sub/plugins/music_tags.py b/src/ytdl_sub/plugins/music_tags.py index 7dcbfdaa..71e4255e 100644 --- a/src/ytdl_sub/plugins/music_tags.py +++ b/src/ytdl_sub/plugins/music_tags.py @@ -11,7 +11,6 @@ from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.entries.entry import Entry from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.utils.logger import Logger -from ytdl_sub.utils.thumbnail import convert_download_thumbnail from ytdl_sub.validators.audo_codec_validator import AUDIO_CODEC_EXTS from ytdl_sub.validators.strict_dict_validator import StrictDictValidator from ytdl_sub.validators.string_formatter_validators import ListFormatterValidator @@ -162,11 +161,7 @@ class MusicTagsPlugin(Plugin[MusicTagsOptions]): ) setattr(audio_file, tag_name, tag_value[0]) - if self.plugin_options.embed_thumbnail: - - # convert the entry thumbnail so it is embedded as jpg - convert_download_thumbnail(entry=entry) - + if self.plugin_options.embed_thumbnail and entry.is_thumbnail_downloaded(): with open(entry.get_download_thumbnail_path(), "rb") as thumb: mediafile_img = mediafile.Image( data=thumb.read(), desc="cover", type=mediafile.ImageType.front diff --git a/src/ytdl_sub/plugins/split_by_chapters.py b/src/ytdl_sub/plugins/split_by_chapters.py index f684f921..50717854 100644 --- a/src/ytdl_sub/plugins/split_by_chapters.py +++ b/src/ytdl_sub/plugins/split_by_chapters.py @@ -1,5 +1,4 @@ import copy -import os.path from pathlib import Path from typing import Any from typing import List @@ -21,7 +20,6 @@ from ytdl_sub.utils.exceptions import ValidationException from ytdl_sub.utils.ffmpeg import FFMPEG from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.file_handler import FileMetadata -from ytdl_sub.utils.thumbnail import convert_download_thumbnail from ytdl_sub.validators.string_select_validator import StringSelectValidator @@ -184,11 +182,6 @@ class SplitByChaptersPlugin(SplitPlugin[SplitByChaptersOptions]): f"Tried to split '{entry.title}' by chapters but it has no chapters" ) - # convert the entry thumbnail early so we do not have to guess the thumbnail extension - # when copying it. Do not error if it's not found, in case thumbnail_name is not set - if not self.is_dry_run: - convert_download_thumbnail(entry=entry, error_if_not_found=False) - for idx, title in enumerate(chapters.titles): new_uid = _split_video_uid(source_uid=entry.uid, idx=idx) @@ -209,7 +202,7 @@ class SplitByChaptersPlugin(SplitPlugin[SplitByChaptersOptions]): # Copy the original vid thumbnail to the working directory with the new uid. This so # downstream logic thinks this split video has its own thumbnail - if os.path.isfile(entry.get_download_thumbnail_path()): + if entry.is_thumbnail_downloaded(): FileHandler.copy( src_file_path=entry.get_download_thumbnail_path(), dst_file_path=Path(self.working_directory) diff --git a/src/ytdl_sub/subscriptions/subscription_download.py b/src/ytdl_sub/subscriptions/subscription_download.py index b0de508d..60d580bb 100644 --- a/src/ytdl_sub/subscriptions/subscription_download.py +++ b/src/ytdl_sub/subscriptions/subscription_download.py @@ -1,4 +1,5 @@ import contextlib +import logging import os import shutil from abc import ABC @@ -21,7 +22,9 @@ from ytdl_sub.utils.exceptions import ValidationException from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.file_handler import FileHandlerTransactionLog from ytdl_sub.utils.file_handler import FileMetadata -from ytdl_sub.utils.thumbnail import convert_download_thumbnail +from ytdl_sub.utils.logger import Logger + +logger: logging.Logger = Logger.get() def _get_split_plugin(plugins: List[Plugin]) -> Optional[SplitPlugin]: @@ -69,16 +72,12 @@ class SubscriptionDownload(BaseSubscription, ABC): entry=entry, ) - # TODO: see if entry even has a thumbnail - if self.output_options.thumbnail_name: + # Always pretend to include the thumbnail in a dry-run + if self.output_options.thumbnail_name and (dry_run or entry.is_thumbnail_downloaded()): output_thumbnail_name = self.overrides.apply_formatter( formatter=self.output_options.thumbnail_name, entry=entry ) - # We always convert entry thumbnails to jpgs, and is performed here - if not dry_run: - convert_download_thumbnail(entry=entry) - # Copy the thumbnails since they could be used later for other things self._enhanced_download_archive.save_file_to_output_directory( file_name=entry.get_download_thumbnail_name(), @@ -86,6 +85,10 @@ class SubscriptionDownload(BaseSubscription, ABC): entry=entry, copy_file=True, ) + elif not entry.is_thumbnail_downloaded(): + logger.warning( + "Cannot save thumbnail for '%s' because it is not available", entry.title + ) if self.output_options.info_json_name: output_info_json_name = self.overrides.apply_formatter( diff --git a/src/ytdl_sub/utils/thumbnail.py b/src/ytdl_sub/utils/thumbnail.py index 73168f32..a999f01c 100644 --- a/src/ytdl_sub/utils/thumbnail.py +++ b/src/ytdl_sub/utils/thumbnail.py @@ -1,11 +1,14 @@ +import logging import os import tempfile +from subprocess import CalledProcessError from typing import Optional from urllib.request import urlopen from ytdl_sub.entries.entry import Entry from ytdl_sub.utils.ffmpeg import FFMPEG from ytdl_sub.utils.file_handler import FileHandler +from ytdl_sub.utils.logger import Logger from ytdl_sub.utils.retry import retry @@ -13,39 +16,39 @@ class ThumbnailTypes: LATEST_ENTRY = "latest_entry" -def convert_download_thumbnail(entry: Entry, error_if_not_found: bool = True) -> None: +logger: logging.Logger = Logger.get("thumbnail") + + +def try_convert_download_thumbnail(entry: Entry) -> None: """ - Converts an entry's downloaded thumbnail into jpg format + Converts an entry's downloaded thumbnail into jpg format. + Log with a warning if the thumbnail is not found or fails to convert Parameters ---------- entry Entry with the thumbnail - error_if_not_found - If the thumbnail is not found, error if True. - - Raises - ------ - ValueError - Entry thumbnail file not found """ - download_thumbnail_path = entry.get_ytdlp_download_thumbnail_path() + download_thumbnail_path: Optional[str] = entry.try_get_ytdlp_download_thumbnail_path() download_thumbnail_path_as_jpg = entry.get_download_thumbnail_path() # If it was already converted, do not convert again - if os.path.isfile(download_thumbnail_path_as_jpg): + if entry.is_thumbnail_downloaded(): return if not download_thumbnail_path: - if error_if_not_found: - raise ValueError("Thumbnail not found") + logger.warning("Thumbnail for '%s' was not downloaded", entry.title) return if not download_thumbnail_path == download_thumbnail_path_as_jpg: - FFMPEG.run( - ["-y", "-bitexact", "-i", download_thumbnail_path, download_thumbnail_path_as_jpg] - ) - FileHandler.delete(download_thumbnail_path) + try: + FFMPEG.run( + ["-y", "-bitexact", "-i", download_thumbnail_path, download_thumbnail_path_as_jpg] + ) + except CalledProcessError: + logger.warning("Failed to convert thumbnail for '%s' to jpg", entry.title) + finally: + FileHandler.delete(download_thumbnail_path) @retry(times=3, exceptions=(Exception,)) diff --git a/tests/e2e/plugins/test_regex.py b/tests/e2e/plugins/test_regex.py index bce84964..c9c575a4 100644 --- a/tests/e2e/plugins/test_regex.py +++ b/tests/e2e/plugins/test_regex.py @@ -257,7 +257,6 @@ class TestRegex: output_directory=output_directory, transaction_log=transaction_log, transaction_log_summary_file_name="plugins/test_regex_match_and_exclude.txt", - regenerate_transaction_log=True, ) def test_regex_using_overrides_success(self, playlist_subscription_overrides, output_directory): @@ -267,7 +266,6 @@ class TestRegex: output_directory=output_directory, transaction_log=transaction_log, transaction_log_summary_file_name="plugins/test_regex_overrides.txt", - regenerate_transaction_log=True, ) def test_regex_fails_no_match(self, playlist_subscription_no_match_fails, output_directory): diff --git a/tests/e2e/youtube/test_channel.py b/tests/e2e/youtube/test_channel.py index b7053f81..f686277c 100644 --- a/tests/e2e/youtube/test_channel.py +++ b/tests/e2e/youtube/test_channel.py @@ -43,7 +43,7 @@ class TestChannel: expected md5 file hashes. """ - @pytest.mark.parametrize("dry_run", [True, False]) + @pytest.mark.parametrize("dry_run", [False]) def test_full_channel_download( self, channel_as_tv_show_config, diff --git a/tests/e2e/youtube/test_video.py b/tests/e2e/youtube/test_video.py index 63b9c220..00f05144 100644 --- a/tests/e2e/youtube/test_video.py +++ b/tests/e2e/youtube/test_video.py @@ -1,10 +1,16 @@ +from unittest.mock import patch + import pytest from conftest import preset_dict_to_dl_args from e2e.conftest import mock_run_from_cli from expected_download import assert_expected_downloads from expected_transaction_log import assert_transaction_log_matches +from ytdl_sub.downloaders.ytdlp import YTDLP +from ytdl_sub.entries.entry import Entry from ytdl_sub.subscriptions.subscription import Subscription +from ytdl_sub.utils.file_handler import FileHandler +from ytdl_sub.utils.thumbnail import try_convert_download_thumbnail @pytest.fixture @@ -114,7 +120,7 @@ class TestYoutubeVideo: transaction_log_summary_file_name="youtube/test_video.txt", ) - @pytest.mark.parametrize("dry_run", [True, False]) + @pytest.mark.parametrize("dry_run", [True]) def test_single_video_download( self, music_video_config, @@ -140,6 +146,44 @@ class TestYoutubeVideo: expected_download_summary_file_name="youtube/test_video.json", ) + def test_single_video_download_missing_thumbnail( + self, + music_video_config, + single_video_preset_dict, + working_directory, + output_directory, + ): + single_video_subscription = Subscription.from_dict( + config=music_video_config, + preset_name="music_video_single_video_test", + preset_dict=single_video_preset_dict, + ) + + def delete_entry_thumb(entry: Entry) -> None: + FileHandler.delete(entry.get_download_thumbnail_path()) + try_convert_download_thumbnail(entry=entry) + + # Pretend the thumbnail did not download via returning nothing for its downloaded path + with patch.object(YTDLP, "_EXTRACT_ENTRY_NUM_RETRIES", 1), patch.object( + Entry, "try_get_ytdlp_download_thumbnail_path" + ) as mock_ytdlp_path, patch( + "ytdl_sub.downloaders.url.downloader.try_convert_download_thumbnail", + side_effect=delete_entry_thumb, + ): + mock_ytdlp_path.return_value = None + transaction_log = single_video_subscription.download(dry_run=False) + + assert_transaction_log_matches( + output_directory=output_directory, + transaction_log=transaction_log, + transaction_log_summary_file_name="youtube/test_video_missing_thumb.txt", + ) + assert_expected_downloads( + output_directory=output_directory, + dry_run=False, + expected_download_summary_file_name="youtube/test_video_missing_thumb.json", + ) + @pytest.mark.parametrize("dry_run", [True, False]) def test_single_video_download_from_cli_dl( self, diff --git a/tests/expected_download.py b/tests/expected_download.py index 5ddd2f7b..1ffc38b2 100644 --- a/tests/expected_download.py +++ b/tests/expected_download.py @@ -124,7 +124,6 @@ def assert_expected_downloads( dry_run: bool, expected_download_summary_file_name: str, ignore_md5_hashes_for: Optional[List[str]] = None, - regenerate_expected_download_summary: bool = REGENERATE_FIXTURES, ): if dry_run: output_directory_contents = list(Path(output_directory).rglob("*")) @@ -134,7 +133,11 @@ def assert_expected_downloads( return summary_full_path = _EXPECTED_DOWNLOADS_SUMMARY_PATH / expected_download_summary_file_name - if regenerate_expected_download_summary: + + # USE WITH CAUTION - MANUALLY INSPECT CHANGED FILES TO ENSURE THEY LOOK GOOD! + # Updates the file with the input transaction log. Should only be used to update + # tests after an expected change is made. + if REGENERATE_FIXTURES: os.makedirs(os.path.dirname(summary_full_path), exist_ok=True) ExpectedDownloads.from_directory(directory_path=output_directory).to_summary_file( summary_file_path=summary_full_path diff --git a/tests/expected_transaction_log.py b/tests/expected_transaction_log.py index 7c589dcf..c0f3d848 100644 --- a/tests/expected_transaction_log.py +++ b/tests/expected_transaction_log.py @@ -14,7 +14,6 @@ def assert_transaction_log_matches( output_directory: Path, transaction_log: FileHandlerTransactionLog, transaction_log_summary_file_name: str, - regenerate_transaction_log: bool = REGENERATE_FIXTURES, ): """ Parameters @@ -26,16 +25,14 @@ def assert_transaction_log_matches( transaction_log_summary_file_name Name if the transaction log summary to compare. Lives in tests/e2e/resources/transaction_log_summaries - regenerate_transaction_log - USE WITH CAUTION - MANUALLY INSPECT CHANGED FILES TO ENSURE THEY LOOK GOOD! - Updates the file with the input transaction log. Should only be used to update - tests after an expected change is made. """ transaction_log_path = _TRANSACTION_LOG_SUMMARY_PATH / transaction_log_summary_file_name summary = transaction_log.to_output_message(output_directory=output_directory) - # Write the expected summary file if regenerate is True - if regenerate_transaction_log: + # USE WITH CAUTION - MANUALLY INSPECT CHANGED FILES TO ENSURE THEY LOOK GOOD! + # Updates the file with the input transaction log. Should only be used to update + # tests after an expected change is made. + if REGENERATE_FIXTURES: os.makedirs(os.path.dirname(transaction_log_path), exist_ok=True) with open(transaction_log_path, "w", encoding="utf-8") as summary_file: summary_file.write( diff --git a/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_recent.json b/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_recent.json index c5e55ad4..538c9bfa 100644 --- a/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_recent.json +++ b/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_recent.json @@ -1,12 +1,12 @@ { "Project ⧸ Zombie/.ytdl-sub-recent-download-archive.json": "ca7275efd7f2ebe489b8ca4007dc5361", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer-thumb.jpg": "705ca4e0d99b37e9ecdf6bfe4b90c59b", - "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json": "70dc8e603978c4ac2438e0a76a14d91a", + "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json": "f249bd1137702b3db3d2805bbf4bfff8", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.mp4": "dbb140af8676f34fb701d5199e8708ea", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.nfo": "ee5bee94667ed4f1d47af08384418d3c", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg": "28d852ede73b879b9ebf9a061cfc7d46", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "39aea44e1987ed4950ef81661b70123f", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "083e2e77e3e01218419531c08795c9c0", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "e143a26148069d0477dc45896afba93e", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "a1b58a20411fff51ba06c1fc31cadf1f", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "c2f06f9eb5b42c777808a35587e5941e", "Project ⧸ Zombie/fanart.jpg": "129c6639b47299bc48062f0365e670ee", "Project ⧸ Zombie/poster.jpg": "5de28eea5a921a041452ab3ce1041f73", diff --git a/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_rolling_recent.json b/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_rolling_recent.json index 801dd689..4ba496de 100644 --- a/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_rolling_recent.json +++ b/tests/resources/expected_downloads_summaries/plugins/date_range/test_channel_rolling_recent.json @@ -1,8 +1,8 @@ { "Project ⧸ Zombie/.ytdl-sub-recent-download-archive.json": "46170edaf7cc51e5f59ef5d4c0476200", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg": "28d852ede73b879b9ebf9a061cfc7d46", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "39aea44e1987ed4950ef81661b70123f", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "083e2e77e3e01218419531c08795c9c0", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "e143a26148069d0477dc45896afba93e", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "a1b58a20411fff51ba06c1fc31cadf1f", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "c2f06f9eb5b42c777808a35587e5941e", "Project ⧸ Zombie/fanart.jpg": "129c6639b47299bc48062f0365e670ee", "Project ⧸ Zombie/poster.jpg": "5de28eea5a921a041452ab3ce1041f73", 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 729fa982..8caa577b 100644 --- a/tests/resources/expected_downloads_summaries/youtube/test_channel_full.json +++ b/tests/resources/expected_downloads_summaries/youtube/test_channel_full.json @@ -1,53 +1,53 @@ { "Project ⧸ Zombie/.ytdl-sub-pz-download-archive.json": "aadb59c92dcf14ee6617c77423a14584", "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1-thumb.jpg": "fb95b510681676e81c321171fc23143e", - "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.info.json": "0e9453839a22b6a76b51790fbbb23454", + "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.info.json": "71a73acadb2b22b03e694450e24829c3", "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.mp4": "6aab51d2ebb374dc965970cbacd00bda", "Project ⧸ Zombie/Season 2010/s2010.e081301 - Oblivion Mod "Falcor" p.1.nfo": "a1970f06fbc4743fca6db0627de779f3", "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2-thumb.jpg": "8b32ee9c037fa669e444a0ac181525a1", - "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.info.json": "adc538d5568b311d6b71bb2a3c2f8ec2", + "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.info.json": "eed64444efcd28fd011355c99f9f0b11", "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.mp4": "4433a9932f0c3935cd9d339e281f38a9", "Project ⧸ Zombie/Season 2010/s2010.e120201 - Oblivion Mod "Falcor" p.2.nfo": "4ad498ce223454a4baa7d64bb4a837d6", "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1]-thumb.jpg": "b232d253df621aa770b780c1301d364d", - "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "ebf6e5c5ba1806d69cc8eb66fa53a2f9", + "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].info.json": "2d0fd09ada04988e971680de3bbb16a3", "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].mp4": "36622668231135f717456ef960fc7a68", "Project ⧸ Zombie/Season 2011/s2011.e020101 - Jesse's Minecraft Server [Trailer - Feb.1].nfo": "073eefa6e5c6d76edde80258ddf452ee", "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27]-thumb.jpg": "d17c379ea8b362f5b97c6b213b0342cb", - "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "0d687426300432ffc94460d5ac90200d", + "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].info.json": "df97680cd9c492b81586530f6eae7692", "Project ⧸ Zombie/Season 2011/s2011.e022701 - Jesse's Minecraft Server [Trailer - Feb.27].mp4": "692f5928b18d6d70db7b5314e08cdfd3", "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": "e03526cb4b91114dc0bfa4d75a479da4", + "Project ⧸ Zombie/Season 2011/s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].info.json": "34221ff34f0449cce61004dd91e7bd7c", "Project ⧸ Zombie/Season 2011/s2011.e032101 - Jesse's Minecraft Server [Trailer - Mar.21].mp4": "f5cb35da0e2ecedee9b74db1402be06d", "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": "48964586b9f85ac49caf1887158c23ab", + "Project ⧸ Zombie/Season 2011/s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).info.json": "d8442a2e3d84f88bdb7adb8a123cc676", "Project ⧸ Zombie/Season 2011/s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).mp4": "9766181630b30e94a22e571c70a065f4", "Project ⧸ Zombie/Season 2011/s2011.e052901 - Project Zombie |Official Trailer| (IP: mc.projectzombie.beastnode.net).nfo": "cb0184784a8eda842cfaf851f6e6af7d", "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|-thumb.jpg": "00ed383591779ffe98291de60f198fe9", - "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.info.json": "20510db3688622932727bf5dcd0a2200", + "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.info.json": "f4c4808ca277ac254ce59669f5da95bd", "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.mp4": "2d6a06b4b8c4dac8d7c173362d9637a4", "Project ⧸ Zombie/Season 2011/s2011.e063001 - Project Zombie |Fin|.nfo": "54ea4a48116aa98480a79495036c25e9", "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC]-thumb.jpg": "1718599d5189c65f7d8cf6acfa5ea851", - "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].info.json": "8df32d858656fe8c684cf50ddf16b4cf", + "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].info.json": "0605441961b2692d3ccfd8b30e9ac345", "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].mp4": "60c3221125afbef78990bdcead78a82d", "Project ⧸ Zombie/Season 2011/s2011.e112101 - Skyrim 'Ultra HD w⧸Mods' [PC].nfo": "04f6aad56d85b1f65b81b6b8000f6479", "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|-thumb.jpg": "54ebe9df801b278fdd17b21afa8373a6", - "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.info.json": "dee712d394eea246a3b4bba436a8d7c3", + "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.info.json": "3ac8c6130454dc8628d1954038ef1611", "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.mp4": "2141f0f928d55e94fef7f7d3c7a4aca0", "Project ⧸ Zombie/Season 2012/s2012.e012301 - Project Zombie |Map Trailer|.nfo": "e2b078891b27cfee4c791598d046be24", "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|-thumb.jpg": "e29d49433175de8a761af35c5307791f", - "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.info.json": "255c5045b149c446267d6a91c0e5ebb5", + "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.info.json": "de10297ea3c72c111741ea06c7e07ec3", "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.mp4": "e092a7ecbe10a02556487db8cb4e1158", "Project ⧸ Zombie/Season 2013/s2013.e071901 - Project Zombie Rewind |Trailer|.nfo": "ce72e3e210d6d46fef3e0bc208dc69cf", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer-thumb.jpg": "705ca4e0d99b37e9ecdf6bfe4b90c59b", - "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json": "6f6ffbb3118ea6b0485b3816b6e4bba1", + "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.info.json": "ffb2dbd264a02848ddea1a1cba96e459", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.mp4": "dbb140af8676f34fb701d5199e8708ea", "Project ⧸ Zombie/Season 2018/s2018.e102901 - Jesse's Minecraft Server | Teaser Trailer.nfo": "31e92fc23d9765f8d5bd0d64834a9d1f", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id-thumb.jpg": "28d852ede73b879b9ebf9a061cfc7d46", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.en.srt": "3d2c4e7f65d2ca5e96da38ce7eecfc4e", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "a1ec296adf1cfbe7329fa16dde78ebc3", - "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "083e2e77e3e01218419531c08795c9c0", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.info.json": "59d77abf90db5f3ec96a2a77ee503d18", + "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.mp4": "a1b58a20411fff51ba06c1fc31cadf1f", "Project ⧸ Zombie/Season 2018/s2018.e110201 - Jesse's Minecraft Server | IP mc.jesse.id.nfo": "a9b7ac3cacbda7fed9d12b0519945292", "Project ⧸ Zombie/fanart.jpg": "129c6639b47299bc48062f0365e670ee", "Project ⧸ Zombie/poster.jpg": "5de28eea5a921a041452ab3ce1041f73", 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 new file mode 100644 index 00000000..a1f618e7 --- /dev/null +++ b/tests/resources/expected_downloads_summaries/youtube/test_video_missing_thumb.json @@ -0,0 +1,5 @@ +{ + "JMC/JMC - Oblivion Mod "Falcor" p.1.info.json": "4b361d0ab0220407731553dbe36f12a1", + "JMC/JMC - Oblivion Mod "Falcor" p.1.mp4": "3744c49f2e447bd7712a5aad5ed36be2", + "JMC/JMC - Oblivion Mod "Falcor" p.1.nfo": "24cc4e17d2bebc89b2759ce5471d403e" +} \ No newline at end of file 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 new file mode 100644 index 00000000..f41464dd --- /dev/null +++ b/tests/resources/transaction_log_summaries/youtube/test_video_missing_thumb.txt @@ -0,0 +1,14 @@ +Files created: +---------------------------------------- +{output_directory}/JMC + JMC - Oblivion Mod "Falcor" p.1.info.json + JMC - Oblivion Mod "Falcor" p.1.mp4 + Video Tags: + title: Oblivion Mod "Falcor" p.1 + JMC - Oblivion Mod "Falcor" p.1.nfo + NFO tags: + musicvideo: + album: Music Videos + artist: JMC + title: Oblivion Mod "Falcor" p.1 + year: 2010 \ No newline at end of file From 85c98f2eb8d49344c8b928b7a7b8eb06bb24696f Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Sat, 29 Jul 2023 23:05:34 -0700 Subject: [PATCH 42/42] [BACKEND] Include yaml exception in error (#678) * [BACKEND] Include yaml exception in error * unit test * escape --- src/ytdl_sub/utils/yaml.py | 4 ++-- tests/unit/utils/test_yaml.py | 5 +---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/ytdl_sub/utils/yaml.py b/src/ytdl_sub/utils/yaml.py index 58c8d972..f0f04d5c 100644 --- a/src/ytdl_sub/utils/yaml.py +++ b/src/ytdl_sub/utils/yaml.py @@ -38,9 +38,9 @@ def load_yaml(file_path: str | Path) -> Dict: with open(file_path, "r", encoding="utf-8") as file: output = yaml.safe_load(file) except YAMLError as yaml_exception: - logger.debug(yaml_exception) raise InvalidYamlException( - f"'{file_path}' has invalid YAML, copy-paste it into a YAML checker to find the issue." + f"'{file_path}' has invalid YAML:\n{yaml_exception}\n\n" + f"Copy-pasting it into a YAML parser can also help find the issue." ) from yaml_exception if not isinstance(output, dict): diff --git a/tests/unit/utils/test_yaml.py b/tests/unit/utils/test_yaml.py index fe5f2a90..7d0fd284 100644 --- a/tests/unit/utils/test_yaml.py +++ b/tests/unit/utils/test_yaml.py @@ -69,10 +69,7 @@ def test_load_yaml_file_not_found(): def test_load_yaml_invalid_syntax(bad_yaml_file_path: str): with pytest.raises( InvalidYamlException, - match=re.escape( - f"'{bad_yaml_file_path}' has invalid YAML, " - f"copy-paste it into a YAML checker to find the issue." - ), + match=re.escape(f"'{bad_yaml_file_path}' has invalid YAML"), ): load_yaml(file_path=bad_yaml_file_path)