Skip to content

Commit

Permalink
helper: commands: resolve: fix resolution for absolute episode numbers
Browse files Browse the repository at this point in the history
Some show episodes are only referred to by using an absolute episode
number; in such cases, the episode resolution of TraktForVLC failed
as it was still expecting a season number. This is fixed by searching
for the given episode number but with a season number of 1.

Fixes #122

Signed-off-by: Raphaël Beamonte <[email protected]>
  • Loading branch information
XaF committed Jun 23, 2018
1 parent ac41965 commit 43d0d13
Showing 1 changed file with 41 additions and 27 deletions.
68 changes: 41 additions & 27 deletions helper/commands/resolve.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ def cleanRegexedName(name):
'''^\[(?P<group>.+?)\][ ]?
(?P<seriesname>.*)
[ ]?[-_][ ]?
(?P<episodenumber>\d+)
(?P<absoluteepisodenumber>\d+)
(?=
.*
\[(?P<crc>.+?)\]
Expand Down Expand Up @@ -182,7 +182,7 @@ def cleanRegexedName(name):
# foo - [012]
'''^((?P<seriesname>.+?)[ \._\-])?
\[
(?P<episodenumber>[0-9]+)
(?P<absoluteepisodenumber>[0-9]+)
\]
[^\\/]*$''',
# foo.s0101, foo.0201
Expand Down Expand Up @@ -252,7 +252,7 @@ def cleanRegexedName(name):
# show name 2 of 6 - blah
'''^(?P<seriesname>.+?)
[ \._\-]
(?P<episodenumber>[0-9]+)
(?P<absoluteepisodenumber>[0-9]+)
of
[ \._\-]?
\d+
Expand Down Expand Up @@ -303,7 +303,7 @@ def cleanRegexedName(name):
# show.name.e123.abc
'''^(?P<seriesname>.+?)
[ \._\-]
[Ee](?P<episodenumber>[0-9]+)
[Ee](?P<absoluteepisodenumber>[0-9]+)
[\._ -][^\\/]*$
''',
]
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 43d0d13

Please sign in to comment.