aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsoftworkz <softworkz@hotmail.com>2016-05-14 03:55:46 +0200
committersoftworkz <softworkz@hotmail.com>2016-09-14 22:42:24 +0200
commit896cc599367894ff15405412ca824c447b6ed814 (patch)
tree0b89c81cf44dc8f4af6ad474afab7bd519823a11
parent0c952972696e7e9aa74bfd646469521b42722398 (diff)
Prioritize metadata merging by preferred language
-rw-r--r--MediaBrowser.Controller/Providers/MetadataResult.cs3
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs36
-rw-r--r--MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs6
-rw-r--r--MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs19
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs11
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs20
6 files changed, 82 insertions, 13 deletions
diff --git a/MediaBrowser.Controller/Providers/MetadataResult.cs b/MediaBrowser.Controller/Providers/MetadataResult.cs
index 17175f91c..f6ca9405a 100644
--- a/MediaBrowser.Controller/Providers/MetadataResult.cs
+++ b/MediaBrowser.Controller/Providers/MetadataResult.cs
@@ -13,13 +13,14 @@ namespace MediaBrowser.Controller.Providers
public MetadataResult()
{
Images = new List<LocalImageInfo>();
+ ResultLanguage = "en";
}
public List<PersonInfo> People { get; set; }
public bool HasMetadata { get; set; }
public T Item { get; set; }
-
+ public string ResultLanguage { get; set; }
public void AddPerson(PersonInfo p)
{
if (People == null)
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index 85e25d2b6..fa9a725a7 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -646,6 +646,8 @@ namespace MediaBrowser.Providers.Manager
{
var refreshResult = new RefreshResult();
+ var results = new List<MetadataResult<TItemType>>();
+
foreach (var provider in providers)
{
var providerName = provider.GetType().Name;
@@ -662,7 +664,7 @@ namespace MediaBrowser.Providers.Manager
if (result.HasMetadata)
{
- MergeData(result, temp, new List<MetadataFields>(), false, false);
+ results.Add(result);
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataDownload;
}
@@ -683,6 +685,38 @@ namespace MediaBrowser.Providers.Manager
}
}
+ var orderedResults = new List<MetadataResult<TItemType>>();
+
+ if (string.IsNullOrEmpty(id.MetadataLanguage))
+ {
+ orderedResults.AddRange(results);
+ }
+ else
+ {
+ // prioritize results with matching ResultLanguage
+ foreach (var result in results)
+ {
+ if (!string.IsNullOrEmpty(result.ResultLanguage) && result.ResultLanguage == id.MetadataLanguage)
+ {
+ orderedResults.Add(result);
+ }
+ }
+
+ // add all other results
+ foreach (var result in results)
+ {
+ if (!orderedResults.Contains(result))
+ {
+ orderedResults.Add(result);
+ }
+ }
+ }
+
+ foreach (var result in results)
+ {
+ MergeData(result, temp, new List<MetadataFields>(), false, false);
+ }
+
return refreshResult;
}
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs
index bc9842b73..db49ef075 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs
@@ -92,6 +92,12 @@ namespace MediaBrowser.Providers.TV
result.HasMetadata = true;
+ if (!string.IsNullOrEmpty(response.overview))
+ {
+ // if overview is non-empty, we can assume that localized data was returned
+ result.ResultLanguage = info.MetadataLanguage;
+ }
+
var item = new Episode();
result.Item = item;
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs
index 3245a2c85..13a637be8 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs
@@ -168,7 +168,7 @@ namespace MediaBrowser.Providers.TV
{
cancellationToken.ThrowIfCancellationRequested();
- result.Item = await FetchSeriesData(tmdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false);
+ result = await FetchMovieData(tmdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false);
result.HasMetadata = result.Item != null;
}
@@ -176,7 +176,7 @@ namespace MediaBrowser.Providers.TV
return result;
}
- private async Task<Series> FetchSeriesData(string tmdbId, string language, string preferredCountryCode, CancellationToken cancellationToken)
+ private async Task<MetadataResult<Series>> FetchMovieData(string tmdbId, string language, string preferredCountryCode, CancellationToken cancellationToken)
{
string dataFilePath = null;
RootObject seriesInfo = null;
@@ -199,11 +199,13 @@ namespace MediaBrowser.Providers.TV
await EnsureSeriesInfo(tmdbId, language, cancellationToken).ConfigureAwait(false);
- var item = new Series();
+ var result = new MetadataResult<Series>();
+ result.Item = new Series();
+ result.ResultLanguage = seriesInfo.ResultLanguage;
- ProcessMainInfo(item, seriesInfo, preferredCountryCode);
+ ProcessMainInfo(result.Item, seriesInfo, preferredCountryCode);
- return item;
+ return result;
}
private void ProcessMainInfo(Series series, RootObject seriesInfo, string preferredCountryCode)
@@ -354,6 +356,11 @@ namespace MediaBrowser.Providers.TV
}).ConfigureAwait(false))
{
mainResult = _jsonSerializer.DeserializeFromStream<RootObject>(json);
+
+ if (!string.IsNullOrEmpty(language))
+ {
+ mainResult.ResultLanguage = language;
+ }
}
cancellationToken.ThrowIfCancellationRequested();
@@ -385,6 +392,7 @@ namespace MediaBrowser.Providers.TV
var englishResult = _jsonSerializer.DeserializeFromStream<RootObject>(json);
mainResult.overview = englishResult.overview;
+ mainResult.ResultLanguage = "en";
}
}
@@ -627,6 +635,7 @@ namespace MediaBrowser.Providers.TV
public ExternalIds external_ids { get; set; }
public Videos videos { get; set; }
public ContentRatings content_ratings { get; set; }
+ public string ResultLanguage { get; set; }
}
public int Order
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs
index a41a95c12..807db6180 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs
@@ -715,6 +715,17 @@ namespace MediaBrowser.Providers.TV
break;
}
+ case "Language":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ result.ResultLanguage = val;
+ }
+
+ break;
+ }
default:
reader.Skip();
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
index 66a02eba2..3d532b2fc 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
@@ -159,7 +159,7 @@ namespace MediaBrowser.Providers.TV
var seriesXmlPath = GetSeriesXmlPath(seriesProviderIds, metadataLanguage);
var actorsXmlPath = Path.Combine(seriesDataPath, "actors.xml");
- FetchSeriesInfo(series, seriesXmlPath, cancellationToken);
+ FetchSeriesInfo(result, seriesXmlPath, cancellationToken);
cancellationToken.ThrowIfCancellationRequested();
@@ -607,7 +607,7 @@ namespace MediaBrowser.Providers.TV
return name.Trim();
}
- private void FetchSeriesInfo(Series item, string seriesXmlPath, CancellationToken cancellationToken)
+ private void FetchSeriesInfo(MetadataResult<Series> result, string seriesXmlPath, CancellationToken cancellationToken)
{
var settings = new XmlReaderSettings
{
@@ -639,7 +639,7 @@ namespace MediaBrowser.Providers.TV
{
using (var subtree = reader.ReadSubtree())
{
- FetchDataFromSeriesNode(item, subtree, cancellationToken);
+ FetchDataFromSeriesNode(result, subtree, cancellationToken);
}
break;
}
@@ -667,9 +667,9 @@ namespace MediaBrowser.Providers.TV
}
}
- if (item.Status.HasValue && item.Status.Value == SeriesStatus.Ended && episiodeAirDates.Count > 0)
+ if (result.Item.Status.HasValue && result.Item.Status.Value == SeriesStatus.Ended && episiodeAirDates.Count > 0)
{
- item.EndDate = episiodeAirDates.Max();
+ result.Item.EndDate = episiodeAirDates.Max();
}
}
@@ -861,8 +861,10 @@ namespace MediaBrowser.Providers.TV
}
}
- private void FetchDataFromSeriesNode(Series item, XmlReader reader, CancellationToken cancellationToken)
+ private void FetchDataFromSeriesNode(MetadataResult<Series> result, XmlReader reader, CancellationToken cancellationToken)
{
+ Series item = result.Item;
+
reader.MoveToContent();
// Loop through each element
@@ -886,6 +888,12 @@ namespace MediaBrowser.Providers.TV
break;
}
+ case "Language":
+ {
+ result.ResultLanguage = (reader.ReadElementContentAsString() ?? string.Empty).Trim();
+ break;
+ }
+
case "Airs_DayOfWeek":
{
var val = reader.ReadElementContentAsString();