diff --git a/subliminal/providers/addic7ed.py b/subliminal/providers/addic7ed.py index e8a31626..1d12f6da 100644 --- a/subliminal/providers/addic7ed.py +++ b/subliminal/providers/addic7ed.py @@ -54,7 +54,7 @@ class Addic7edSubtitle(Subtitle): if video.title and sanitize(self.title) == sanitize(video.title): matches.add('title') # year - if video.year == self.year: + if video.original_series and self.year is None or video.year and video.year == self.year: matches.add('year') # release_group if video.release_group and self.version and video.release_group.lower() in self.version.lower(): diff --git a/subliminal/providers/opensubtitles.py b/subliminal/providers/opensubtitles.py index 86a29605..fc09beb4 100644 --- a/subliminal/providers/opensubtitles.py +++ b/subliminal/providers/opensubtitles.py @@ -57,7 +57,7 @@ class OpenSubtitlesSubtitle(Subtitle): if video.series and sanitize(self.series_name) == sanitize(video.series): matches.add('series') # year - if video.year == self.movie_year: + if video.original_series and self.movie_year is None or video.year and video.year == self.movie_year: matches.add('year') # season if video.season and self.series_season == video.season: diff --git a/subliminal/providers/podnapisi.py b/subliminal/providers/podnapisi.py index cd2181e3..9a0b2098 100644 --- a/subliminal/providers/podnapisi.py +++ b/subliminal/providers/podnapisi.py @@ -50,7 +50,7 @@ class PodnapisiSubtitle(Subtitle): if video.series and sanitize(self.title) == sanitize(video.series): matches.add('series') # year - if video.year == self.year: + if video.original_series and self.year is None or video.year and video.year == self.year: matches.add('year') # season if video.season and self.season == video.season: diff --git a/subliminal/providers/tvsubtitles.py b/subliminal/providers/tvsubtitles.py index be59f420..d6075758 100644 --- a/subliminal/providers/tvsubtitles.py +++ b/subliminal/providers/tvsubtitles.py @@ -53,7 +53,7 @@ class TVsubtitlesSubtitle(Subtitle): if video.episode and self.episode == video.episode: matches.add('episode') # year - if self.year == video.year: + if video.original_series and self.year is None or video.year and video.year == self.year: matches.add('year') # release_group if video.release_group and self.release and video.release_group.lower() in self.release.lower(): diff --git a/subliminal/subtitle.py b/subliminal/subtitle.py index 6101a160..c2a35935 100644 --- a/subliminal/subtitle.py +++ b/subliminal/subtitle.py @@ -210,7 +210,7 @@ def guess_matches(video, guess, partial=False): if video.year and 'year' in guess and guess['year'] == video.year: matches.add('year') # count "no year" as an information - if not partial and video.year is None and 'year' not in guess: + if not partial and video.original_series and 'year' not in guess: matches.add('year') elif isinstance(video, Movie): # year diff --git a/subliminal/video.py b/subliminal/video.py index 6e992dcb..e9978d8d 100644 --- a/subliminal/video.py +++ b/subliminal/video.py @@ -129,11 +129,13 @@ class Episode(Video): :param int episode: episode number of the episode. :param str title: title of the episode. :param int year: year of the series. + :param bool original_series: whether the series is the first with this name. :param int tvdb_id: TVDB id of the episode. :param \*\*kwargs: additional parameters for the :class:`Video` constructor. """ - def __init__(self, name, series, season, episode, title=None, year=None, tvdb_id=None, **kwargs): + def __init__(self, name, series, season, episode, title=None, year=None, original_series=True, tvdb_id=None, + **kwargs): super(Episode, self).__init__(name, **kwargs) #: Series of the episode @@ -151,6 +153,9 @@ class Episode(Video): #: Year of series self.year = year + #: The series is the first with this name + self.original_series = original_series + #: TVDB id of the episode self.tvdb_id = tvdb_id @@ -162,10 +167,10 @@ class Episode(Video): if 'title' not in guess or 'season' not in guess or 'episode' not in guess: raise ValueError('Insufficient data to process the guess') - return cls(name, guess['title'], guess['season'], guess['episode'], format=guess.get('format'), + return cls(name, guess['title'], guess['season'], guess['episode'], title=guess.get('episode_title'), + year=guess.get('year'), format=guess.get('format'), original_series='year' not in guess, release_group=guess.get('release_group'), resolution=guess.get('screen_size'), - video_codec=guess.get('video_codec'), audio_codec=guess.get('audio_codec'), - title=guess.get('episode_title'), year=guess.get('year')) + video_codec=guess.get('video_codec'), audio_codec=guess.get('audio_codec')) @classmethod def fromname(cls, name): diff --git a/tests/conftest.py b/tests/conftest.py index 40660731..a8c65e81 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -54,7 +54,7 @@ def episodes(): 'dallas_s01e03': Episode('Dallas.S01E03.mkv', 'Dallas', 1, 3), 'dallas_2012_s01e03': - Episode('Dallas.2012.S01E03.mkv', 'Dallas', 1, 3, year=2012), + Episode('Dallas.2012.S01E03.mkv', 'Dallas', 1, 3, year=2012, original_series=False), 'marvels_agents_of_shield_s02e06': Episode('Marvels.Agents.of.S.H.I.E.L.D.S02E06.720p.HDTV.x264-KILLERS.mkv', 'Marvel\'s Agents of S.H.I.E.L.D.', 2, 6, format='HDTV', release_group='KILLERS', resolution='720p', diff --git a/tests/test_score.py b/tests/test_score.py index 40c3e36e..28277302 100644 --- a/tests/test_score.py +++ b/tests/test_score.py @@ -27,7 +27,7 @@ def test_movie_equations(): def test_compute_score(episodes): video = episodes['bbt_s07e05'] subtitle = Addic7edSubtitle(Language('eng'), True, None, 'the big BANG theory', 6, 4, None, None, '1080p', None) - assert compute_score(subtitle, video) == episode_scores['series'] + assert compute_score(subtitle, video) == episode_scores['series'] + episode_scores['year'] def test_get_score_cap(movies): @@ -43,9 +43,9 @@ def test_compute_score_episode_imdb_id(movies): subtitle = OpenSubtitlesSubtitle(Language('eng'), True, None, 1, 'hash', 'movie', None, 'Man of Steel', 'man.of.steel.2013.720p.bluray.x264-felony.mkv', 2013, 770828, None, None, 'utf-8') - assert compute_score(subtitle, video) == sum(movie_scores.get(m, 0) - for m in ('title', 'format', 'imdb_id', 'year', 'video_codec', - 'resolution', 'release_group')) + assert compute_score(subtitle, video) == sum(movie_scores.get(m, 0) for m in + ('imdb_id', 'title', 'year', 'release_group', 'format', 'resolution', + 'video_codec')) def test_compute_score_episode_title(episodes): @@ -53,9 +53,9 @@ def test_compute_score_episode_title(episodes): subtitle = PodnapisiSubtitle(Language('eng'), True, None, 1, ['The.Big.Bang.Theory.S07E05.The.Workplace.Proximity.720p.HDTV.x264-DIMENSION.mkv'], None, 7, 5, None) - assert compute_score(subtitle, video) == sum(episode_scores.get(m, 0) - for m in ('episode', 'title', 'season', 'format', 'series', - 'video_codec', 'resolution', 'release_group')) + assert compute_score(subtitle, video) == sum(episode_scores.get(m, 0) for m in + ('series', 'year', 'season', 'episode', 'release_group', 'format', + 'resolution', 'video_codec', 'title')) def test_compute_score_hash_hearing_impaired(movies): diff --git a/tests/test_tvsubtitles.py b/tests/test_tvsubtitles.py index 6ae5ed05..61370938 100644 --- a/tests/test_tvsubtitles.py +++ b/tests/test_tvsubtitles.py @@ -54,7 +54,7 @@ def test_get_matches_video_codec_resolution(episodes): def test_get_matches_no_match(episodes): - subtitle = TVsubtitlesSubtitle(Language('por'), None, 261077, 'Game of Thrones', 3, 10, None, '1080p.BluRay', + subtitle = TVsubtitlesSubtitle(Language('por'), None, 261077, 'Game of Thrones', 3, 10, 2011, '1080p.BluRay', 'DEMAND') matches = subtitle.get_matches(episodes['bbt_s07e05']) assert matches == set()