From 82060fd78b44ebde2bec28112e7bbd0518053b43 Mon Sep 17 00:00:00 2001 From: Dario Date: Thu, 28 Nov 2019 15:52:13 +0100 Subject: [PATCH] Fix guessit parsing episodes with 1 before release group as multi --- medusa/name_parser/rules/rules.py | 92 +++++++++++++++++++++++++++++++ tests/test_guessit.yml | 24 ++++++++ 2 files changed, 116 insertions(+) diff --git a/medusa/name_parser/rules/rules.py b/medusa/name_parser/rules/rules.py index a9636aa9ce..8301521762 100644 --- a/medusa/name_parser/rules/rules.py +++ b/medusa/name_parser/rules/rules.py @@ -906,6 +906,97 @@ def when(self, matches, context): return to_remove, to_append +class OnePreGroupAsMultiEpisode(Rule): + """Remove last episode (one) and add the first episode as absolute. + + There are animes where the absolute episode is detected as + multi episode because of a number (one) before the group. + + Medusa rule: + - The first episode should be added as absolute + - The last episode should be removed + - Episode title should be release group + + e.g.: Kemono.Michi.Rise.Up.E03.1080p.WEB.x264.1-URANiME-Obfuscated + + guessit -t episode "Kemono.Michi.Rise.Up.E03.1080p.WEB.x264.1-URANiME-Obfuscated" + + without this rule: + For: Kemono.Michi.Rise.Up.E03.1080p.WEB.x264.1-URANiME-Obfuscated + GuessIt found: { + "title": "Kemono Michi Rise Up", + "episode": [ + 3, + 1 + ], + "screen_size": "1080p", + "source": "Web", + "video_codec": "H.264", + "episode_title": "URANiME", + "other": "Obfuscated", + "type": "episode" + } + + with this rule: + For: Kemono.Michi.Rise.Up.E03.1080p.WEB.x264.1-URANiME-Obfuscated + GuessIt found: { + "title": "Kemono Michi Rise Up", + "episode": 3, + "absolute_episode": 3, + "screen_size": "1080p", + "source": "Web", + "video_codec": "H.264", + "release_group": "URANiME", + "other": "Obfuscated", + "type": "episode" + } + """ + + priority = POST_PROCESS + consequence = [RemoveMatch, AppendMatch] + + def when(self, matches, context): + """Evaluate the rule. + + :param matches: + :type matches: rebulk.match.Matches + :param context: + :type context: dict + :return: + """ + titles = matches.named('title') + if not titles: + return + + episodes = matches.named('episode') + if not episodes or len(episodes) != 2: + return + + is_anime = context.get('show_type') == 'anime' or matches.tagged('anime') + if is_anime or matches.named('season'): + return + + sorted_episodes = sorted(episodes) + if sorted_episodes[-1].value != 1: + return + + episode = copy.copy(sorted_episodes[0]) + episode.name = 'absolute_episode' + + to_remove = [sorted_episodes[-1]] + to_append = [episode] + + episode_titles = matches.named('episode_title') + if episode_titles: + release_group = copy.copy(episode_titles[0]) + release_group.name = 'release_group' + + to_remove.append(episode_titles[0]) + to_append.append(release_group) + + return to_remove, to_append + + class PartsAsEpisodeNumbers(Rule): """Move part to episode. @@ -1491,6 +1582,7 @@ def rules(): AnimeWithSeasonMultipleEpisodeNumbers, AnimeAbsoluteEpisodeNumbers, AbsoluteEpisodeNumbers, + OnePreGroupAsMultiEpisode, PartsAsEpisodeNumbers, RemoveInvalidEpisodeSeparator, CreateAliasWithAlternativeTitles, diff --git a/tests/test_guessit.yml b/tests/test_guessit.yml index a5c5e84a88..5e395b5b2a 100644 --- a/tests/test_guessit.yml +++ b/tests/test_guessit.yml @@ -2985,6 +2985,30 @@ release_group: Mad le Zisell type: episode +? "Kemono.Michi.Rise.Up.E03.1080p.WEB.x264.1-URANiME-Obfuscated" +: title: Kemono Michi Rise Up + absolute_episode: 3 + episode: 3 + screen_size: 1080p + source: Web + video_codec: H.264 + video_encoder: x264 + release_group: URANiME + other: Obfuscated + type: episode + +? "Kemono.Michi.Rise.Up/Kemono.Michi.Rise.Up.E03.1080p.WEB.x264.1-URANiME-Obfuscated" +: title: Kemono Michi Rise Up + absolute_episode: 3 + episode: 3 + screen_size: 1080p + source: Web + video_codec: H.264 + video_encoder: x264 + release_group: URANiME + other: Obfuscated + type: episode + # Anime show containing number in its title and show with : ? /Anime/Mobile Suit Gundam UC RE0096/Season 01/Mobile Suit Gundam UC RE0096 - s01e15 - Title : title: Mobile Suit Gundam UC RE0096