private MappingResult GetMovie(ParsedMovieInfo parsedMovieInfo, string imdbId, SearchCriteriaBase searchCriteria) { MappingResult result = null; if (!string.IsNullOrWhiteSpace(imdbId) && imdbId != "0") { if (TryGetMovieByImDbId(parsedMovieInfo, imdbId, out result)) { return(result); } } if (searchCriteria != null) { if (TryGetMovieBySearchCriteria(parsedMovieInfo, searchCriteria, out result)) { return(result); } } else { if (TryGetMovieByTitleAndOrYear(parsedMovieInfo, out result)) { return(result); } } // nothing found up to here => logging that and returning null _logger.Debug($"No matching movie {parsedMovieInfo.MovieTitle}"); return(result); }
private bool TryGetMovieByImDbId(ParsedMovieInfo parsedMovieInfo, string imdbId, out MappingResult result) { var movie = _movieService.FindByImdbId(imdbId); //Should fix practically all problems, where indexer is s***e at adding correct imdbids to movies. if (movie != null && parsedMovieInfo.Year > 1800 && (parsedMovieInfo.Year != movie.Year && movie.SecondaryYear != parsedMovieInfo.Year)) { result = new MappingResult { Movie = movie, MappingResultType = MappingResultType.WrongYear }; return(false); } if (movie != null) { result = new MappingResult { Movie = movie }; } else { result = new MappingResult { Movie = movie, MappingResultType = MappingResultType.TitleNotFound }; } return(movie != null); }
private MappingResult GetMovie(ParsedMovieInfo parsedMovieInfo, string imdbId, SearchCriteriaBase searchCriteria) { // TODO: Answer me this: Wouldn't it be smarter to start out looking for a movie if we have an ImDb Id? MappingResult result = null; if (!String.IsNullOrWhiteSpace(imdbId) && imdbId != "0") { if (TryGetMovieByImDbId(parsedMovieInfo, imdbId, out result)) { return(result); } } if (searchCriteria != null) { if (TryGetMovieBySearchCriteria(parsedMovieInfo, searchCriteria, out result)) { return(result); } } else { TryGetMovieByTitleAndOrYear(parsedMovieInfo, out result); return(result); } // nothing found up to here => logging that and returning null _logger.Debug($"No matching movie {parsedMovieInfo.MovieTitle}"); return(result); }
public MappingResult Map(ParsedMovieInfo parsedMovieInfo, string imdbId, SearchCriteriaBase searchCriteria = null) { var result = GetMovie(parsedMovieInfo, imdbId, searchCriteria); if (result == null) { result = new MappingResult { MappingResultType = MappingResultType.Unknown }; result.Movie = null; } //Use movie language as fallback if we could't parse a language (more accurate than just using English) if (parsedMovieInfo.Languages.Count <= 1 && parsedMovieInfo.Languages.First() == Language.Unknown && result.Movie != null) { parsedMovieInfo.Languages = new List <Language> { result.Movie.OriginalLanguage }; _logger.Debug("Language couldn't be parsed from release, fallback to movie original language: {0}", result.Movie.OriginalLanguage.Name); } result.RemoteMovie.ParsedMovieInfo = parsedMovieInfo; return(result); }
private bool TryGetMovieBySearchCriteria(ParsedMovieInfo parsedMovieInfo, SearchCriteriaBase searchCriteria, out MappingResult result) { Movie possibleMovie = null; var possibleTitles = new List <string>(); possibleTitles.Add(searchCriteria.Movie.CleanTitle); possibleTitles.AddRange(searchCriteria.Movie.AlternativeTitles.Select(t => t.CleanTitle)); possibleTitles.AddRange(searchCriteria.Movie.Translations.Select(t => t.CleanTitle)); var cleanTitle = parsedMovieInfo.MovieTitle.CleanMovieTitle(); foreach (var title in possibleTitles) { if (title == cleanTitle) { possibleMovie = searchCriteria.Movie; } foreach (var numeralMapping in _arabicRomanNumeralMappings) { var arabicNumeral = numeralMapping.ArabicNumeralAsString; var romanNumeral = numeralMapping.RomanNumeralLowerCase; //_logger.Debug(cleanTitle); if (title.Replace(arabicNumeral, romanNumeral) == cleanTitle) { possibleMovie = searchCriteria.Movie; } if (title == cleanTitle.Replace(arabicNumeral, romanNumeral)) { possibleMovie = searchCriteria.Movie; } } } if (possibleMovie != null) { if (parsedMovieInfo.Year < 1800 || possibleMovie.Year == parsedMovieInfo.Year || possibleMovie.SecondaryYear == parsedMovieInfo.Year) { result = new MappingResult { Movie = possibleMovie, MappingResultType = MappingResultType.Success }; return(true); } result = new MappingResult { Movie = possibleMovie, MappingResultType = MappingResultType.WrongYear }; return(false); } result = new MappingResult { Movie = searchCriteria.Movie, MappingResultType = MappingResultType.WrongTitle }; return(false); }
private bool TryGetMovieByTitleAndOrYear(ParsedMovieInfo parsedMovieInfo, out MappingResult result) { var candidates = _movieService.FindByTitleCandidates(parsedMovieInfo.MovieTitle, out var arabicTitle, out var romanTitle); Movie movieByTitleAndOrYear; if (parsedMovieInfo.Year > 1800) { movieByTitleAndOrYear = _movieService.FindByTitle(parsedMovieInfo.MovieTitle, parsedMovieInfo.Year, arabicTitle, romanTitle, candidates); if (movieByTitleAndOrYear != null) { result = new MappingResult { Movie = movieByTitleAndOrYear }; return(true); } // Only default to not using year when one is parsed if only one movie candidate exists if (candidates != null && candidates.Count == 1) { movieByTitleAndOrYear = _movieService.FindByTitle(parsedMovieInfo.MovieTitle, null, arabicTitle, romanTitle, candidates); if (movieByTitleAndOrYear != null) { result = new MappingResult { Movie = movieByTitleAndOrYear, MappingResultType = MappingResultType.WrongYear }; return(false); } } result = new MappingResult { Movie = movieByTitleAndOrYear, MappingResultType = MappingResultType.TitleNotFound }; return(false); } movieByTitleAndOrYear = _movieService.FindByTitle(parsedMovieInfo.MovieTitle, null, arabicTitle, romanTitle, candidates); if (movieByTitleAndOrYear != null) { result = new MappingResult { Movie = movieByTitleAndOrYear }; return(true); } result = new MappingResult { Movie = movieByTitleAndOrYear, MappingResultType = MappingResultType.TitleNotFound }; return(false); }
public MappingResult Map(ParsedMovieInfo parsedMovieInfo, string imdbId, SearchCriteriaBase searchCriteria = null) { var result = GetMovie(parsedMovieInfo, imdbId, searchCriteria); if (result == null) { result = new MappingResult { MappingResultType = MappingResultType.Unknown }; result.Movie = null; } result.RemoteMovie.ParsedMovieInfo = parsedMovieInfo; return(result); }
private bool TryGetMovieBySearchCriteria(ParsedMovieInfo parsedMovieInfo, SearchCriteriaBase searchCriteria, out MappingResult result) { Movie possibleMovie = null; List <string> possibleTitles = new List <string>(); possibleTitles.Add(searchCriteria.Movie.CleanTitle); foreach (AlternativeTitle altTitle in searchCriteria.Movie.AlternativeTitles) { possibleTitles.Add(altTitle.CleanTitle); } string cleanTitle = parsedMovieInfo.MovieTitle.CleanSeriesTitle(); foreach (string title in possibleTitles) { if (title == parsedMovieInfo.MovieTitle.CleanSeriesTitle()) { possibleMovie = searchCriteria.Movie; } foreach (ArabicRomanNumeral numeralMapping in _arabicRomanNumeralMappings) { string arabicNumeral = numeralMapping.ArabicNumeralAsString; string romanNumeral = numeralMapping.RomanNumeralLowerCase; //_logger.Debug(cleanTitle); if (title.Replace(arabicNumeral, romanNumeral) == parsedMovieInfo.MovieTitle.CleanSeriesTitle()) { possibleMovie = searchCriteria.Movie; } if (title == parsedMovieInfo.MovieTitle.CleanSeriesTitle().Replace(arabicNumeral, romanNumeral)) { possibleMovie = searchCriteria.Movie; } } } if (possibleMovie != null) { if (parsedMovieInfo.Year < 1800 || possibleMovie.Year == parsedMovieInfo.Year || possibleMovie.SecondaryYear == parsedMovieInfo.Year) { result = new MappingResult { Movie = possibleMovie, MappingResultType = MappingResultType.Success }; return(true); } result = new MappingResult { Movie = possibleMovie, MappingResultType = MappingResultType.WrongYear }; return(false); } if (_config.ParsingLeniency == ParsingLeniencyType.MappingLenient) { if (searchCriteria.Movie.CleanTitle.Contains(cleanTitle) || cleanTitle.Contains(searchCriteria.Movie.CleanTitle)) { possibleMovie = searchCriteria.Movie; if (parsedMovieInfo.Year > 1800 && parsedMovieInfo.Year == possibleMovie.Year || possibleMovie.SecondaryYear == parsedMovieInfo.Year) { result = new MappingResult { Movie = possibleMovie, MappingResultType = MappingResultType.SuccessLenientMapping }; return(true); } if (parsedMovieInfo.Year < 1800) { result = new MappingResult { Movie = possibleMovie, MappingResultType = MappingResultType.SuccessLenientMapping }; return(true); } result = new MappingResult { Movie = possibleMovie, MappingResultType = MappingResultType.WrongYear }; return(false); } } result = new MappingResult { Movie = searchCriteria.Movie, MappingResultType = MappingResultType.WrongTitle }; return(false); }
private bool TryGetMovieByTitleAndOrYear(ParsedMovieInfo parsedMovieInfo, out MappingResult result) { Func <Movie, bool> isNotNull = movie => movie != null; Movie movieByTitleAndOrYear = null; if (parsedMovieInfo.Year > 1800) { movieByTitleAndOrYear = _movieService.FindByTitle(parsedMovieInfo.MovieTitle, parsedMovieInfo.Year); if (isNotNull(movieByTitleAndOrYear)) { result = new MappingResult { Movie = movieByTitleAndOrYear }; return(true); } movieByTitleAndOrYear = _movieService.FindByTitle(parsedMovieInfo.MovieTitle); if (isNotNull(movieByTitleAndOrYear)) { result = new MappingResult { Movie = movieByTitleAndOrYear, MappingResultType = MappingResultType.WrongYear }; return(false); } if (_config.ParsingLeniency == ParsingLeniencyType.MappingLenient) { movieByTitleAndOrYear = _movieService.FindByTitleInexact(parsedMovieInfo.MovieTitle, parsedMovieInfo.Year); if (isNotNull(movieByTitleAndOrYear)) { result = new MappingResult { Movie = movieByTitleAndOrYear, MappingResultType = MappingResultType.SuccessLenientMapping }; return(true); } } result = new MappingResult { Movie = movieByTitleAndOrYear, MappingResultType = MappingResultType.TitleNotFound }; return(false); } movieByTitleAndOrYear = _movieService.FindByTitle(parsedMovieInfo.MovieTitle); if (isNotNull(movieByTitleAndOrYear)) { result = new MappingResult { Movie = movieByTitleAndOrYear }; return(true); } if (_config.ParsingLeniency == ParsingLeniencyType.MappingLenient) { movieByTitleAndOrYear = _movieService.FindByTitleInexact(parsedMovieInfo.MovieTitle, null); if (isNotNull(movieByTitleAndOrYear)) { result = new MappingResult { Movie = movieByTitleAndOrYear, MappingResultType = MappingResultType.SuccessLenientMapping }; return(true); } } result = new MappingResult { Movie = movieByTitleAndOrYear, MappingResultType = MappingResultType.TitleNotFound }; return(false); }