Unable to properly parse many movie titles

This commit is contained in:
Tim Turner 2017-01-08 19:48:04 -05:00
parent 14bf63e21d
commit 7a45394820
13 changed files with 76 additions and 40 deletions

View File

@ -107,8 +107,8 @@ namespace NzbDrone.Api.Indexers
ReleaseGroup = parsedMovieInfo.ReleaseGroup, ReleaseGroup = parsedMovieInfo.ReleaseGroup,
ReleaseHash = parsedMovieInfo.ReleaseHash, ReleaseHash = parsedMovieInfo.ReleaseHash,
Title = releaseInfo.Title, Title = releaseInfo.Title,
FullSeason = parsedMovieInfo.FullSeason, //FullSeason = parsedMovieInfo.FullSeason,
SeasonNumber = parsedMovieInfo.SeasonNumber, //SeasonNumber = parsedMovieInfo.SeasonNumber,
Language = parsedMovieInfo.Language, Language = parsedMovieInfo.Language,
AirDate = "", AirDate = "",
SeriesTitle = parsedMovieInfo.MovieTitle, SeriesTitle = parsedMovieInfo.MovieTitle,
@ -138,7 +138,7 @@ namespace NzbDrone.Api.Indexers
IsDaily = false, IsDaily = false,
IsAbsoluteNumbering = false, IsAbsoluteNumbering = false,
IsPossibleSpecialEpisode = false, IsPossibleSpecialEpisode = false,
Special = parsedMovieInfo.Special, //Special = parsedMovieInfo.Special,
}; };
} }

View File

