improve movie matching by looking for titles with same year first

pull/702/head
Luke Pulverenti 11 years ago
parent 415a2d4e31
commit b827f4058d

@ -441,36 +441,71 @@ namespace MediaBrowser.Providers.Movies
if (searchResult != null) if (searchResult != null)
{ {
foreach (var possible in searchResult.results) return FindIdOfBestResult(searchResult.results, name, year);
{ }
string matchedName = possible.title ?? possible.name;
string id = possible.id.ToString(CultureInfo.InvariantCulture); return null;
}
if (matchedName != null) private string FindIdOfBestResult(List<TmdbMovieSearchResult> results, string name, int? year)
{
if (year.HasValue)
{
// Take the first result from the same year
var id = results.Where(i =>
{
// Make sure it has a name
if (!string.IsNullOrEmpty(i.title ?? i.name))
{ {
Logger.Debug("Match " + matchedName + " for " + name); DateTime r;
if (year != null)
// These dates are always in this exact format
if (DateTime.TryParseExact(i.release_date, "yyyy-MM-dd", EnUs, DateTimeStyles.None, out r))
{ {
DateTime r; return r.Year == year.Value;
//These dates are always in this exact format
if (DateTime.TryParseExact(possible.release_date, "yyyy-MM-dd", EnUs, DateTimeStyles.None, out r))
{
if (Math.Abs(r.Year - year.Value) > 1) // allow a 1 year tolerance on release date
{
Logger.Debug("Result " + matchedName + " released on " + r + " did not match year " + year);
continue;
}
}
} }
//matched name and year
return id;
} }
return false;
})
.Select(i => i.id.ToString(CultureInfo.InvariantCulture))
.FirstOrDefault();
if (!string.IsNullOrEmpty(id))
{
return id;
}
// Take the first result within one year
id = results.Where(i =>
{
// Make sure it has a name
if (!string.IsNullOrEmpty(i.title ?? i.name))
{
DateTime r;
// These dates are always in this exact format
if (DateTime.TryParseExact(i.release_date, "yyyy-MM-dd", EnUs, DateTimeStyles.None, out r))
{
return Math.Abs(r.Year - year.Value) <= 1;
}
}
return false;
})
.Select(i => i.id.ToString(CultureInfo.InvariantCulture))
.FirstOrDefault();
if (!string.IsNullOrEmpty(id))
{
return id;
} }
} }
return null; // Just take the first one
return results.Where(i => !string.IsNullOrEmpty(i.title ?? i.name))
.Select(i => i.id.ToString(CultureInfo.InvariantCulture))
.FirstOrDefault();
} }
/// <summary> /// <summary>
@ -601,7 +636,7 @@ namespace MediaBrowser.Providers.Movies
return path; return path;
} }
internal string GetImagesDataFilePath(BaseItem item) internal string GetImagesDataFilePath(BaseItem item)
{ {
var path = GetDataFilePath(item); var path = GetDataFilePath(item);

Loading…
Cancel
Save