diff --git a/helper/commands/resolve.py b/helper/commands/resolve.py index 0cbe836..fcaf6cc 100644 --- a/helper/commands/resolve.py +++ b/helper/commands/resolve.py @@ -88,7 +88,7 @@ def cleanRegexedName(name): '''^\[(?P.+?)\][ ]? (?P.*) [ ]?[-_][ ]? - (?P\d+) + (?P\d+) (?= .* \[(?P.+?)\] @@ -182,7 +182,7 @@ def cleanRegexedName(name): # foo - [012] '''^((?P.+?)[ \._\-])? \[ - (?P[0-9]+) + (?P[0-9]+) \] [^\\/]*$''', # foo.s0101, foo.0201 @@ -252,7 +252,7 @@ def cleanRegexedName(name): # show name 2 of 6 - blah '''^(?P.+?) [ \._\-] - (?P[0-9]+) + (?P[0-9]+) of [ \._\-]? \d+ @@ -303,7 +303,7 @@ def cleanRegexedName(name): # show.name.e123.abc '''^(?P.+?) [ \._\-] - [Ee](?P[0-9]+) + [Ee](?P[0-9]+) [\._ -][^\\/]*$ ''', ] @@ -320,26 +320,32 @@ def cleanRegexedName(name): 'show': None, 'season': None, 'episodes': None, + 'absepisodes': False, } # Show name series['show'] = cleanRegexedName(m.group('seriesname')) - # Season - series['season'] = int(m.group('seasonnumber')) - - # Episodes - if 'episodenumberstart' in groupnames: - if m.group('episodenumberend'): - start = int(m.group('episodenumberstart')) - end = int(m.group('episodenumberend')) - if start > end: - start, end = end, start - series['episodes'] = list(range(start, end + 1)) - else: - series['episodes'] = [int(m.group('episodenumberstart')), ] - elif 'episodenumber' in groupnames: - series['episodes'] = [int(m.group('episodenumber')), ] + if 'absoluteepisodenumber' in groupnames: + # Absolute episode number (no season) + series['absepisodes'] = True + series['episodes'] = [int(m.group('absoluteepisodenumber')), ] + else: + # Season + series['season'] = int(m.group('seasonnumber')) + + # Episodes + if 'episodenumberstart' in groupnames: + if m.group('episodenumberend'): + start = int(m.group('episodenumberstart')) + end = int(m.group('episodenumberend')) + if start > end: + start, end = end, start + series['episodes'] = list(range(start, end + 1)) + else: + series['episodes'] = [int(m.group('episodenumberstart')), ] + elif 'episodenumber' in groupnames: + series['episodes'] = [int(m.group('episodenumber')), ] found['episode'] = series break @@ -527,22 +533,30 @@ def search_hash(): if 'episode' in parsed: episode = parsed['episode'] season = episode['season'] - fepisode = episode['episodes'][0] + fepisode = (episode['episodes'][0] + if episode['episodes'] + else None) # Define the prefix that characterize the show show_prefix = '"{}"'.format(episode['show'].lower()) # And search if we find the first episode for m in medias: - if m['MovieKind'] != 'episode' or \ - int(m['SeriesSeason']) != season or \ - int(m['SeriesEpisode']) != fepisode or \ - not m['MovieName'].lower().startswith( - show_prefix): + if m['MovieKind'] != 'episode': continue - media = m - break + if season is None: + if int(m['SeriesSeason']) != 1: + continue + elif int(m['SeriesSeason']) != season: + continue + + if int(m['SeriesEpisode']) != fepisode: + continue + + if m['MovieName'].lower().startswith(show_prefix): + media = m + break # If we reach here and still haven't got the episode, try # to see if we had maybe a typo in the name