diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-12-01 13:57:52 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-12-01 13:57:52 -0500 |
| commit | b827f4058da428e5688b249ba1e7fff3c91f83a7 (patch) | |
| tree | b0550ca9b6a43df4f7b3b803dc30d2fc4a130fc3 | |
| parent | 415a2d4e314baf3356f94dbea7e7cfaf2b4880dd (diff) | |
improve movie matching by looking for titles with same year first
| -rw-r--r-- | MediaBrowser.Providers/Movies/MovieDbProvider.cs | 79 |
1 files changed, 57 insertions, 22 deletions
diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Movies/MovieDbProvider.cs index b4903ba69..fe409c090 100644 --- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbProvider.cs @@ -441,36 +441,71 @@ namespace MediaBrowser.Providers.Movies if (searchResult != null) { - foreach (var possible in searchResult.results) - { - string matchedName = possible.title ?? possible.name; - string id = possible.id.ToString(CultureInfo.InvariantCulture); + return FindIdOfBestResult(searchResult.results, name, year); + } + + 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); - if (year != null) + DateTime r; + + // These dates are always in this exact format + if (DateTime.TryParseExact(i.release_date, "yyyy-MM-dd", EnUs, DateTimeStyles.None, out r)) { - DateTime r; - - //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; - } - } + return r.Year == year.Value; } - //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> @@ -601,7 +636,7 @@ namespace MediaBrowser.Providers.Movies return path; } - + internal string GetImagesDataFilePath(BaseItem item) { var path = GetDataFilePath(item); |