@ -33,6 +33,7 @@ namespace NzbDrone.Api.Movie
public bool Downloaded { get; set; } public bool Downloaded { get; set; }
public string RemotePoster { get; set; } public string RemotePoster { get; set; }
public int Year { get; set; } public int Year { get; set; }
public bool HasFile { get; set; }
//View & Edit //View & Edit
public string Path { get; set; } public string Path { get; set; }
@ -80,7 +81,17 @@ namespace NzbDrone.Api.Movie
{ {
if (model == null) return null; if (model == null) return null;
long Size = model.MovieFile.Value != null ? model.MovieFile.Value.Size : 0;
long size = 0;
bool downloaded = false;
if(model.MovieFile != null && model.MovieFile.IsLoaded)
{
size = model.MovieFile.Value.Size;
downloaded = true;
}
//long Size = model.MovieFile != null ? model.MovieFile.Value.Size : 0;
return new MovieResource return new MovieResource
{ {
@ -91,8 +102,8 @@ namespace NzbDrone.Api.Movie
SortTitle = model.SortTitle, SortTitle = model.SortTitle,
InCinemas = model.InCinemas, InCinemas = model.InCinemas,
PhysicalRelease = model.PhysicalRelease, PhysicalRelease = model.PhysicalRelease,
HasFile = model.HasFile,
Downloaded = model.MovieFile.Value != null, Downloaded = downloaded,
//TotalEpisodeCount //TotalEpisodeCount
//EpisodeCount //EpisodeCount
//EpisodeFileCount //EpisodeFileCount
@ -110,7 +121,7 @@ namespace NzbDrone.Api.Movie
Monitored = model.Monitored, Monitored = model.Monitored,
SizeOnDisk = Size, SizeOnDisk = size,
Runtime = model.Runtime, Runtime = model.Runtime,
LastInfoSync = model.LastInfoSync, LastInfoSync = model.LastInfoSync,

View File

@ -159,7 +159,7 @@ namespace NzbDrone.Core.MediaFiles
} }
var cleanedUpName = GetCleanedUpFolderName(directoryInfo.Name); var cleanedUpName = GetCleanedUpFolderName(directoryInfo.Name);
var folderInfo = Parser.Parser.ParseTitle(directoryInfo.Name); var folderInfo = Parser.Parser.ParseMovieTitle(directoryInfo.Name);
if (folderInfo != null) if (folderInfo != null)
{ {

View File

@ -80,7 +80,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport
episodeFile.Quality = localMovie.Quality; episodeFile.Quality = localMovie.Quality;
episodeFile.MediaInfo = localMovie.MediaInfo; episodeFile.MediaInfo = localMovie.MediaInfo;
episodeFile.Movie = localMovie.Movie; episodeFile.Movie = localMovie.Movie;
episodeFile.ReleaseGroup = localMovie.ParsedEpisodeInfo.ReleaseGroup; episodeFile.ReleaseGroup = localMovie.ParsedMovieInfo.ReleaseGroup;
bool copyOnly; bool copyOnly;
switch (importMode) switch (importMode)

View File

@ -24,12 +24,12 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport
{ {
LocalMovie = localMovie; LocalMovie = localMovie;
Rejections = rejections.ToList(); Rejections = rejections.ToList();
LocalEpisode = new LocalEpisode LocalMovie = new LocalMovie
{ {
Quality = localMovie.Quality, Quality = localMovie.Quality,
ExistingFile = localMovie.ExistingFile, ExistingFile = localMovie.ExistingFile,
MediaInfo = localMovie.MediaInfo, MediaInfo = localMovie.MediaInfo,
ParsedEpisodeInfo = localMovie.ParsedEpisodeInfo, ParsedMovieInfo = localMovie.ParsedMovieInfo,
Path = localMovie.Path, Path = localMovie.Path,
Size = localMovie.Size Size = localMovie.Size
}; };

View File

@ -19,7 +19,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport
{ {
List<ImportDecision> GetImportDecisions(List<string> videoFiles, Series series); List<ImportDecision> GetImportDecisions(List<string> videoFiles, Series series);
List<ImportDecision> GetImportDecisions(List<string> videoFiles, Movie movie); List<ImportDecision> GetImportDecisions(List<string> videoFiles, Movie movie);
List<ImportDecision> GetImportDecisions(List<string> videoFiles, Movie movie, ParsedEpisodeInfo folderInfo, bool sceneSource); //TODO: Needs changing to ParsedMovieInfo!! List<ImportDecision> GetImportDecisions(List<string> videoFiles, Movie movie, ParsedMovieInfo folderInfo, bool sceneSource); //TODO: Needs changing to ParsedMovieInfo!!
List<ImportDecision> GetImportDecisions(List<string> videoFiles, Series series, ParsedEpisodeInfo folderInfo, bool sceneSource); List<ImportDecision> GetImportDecisions(List<string> videoFiles, Series series, ParsedEpisodeInfo folderInfo, bool sceneSource);
} }
@ -77,7 +77,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport
return decisions; return decisions;
} }
public List<ImportDecision> GetImportDecisions(List<string> videoFiles, Movie movie, ParsedEpisodeInfo folderInfo, bool sceneSource) public List<ImportDecision> GetImportDecisions(List<string> videoFiles, Movie movie, ParsedMovieInfo folderInfo, bool sceneSource)
{ {
var newFiles = _mediaFileService.FilterExistingFiles(videoFiles.ToList(), movie); var newFiles = _mediaFileService.FilterExistingFiles(videoFiles.ToList(), movie);
@ -94,7 +94,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport
return decisions; return decisions;
} }
private ImportDecision GetDecision(string file, Movie movie, ParsedEpisodeInfo folderInfo, bool sceneSource, bool shouldUseFolderName) private ImportDecision GetDecision(string file, Movie movie, ParsedMovieInfo folderInfo, bool sceneSource, bool shouldUseFolderName)
{ {
ImportDecision decision = null; ImportDecision decision = null;
@ -291,17 +291,17 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport
}) == 1; }) == 1;
} }
private bool ShouldUseFolderName(List<string> videoFiles, Movie movie, ParsedEpisodeInfo folderInfo) private bool ShouldUseFolderName(List<string> videoFiles, Movie movie, ParsedMovieInfo folderInfo)
{ {
if (folderInfo == null) if (folderInfo == null)
{ {
return false; return false;
} }
if (folderInfo.FullSeason) //if (folderInfo.FullSeason)
{ //{
return false; // return false;
} //}
return videoFiles.Count(file => return videoFiles.Count(file =>
{ {
@ -325,7 +325,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport
}) == 1; }) == 1;
} }
private QualityModel GetQuality(ParsedEpisodeInfo folderInfo, QualityModel fileQuality, Movie movie) private QualityModel GetQuality(ParsedMovieInfo folderInfo, QualityModel fileQuality, Movie movie)
{ {
if (UseFolderQuality(folderInfo, fileQuality, movie)) if (UseFolderQuality(folderInfo, fileQuality, movie))
{ {
@ -347,7 +347,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport
return fileQuality; return fileQuality;
} }
private bool UseFolderQuality(ParsedEpisodeInfo folderInfo, QualityModel fileQuality, Movie movie) private bool UseFolderQuality(ParsedMovieInfo folderInfo, QualityModel fileQuality, Movie movie)
{ {
if (folderInfo == null) if (folderInfo == null)
{ {

View File

@ -63,7 +63,7 @@ namespace NzbDrone.Core.MediaFiles
var movieFilePath = Path.Combine(movie.Path, file.RelativePath); var movieFilePath = Path.Combine(movie.Path, file.RelativePath);
var newName = _filenameBuilder.BuildFileName(movie, file); var newName = _filenameBuilder.BuildFileName(movie, file);
var newPath = _filenameBuilder.BuildFilePath(movie, newName, Path.GetExtension(file.Path)); var newPath = _filenameBuilder.BuildFilePath(movie, newName, Path.GetExtension(movieFilePath));
if(!movieFilePath.PathEquals(newPath, StringComparison.Ordinal)) if(!movieFilePath.PathEquals(newPath, StringComparison.Ordinal))
{ {

View File

@ -254,7 +254,7 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
} }
} }
var searchTerm = lowerTitle.Replace("_", "+").Replace(" ", "+"); var searchTerm = lowerTitle.Replace("_", "+").Replace(" ", "+").Replace(".", "+");
var firstChar = searchTerm.First(); var firstChar = searchTerm.First();

View File

@ -1,4 +1,4 @@
using System.Linq; using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
@ -14,7 +14,7 @@ namespace NzbDrone.Core.Parser.Model
public string Path { get; set; } public string Path { get; set; }
public long Size { get; set; } public long Size { get; set; }
public ParsedEpisodeInfo ParsedEpisodeInfo { get; set; } public ParsedMovieInfo ParsedMovieInfo { get; set; }
public Movie Movie { get; set; } public Movie Movie { get; set; }
public QualityModel Quality { get; set; } public QualityModel Quality { get; set; }
public MediaInfoModel MediaInfo { get; set; } public MediaInfoModel MediaInfo { get; set; }

View File

@ -1,4 +1,4 @@
using System.Linq; using System.Linq;
using NzbDrone.Common.Extensions; using NzbDrone.Common.Extensions;
using NzbDrone.Core.Qualities; using NzbDrone.Core.Qualities;
@ -9,10 +9,10 @@ namespace NzbDrone.Core.Parser.Model
public string MovieTitle { get; set; } public string MovieTitle { get; set; }
public SeriesTitleInfo MovieTitleInfo { get; set; } public SeriesTitleInfo MovieTitleInfo { get; set; }
public QualityModel Quality { get; set; } public QualityModel Quality { get; set; }
public int SeasonNumber { get; set; } //public int SeasonNumber { get; set; }
public Language Language { get; set; } public Language Language { get; set; }
public bool FullSeason { get; set; } //public bool FullSeason { get; set; }
public bool Special { get; set; } //public bool Special { get; set; }
public string ReleaseGroup { get; set; } public string ReleaseGroup { get; set; }
public string ReleaseHash { get; set; } public string ReleaseHash { get; set; }
public string Edition { get; set;} public string Edition { get; set;}

View File

@ -321,6 +321,28 @@ namespace NzbDrone.Core.Parser
return result; return result;
} }
public static ParsedMovieInfo ParseMoviePath(string path)
{
var fileInfo = new FileInfo(path);
var result = ParseMovieTitle(fileInfo.Name);
if (result == null)
{
Logger.Debug("Attempting to parse episode info using directory and file names. {0}", fileInfo.Directory.Name);
result = ParseMovieTitle(fileInfo.Directory.Name + " " + fileInfo.Name);
}
if (result == null)
{
Logger.Debug("Attempting to parse episode info using directory name. {0}", fileInfo.Directory.Name);
result = ParseMovieTitle(fileInfo.Directory.Name + fileInfo.Extension);
}
return result;
}
public static ParsedMovieInfo ParseMovieTitle(string title) public static ParsedMovieInfo ParseMovieTitle(string title)
{ {

View File

@ -16,7 +16,7 @@ namespace NzbDrone.Core.Parser
LocalEpisode GetLocalEpisode(string filename, Series series); LocalEpisode GetLocalEpisode(string filename, Series series);
LocalEpisode GetLocalEpisode(string filename, Series series, ParsedEpisodeInfo folderInfo, bool sceneSource); LocalEpisode GetLocalEpisode(string filename, Series series, ParsedEpisodeInfo folderInfo, bool sceneSource);
LocalMovie GetLocalMovie(string filename, Movie movie); LocalMovie GetLocalMovie(string filename, Movie movie);
LocalMovie GetLocalMovie(string filename, Movie movie, ParsedEpisodeInfo folderInfo, bool sceneSource); LocalMovie GetLocalMovie(string filename, Movie movie, ParsedMovieInfo folderInfo, bool sceneSource);
Series GetSeries(string title); Series GetSeries(string title);
Movie GetMovie(string title); Movie GetMovie(string title);
RemoteEpisode Map(ParsedEpisodeInfo parsedEpisodeInfo, int tvdbId, int tvRageId, SearchCriteriaBase searchCriteria = null); RemoteEpisode Map(ParsedEpisodeInfo parsedEpisodeInfo, int tvdbId, int tvRageId, SearchCriteriaBase searchCriteria = null);
@ -120,26 +120,26 @@ namespace NzbDrone.Core.Parser
return GetLocalMovie(filename, movie, null, false); return GetLocalMovie(filename, movie, null, false);
} }
public LocalMovie GetLocalMovie(string filename, Movie movie, ParsedEpisodeInfo folderInfo, bool sceneSource) public LocalMovie GetLocalMovie(string filename, Movie movie, ParsedMovieInfo folderInfo, bool sceneSource)
{ {
ParsedEpisodeInfo parsedEpisodeInfo; ParsedMovieInfo parsedMovieInfo;
if (folderInfo != null) if (folderInfo != null)
{ {
parsedEpisodeInfo = folderInfo.JsonClone(); parsedMovieInfo = folderInfo.JsonClone();
parsedEpisodeInfo.Quality = QualityParser.ParseQuality(Path.GetFileName(filename)); parsedMovieInfo.Quality = QualityParser.ParseQuality(Path.GetFileName(filename));
} }
else else
{ {
parsedEpisodeInfo = Parser.ParsePath(filename); parsedMovieInfo = Parser.ParseMoviePath(filename);
} }
if (parsedEpisodeInfo == null) if (parsedMovieInfo == null)
{ {
if (MediaFileExtensions.Extensions.Contains(Path.GetExtension(filename))) if (MediaFileExtensions.Extensions.Contains(Path.GetExtension(filename)))
{ {
_logger.Warn("Unable to parse episode info from path {0}", filename); _logger.Warn("Unable to parse movie info from path {0}", filename);
} }
return null; return null;
@ -148,9 +148,9 @@ namespace NzbDrone.Core.Parser
return new LocalMovie return new LocalMovie
{ {
Movie = movie, Movie = movie,
Quality = parsedEpisodeInfo.Quality, Quality = parsedMovieInfo.Quality,
Path = filename, Path = filename,
ParsedEpisodeInfo = parsedEpisodeInfo, ParsedMovieInfo = parsedMovieInfo,
ExistingFile = movie.Path.IsParentPath(filename) ExistingFile = movie.Path.IsParentPath(filename)
}; };
} }

View File

@ -48,6 +48,9 @@ namespace NzbDrone.Core.Tv
public LazyLoaded<MovieFile> MovieFile { get; set; } public LazyLoaded<MovieFile> MovieFile { get; set; }
public int MovieFileId { get; set; } public int MovieFileId { get; set; }
public List<string> AlternativeTitles { get; set; } public List<string> AlternativeTitles { get; set; }
public bool HasFile => MovieFileId > 0;
public override string ToString() public override string ToString()
{ {
return string.Format("[{0}][{1}]", ImdbId, Title.NullSafe()); return string.Format("[{0}][{1}]", ImdbId, Title.NullSafe());