func (self *SeriesIndex) GuessEpisodeLanguage(episode *renamer.Episode, series *Series) { // This methods tries to find the right language for the supplied episode // based on several heuristics // When there is no language set and the series is only watched in one // language we can take this series if len(series.languageMap) == 1 { for k, _ := range series.languageMap { episode.Language = k break } } // Find the language which is most likely the right language if len(series.languageMap) > 1 { possible_languages := []string{} // when episode has not been watched in only one of the languages for lang, _ := range series.languageMap { episode.Language = lang if !self.IsEpisodeInIndex(*episode) { possible_languages = append(possible_languages, lang) } episode.Language = "" } if len(possible_languages) == 1 { episode.Language = possible_languages[0] } else if len(possible_languages) > 1 { // take the language where the previous episode exist previous_existing := []string{} for _, lang := range possible_languages { epi := *episode epi.Language = lang if (epi.Episode - 1) > 0 { epi.Episode -= 1 } if self.IsEpisodeInIndex(epi) { previous_existing = append(previous_existing, lang) } } if len(previous_existing) == 1 { episode.Language = previous_existing[0] } } } }
func (s *MySuite) TestEpisodeExistanceCheckWithExactSeriesName(c *C) { episode := renamer.Episode{Series: "Shameless US", Season: 1, Episode: 1, Language: "de"} c.Assert(s.index.IsEpisodeInIndex(episode), Equals, true) episode.Language = "en" c.Assert(s.index.IsEpisodeInIndex(episode), Equals, true) episode.Language = "fr" c.Assert(s.index.IsEpisodeInIndex(episode), Equals, false) episode.Season = 100 c.Assert(s.index.IsEpisodeInIndex(episode), Equals, false) }