示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
        }
示例#9
0
        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);
        }