mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-06-23 15:30:56 -04:00
allow custom language per item
This commit is contained in:
parent
0a3b16dfbe
commit
28b0ff1e75
@ -311,10 +311,12 @@ namespace MediaBrowser.Api
|
|||||||
|
|
||||||
SetProductionLocations(item, request);
|
SetProductionLocations(item, request);
|
||||||
|
|
||||||
var hasLanguage = item as IHasLanguage;
|
var hasLang = item as IHasPreferredMetadataLanguage;
|
||||||
if (hasLanguage != null)
|
|
||||||
|
if (hasLang != null)
|
||||||
{
|
{
|
||||||
hasLanguage.Language = request.Language;
|
hasLang.PreferredMetadataCountryCode = request.PreferredMetadataCountryCode;
|
||||||
|
hasLang.PreferredMetadataLanguage = request.PreferredMetadataLanguage;
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasAspectRatio = item as IHasAspectRatio;
|
var hasAspectRatio = item as IHasAspectRatio;
|
||||||
|
@ -4,5 +4,11 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
public class AdultVideo : Video, IHasPreferredMetadataLanguage
|
public class AdultVideo : Video, IHasPreferredMetadataLanguage
|
||||||
{
|
{
|
||||||
public string PreferredMetadataLanguage { get; set; }
|
public string PreferredMetadataLanguage { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the preferred metadata country code.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The preferred metadata country code.</value>
|
||||||
|
public string PreferredMetadataCountryCode { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,19 +9,13 @@ namespace MediaBrowser.Controller.Entities.Audio
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class Audio
|
/// Class Audio
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Audio : BaseItem, IHasMediaStreams, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasLanguage
|
public class Audio : BaseItem, IHasMediaStreams, IHasAlbumArtist, IHasArtist, IHasMusicGenres
|
||||||
{
|
{
|
||||||
public Audio()
|
public Audio()
|
||||||
{
|
{
|
||||||
Artists = new List<string>();
|
Artists = new List<string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the language.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The language.</value>
|
|
||||||
public string Language { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a value indicating whether this instance has embedded image.
|
/// Gets or sets a value indicating whether this instance has embedded image.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -960,7 +960,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
/// Gets the preferred metadata language.
|
/// Gets the preferred metadata language.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>System.String.</returns>
|
/// <returns>System.String.</returns>
|
||||||
public virtual string GetPreferredMetadataLanguage()
|
public string GetPreferredMetadataLanguage()
|
||||||
{
|
{
|
||||||
string lang = null;
|
string lang = null;
|
||||||
|
|
||||||
@ -971,6 +971,13 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
lang = hasLang.PreferredMetadataLanguage;
|
lang = hasLang.PreferredMetadataLanguage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(lang))
|
||||||
|
{
|
||||||
|
lang = Parents.OfType<IHasPreferredMetadataLanguage>()
|
||||||
|
.Select(i => i.PreferredMetadataLanguage)
|
||||||
|
.FirstOrDefault(i => !string.IsNullOrEmpty(i));
|
||||||
|
}
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(lang))
|
if (string.IsNullOrEmpty(lang))
|
||||||
{
|
{
|
||||||
lang = ConfigurationManager.Configuration.PreferredMetadataLanguage;
|
lang = ConfigurationManager.Configuration.PreferredMetadataLanguage;
|
||||||
@ -979,6 +986,36 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return lang;
|
return lang;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the preferred metadata language.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>System.String.</returns>
|
||||||
|
public string GetPreferredMetadataCountryCode()
|
||||||
|
{
|
||||||
|
string lang = null;
|
||||||
|
|
||||||
|
var hasLang = this as IHasPreferredMetadataLanguage;
|
||||||
|
|
||||||
|
if (hasLang != null)
|
||||||
|
{
|
||||||
|
lang = hasLang.PreferredMetadataCountryCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(lang))
|
||||||
|
{
|
||||||
|
lang = Parents.OfType<IHasPreferredMetadataLanguage>()
|
||||||
|
.Select(i => i.PreferredMetadataCountryCode)
|
||||||
|
.FirstOrDefault(i => !string.IsNullOrEmpty(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(lang))
|
||||||
|
{
|
||||||
|
lang = ConfigurationManager.Configuration.MetadataCountryCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
return lang;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines if a given user has access to this item
|
/// Determines if a given user has access to this item
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -23,6 +23,12 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
|
|
||||||
public string PreferredMetadataLanguage { get; set; }
|
public string PreferredMetadataLanguage { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the preferred metadata country code.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The preferred metadata country code.</value>
|
||||||
|
public string PreferredMetadataCountryCode { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -5,7 +5,7 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
namespace MediaBrowser.Controller.Entities
|
||||||
{
|
{
|
||||||
public class Game : BaseItem, IHasSoundtracks, IHasTrailers, IHasThemeMedia, IHasTags, IHasLanguage, IHasScreenshots, IHasPreferredMetadataLanguage
|
public class Game : BaseItem, IHasSoundtracks, IHasTrailers, IHasThemeMedia, IHasTags, IHasScreenshots, IHasPreferredMetadataLanguage
|
||||||
{
|
{
|
||||||
public List<Guid> SoundtrackIds { get; set; }
|
public List<Guid> SoundtrackIds { get; set; }
|
||||||
|
|
||||||
@ -14,6 +14,12 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
|
|
||||||
public string PreferredMetadataLanguage { get; set; }
|
public string PreferredMetadataLanguage { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the preferred metadata country code.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The preferred metadata country code.</value>
|
||||||
|
public string PreferredMetadataCountryCode { get; set; }
|
||||||
|
|
||||||
public Game()
|
public Game()
|
||||||
{
|
{
|
||||||
MultiPartGameFiles = new List<string>();
|
MultiPartGameFiles = new List<string>();
|
||||||
@ -26,12 +32,6 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
ScreenshotImagePaths = new List<string>();
|
ScreenshotImagePaths = new List<string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the language.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The language.</value>
|
|
||||||
public string Language { get; set; }
|
|
||||||
|
|
||||||
public List<Guid> LocalTrailerIds { get; set; }
|
public List<Guid> LocalTrailerIds { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interface IHasLanguage
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasLanguage
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the language.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The language.</value>
|
|
||||||
string Language { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -11,5 +11,11 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The preferred metadata language.</value>
|
/// <value>The preferred metadata language.</value>
|
||||||
string PreferredMetadataLanguage { get; set; }
|
string PreferredMetadataLanguage { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the preferred metadata country code.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The preferred metadata country code.</value>
|
||||||
|
string PreferredMetadataCountryCode { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,12 @@ namespace MediaBrowser.Controller.Entities.Movies
|
|||||||
|
|
||||||
public string PreferredMetadataLanguage { get; set; }
|
public string PreferredMetadataLanguage { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the preferred metadata country code.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The preferred metadata country code.</value>
|
||||||
|
public string PreferredMetadataCountryCode { get; set; }
|
||||||
|
|
||||||
protected override bool GetBlockUnratedValue(UserConfiguration config)
|
protected override bool GetBlockUnratedValue(UserConfiguration config)
|
||||||
{
|
{
|
||||||
return config.BlockUnratedMovies;
|
return config.BlockUnratedMovies;
|
||||||
|
@ -21,6 +21,12 @@ namespace MediaBrowser.Controller.Entities.Movies
|
|||||||
public List<Guid> ThemeSongIds { get; set; }
|
public List<Guid> ThemeSongIds { get; set; }
|
||||||
public List<Guid> ThemeVideoIds { get; set; }
|
public List<Guid> ThemeVideoIds { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the preferred metadata country code.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The preferred metadata country code.</value>
|
||||||
|
public string PreferredMetadataCountryCode { get; set; }
|
||||||
|
|
||||||
public string PreferredMetadataLanguage { get; set; }
|
public string PreferredMetadataLanguage { get; set; }
|
||||||
|
|
||||||
public Movie()
|
public Movie()
|
||||||
|
@ -21,6 +21,12 @@ namespace MediaBrowser.Controller.Entities.TV
|
|||||||
|
|
||||||
public int SeasonCount { get; set; }
|
public int SeasonCount { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the preferred metadata country code.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The preferred metadata country code.</value>
|
||||||
|
public string PreferredMetadataCountryCode { get; set; }
|
||||||
|
|
||||||
public Series()
|
public Series()
|
||||||
{
|
{
|
||||||
AirDays = new List<DayOfWeek>();
|
AirDays = new List<DayOfWeek>();
|
||||||
|
@ -15,6 +15,12 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
|
|
||||||
public string PreferredMetadataLanguage { get; set; }
|
public string PreferredMetadataLanguage { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the preferred metadata country code.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The preferred metadata country code.</value>
|
||||||
|
public string PreferredMetadataCountryCode { get; set; }
|
||||||
|
|
||||||
public Trailer()
|
public Trailer()
|
||||||
{
|
{
|
||||||
RemoteTrailers = new List<MediaUrl>();
|
RemoteTrailers = new List<MediaUrl>();
|
||||||
|
@ -86,7 +86,6 @@
|
|||||||
<Compile Include="Entities\IHasBudget.cs" />
|
<Compile Include="Entities\IHasBudget.cs" />
|
||||||
<Compile Include="Entities\IHasCriticRating.cs" />
|
<Compile Include="Entities\IHasCriticRating.cs" />
|
||||||
<Compile Include="Entities\IHasImages.cs" />
|
<Compile Include="Entities\IHasImages.cs" />
|
||||||
<Compile Include="Entities\IHasLanguage.cs" />
|
|
||||||
<Compile Include="Entities\IHasMediaStreams.cs" />
|
<Compile Include="Entities\IHasMediaStreams.cs" />
|
||||||
<Compile Include="Entities\IHasPreferredMetadataLanguage.cs" />
|
<Compile Include="Entities\IHasPreferredMetadataLanguage.cs" />
|
||||||
<Compile Include="Entities\IHasProductionLocations.cs" />
|
<Compile Include="Entities\IHasProductionLocations.cs" />
|
||||||
|
@ -269,10 +269,10 @@ namespace MediaBrowser.Controller.Providers
|
|||||||
{
|
{
|
||||||
var val = reader.ReadElementContentAsString();
|
var val = reader.ReadElementContentAsString();
|
||||||
|
|
||||||
var hasLanguage = item as IHasLanguage;
|
var hasLanguage = item as IHasPreferredMetadataLanguage;
|
||||||
if (hasLanguage != null)
|
if (hasLanguage != null)
|
||||||
{
|
{
|
||||||
hasLanguage.Language = val;
|
hasLanguage.PreferredMetadataLanguage = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -36,6 +36,9 @@ namespace MediaBrowser.Model.Dto
|
|||||||
public int? AbsoluteEpisodeNumber { get; set; }
|
public int? AbsoluteEpisodeNumber { get; set; }
|
||||||
public bool? DisplaySpecialsWithSeasons { get; set; }
|
public bool? DisplaySpecialsWithSeasons { get; set; }
|
||||||
|
|
||||||
|
public string PreferredMetadataLanguage { get; set; }
|
||||||
|
public string PreferredMetadataCountryCode { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the DVD season number.
|
/// Gets or sets the DVD season number.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -209,12 +212,6 @@ namespace MediaBrowser.Model.Dto
|
|||||||
/// <value>The provider ids.</value>
|
/// <value>The provider ids.</value>
|
||||||
public Dictionary<string, string> ProviderIds { get; set; }
|
public Dictionary<string, string> ProviderIds { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the language.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The language.</value>
|
|
||||||
public string Language { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a value indicating whether this instance is HD.
|
/// Gets or sets a value indicating whether this instance is HD.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -151,8 +151,6 @@ namespace MediaBrowser.Providers.MediaInfo
|
|||||||
// Disc number
|
// Disc number
|
||||||
audio.ParentIndexNumber = GetDictionaryDiscValue(tags, "disc");
|
audio.ParentIndexNumber = GetDictionaryDiscValue(tags, "disc");
|
||||||
|
|
||||||
audio.Language = GetDictionaryValue(tags, "language");
|
|
||||||
|
|
||||||
audio.ProductionYear = GetDictionaryNumericValue(tags, "date");
|
audio.ProductionYear = GetDictionaryNumericValue(tags, "date");
|
||||||
|
|
||||||
// Several different forms of retaildate
|
// Several different forms of retaildate
|
||||||
|
@ -499,6 +499,7 @@ namespace MediaBrowser.Providers.Movies
|
|||||||
// Id could be ImdbId or TmdbId
|
// Id could be ImdbId or TmdbId
|
||||||
|
|
||||||
var language = item.GetPreferredMetadataLanguage();
|
var language = item.GetPreferredMetadataLanguage();
|
||||||
|
var country = item.GetPreferredMetadataCountryCode();
|
||||||
|
|
||||||
var dataFilePath = GetDataFilePath(item);
|
var dataFilePath = GetDataFilePath(item);
|
||||||
|
|
||||||
@ -514,9 +515,7 @@ namespace MediaBrowser.Providers.Movies
|
|||||||
|
|
||||||
tmdbId = mainResult.id.ToString(_usCulture);
|
tmdbId = mainResult.id.ToString(_usCulture);
|
||||||
|
|
||||||
var movieDataPath = GetMovieDataPath(ConfigurationManager.ApplicationPaths, isBoxSet, tmdbId);
|
dataFilePath = GetDataFilePath(isBoxSet, tmdbId, language);
|
||||||
|
|
||||||
dataFilePath = Path.Combine(movieDataPath, "all.json");
|
|
||||||
|
|
||||||
var directory = Path.GetDirectoryName(dataFilePath);
|
var directory = Path.GetDirectoryName(dataFilePath);
|
||||||
|
|
||||||
@ -527,7 +526,7 @@ namespace MediaBrowser.Providers.Movies
|
|||||||
|
|
||||||
if (isForcedRefresh || ConfigurationManager.Configuration.EnableTmdbUpdates || !HasAltMeta(item))
|
if (isForcedRefresh || ConfigurationManager.Configuration.EnableTmdbUpdates || !HasAltMeta(item))
|
||||||
{
|
{
|
||||||
dataFilePath = GetDataFilePath(isBoxSet, tmdbId);
|
dataFilePath = GetDataFilePath(isBoxSet, tmdbId, language);
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(dataFilePath))
|
if (!string.IsNullOrEmpty(dataFilePath))
|
||||||
{
|
{
|
||||||
@ -543,19 +542,18 @@ namespace MediaBrowser.Providers.Movies
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id">The id.</param>
|
/// <param name="id">The id.</param>
|
||||||
/// <param name="isBoxSet">if set to <c>true</c> [is box set].</param>
|
/// <param name="isBoxSet">if set to <c>true</c> [is box set].</param>
|
||||||
/// <param name="dataPath">The data path.</param>
|
|
||||||
/// <param name="preferredMetadataLanguage">The preferred metadata language.</param>
|
/// <param name="preferredMetadataLanguage">The preferred metadata language.</param>
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
internal async Task DownloadMovieInfo(string id, bool isBoxSet, string dataPath, string preferredMetadataLanguage, CancellationToken cancellationToken)
|
internal async Task DownloadMovieInfo(string id, bool isBoxSet, string preferredMetadataLanguage, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var mainResult = await FetchMainResult(id, isBoxSet, preferredMetadataLanguage, cancellationToken).ConfigureAwait(false);
|
var mainResult = await FetchMainResult(id, isBoxSet, preferredMetadataLanguage, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
if (mainResult == null) return;
|
if (mainResult == null) return;
|
||||||
|
|
||||||
var dataFilePath = Path.Combine(dataPath, "all.json");
|
var dataFilePath = GetDataFilePath(isBoxSet, id, preferredMetadataLanguage);
|
||||||
|
|
||||||
Directory.CreateDirectory(dataPath);
|
Directory.CreateDirectory(Path.GetDirectoryName(dataFilePath));
|
||||||
|
|
||||||
JsonSerializer.SerializeToFile(mainResult, dataFilePath);
|
JsonSerializer.SerializeToFile(mainResult, dataFilePath);
|
||||||
}
|
}
|
||||||
@ -574,14 +572,17 @@ namespace MediaBrowser.Providers.Movies
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return GetDataFilePath(item is BoxSet, id);
|
return GetDataFilePath(item is BoxSet, id, item.GetPreferredMetadataLanguage());
|
||||||
}
|
}
|
||||||
|
|
||||||
internal string GetDataFilePath(bool isBoxset, string tmdbId)
|
internal string GetDataFilePath(bool isBoxset, string tmdbId, string preferredLanguage)
|
||||||
{
|
{
|
||||||
var path = GetMovieDataPath(ConfigurationManager.ApplicationPaths, isBoxset, tmdbId);
|
var path = GetMovieDataPath(ConfigurationManager.ApplicationPaths, isBoxset, tmdbId);
|
||||||
|
|
||||||
return Path.Combine(path, "all.json");
|
var filename = string.Format("all-{0}.json",
|
||||||
|
preferredLanguage ?? string.Empty);
|
||||||
|
|
||||||
|
return Path.Combine(path, filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -730,16 +731,18 @@ namespace MediaBrowser.Providers.Movies
|
|||||||
movie.VoteCount = movieData.vote_count;
|
movie.VoteCount = movieData.vote_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var preferredCountryCode = movie.GetPreferredMetadataCountryCode();
|
||||||
|
|
||||||
//release date and certification are retrieved based on configured country and we fall back on US if not there and to minimun release date if still no match
|
//release date and certification are retrieved based on configured country and we fall back on US if not there and to minimun release date if still no match
|
||||||
if (movieData.releases != null && movieData.releases.countries != null)
|
if (movieData.releases != null && movieData.releases.countries != null)
|
||||||
{
|
{
|
||||||
var ourRelease = movieData.releases.countries.FirstOrDefault(c => c.iso_3166_1.Equals(ConfigurationManager.Configuration.MetadataCountryCode, StringComparison.OrdinalIgnoreCase)) ?? new Country();
|
var ourRelease = movieData.releases.countries.FirstOrDefault(c => c.iso_3166_1.Equals(preferredCountryCode, StringComparison.OrdinalIgnoreCase)) ?? new Country();
|
||||||
var usRelease = movieData.releases.countries.FirstOrDefault(c => c.iso_3166_1.Equals("US", StringComparison.OrdinalIgnoreCase)) ?? new Country();
|
var usRelease = movieData.releases.countries.FirstOrDefault(c => c.iso_3166_1.Equals("US", StringComparison.OrdinalIgnoreCase)) ?? new Country();
|
||||||
var minimunRelease = movieData.releases.countries.OrderBy(c => c.release_date).FirstOrDefault() ?? new Country();
|
var minimunRelease = movieData.releases.countries.OrderBy(c => c.release_date).FirstOrDefault() ?? new Country();
|
||||||
|
|
||||||
if (!movie.LockedFields.Contains(MetadataFields.OfficialRating))
|
if (!movie.LockedFields.Contains(MetadataFields.OfficialRating))
|
||||||
{
|
{
|
||||||
var ratingPrefix = ConfigurationManager.Configuration.MetadataCountryCode.Equals("us", StringComparison.OrdinalIgnoreCase) ? "" : ConfigurationManager.Configuration.MetadataCountryCode + "-";
|
var ratingPrefix = string.Equals(preferredCountryCode, "us", StringComparison.OrdinalIgnoreCase) ? "" : preferredCountryCode + "-";
|
||||||
movie.OfficialRating = !string.IsNullOrEmpty(ourRelease.certification)
|
movie.OfficialRating = !string.IsNullOrEmpty(ourRelease.certification)
|
||||||
? ratingPrefix + ourRelease.certification
|
? ratingPrefix + ourRelease.certification
|
||||||
: !string.IsNullOrEmpty(usRelease.certification)
|
: !string.IsNullOrEmpty(usRelease.certification)
|
||||||
|
@ -219,7 +219,7 @@ namespace MediaBrowser.Providers.Movies
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await UpdateMovie(id, isBoxSet, moviesDataPath, language, cancellationToken).ConfigureAwait(false);
|
await UpdateMovie(id, isBoxSet, language, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -241,19 +241,14 @@ namespace MediaBrowser.Providers.Movies
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id">The id.</param>
|
/// <param name="id">The id.</param>
|
||||||
/// <param name="isBoxSet">if set to <c>true</c> [is box set].</param>
|
/// <param name="isBoxSet">if set to <c>true</c> [is box set].</param>
|
||||||
/// <param name="dataPath">The data path.</param>
|
|
||||||
/// <param name="preferredMetadataLanguage">The preferred metadata language.</param>
|
/// <param name="preferredMetadataLanguage">The preferred metadata language.</param>
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
private Task UpdateMovie(string id, bool isBoxSet, string dataPath, string preferredMetadataLanguage, CancellationToken cancellationToken)
|
private Task UpdateMovie(string id, bool isBoxSet, string preferredMetadataLanguage, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
_logger.Info("Updating movie from tmdb " + id + ", language " + preferredMetadataLanguage);
|
_logger.Info("Updating movie from tmdb " + id + ", language " + preferredMetadataLanguage);
|
||||||
|
|
||||||
var itemDataPath = Path.Combine(dataPath, id);
|
return MovieDbProvider.Current.DownloadMovieInfo(id, isBoxSet, preferredMetadataLanguage, cancellationToken);
|
||||||
|
|
||||||
Directory.CreateDirectory(dataPath);
|
|
||||||
|
|
||||||
return MovieDbProvider.Current.DownloadMovieInfo(id, isBoxSet, itemDataPath, preferredMetadataLanguage, cancellationToken);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class Result
|
class Result
|
||||||
|
@ -326,12 +326,12 @@ namespace MediaBrowser.Providers.Savers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasLanguage = item as IHasLanguage;
|
var hasLanguage = item as IHasPreferredMetadataLanguage;
|
||||||
if (hasLanguage != null)
|
if (hasLanguage != null)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(hasLanguage.Language))
|
if (!string.IsNullOrEmpty(hasLanguage.PreferredMetadataLanguage))
|
||||||
{
|
{
|
||||||
builder.Append("<Language>" + SecurityElement.Escape(hasLanguage.Language) + "</Language>");
|
builder.Append("<Language>" + SecurityElement.Escape(hasLanguage.PreferredMetadataLanguage) + "</Language>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -739,10 +739,12 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|||||||
dto.MediaType = item.MediaType;
|
dto.MediaType = item.MediaType;
|
||||||
dto.LocationType = item.LocationType;
|
dto.LocationType = item.LocationType;
|
||||||
|
|
||||||
var hasLanguage = item as IHasLanguage;
|
var hasLang = item as IHasPreferredMetadataLanguage;
|
||||||
if (hasLanguage != null)
|
|
||||||
|
if (hasLang != null)
|
||||||
{
|
{
|
||||||
dto.Language = hasLanguage.Language;
|
dto.PreferredMetadataCountryCode = hasLang.PreferredMetadataCountryCode;
|
||||||
|
dto.PreferredMetadataLanguage = hasLang.PreferredMetadataLanguage;
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasCriticRating = item as IHasCriticRating;
|
var hasCriticRating = item as IHasCriticRating;
|
||||||
|
@ -62,7 +62,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
|||||||
|
|
||||||
if (program != null)
|
if (program != null)
|
||||||
{
|
{
|
||||||
dto.ProgramInfo = GetProgramInfoDto(program);
|
dto.ProgramInfo = GetProgramInfoDto(program, channel.ChannelInfo.Name);
|
||||||
|
|
||||||
dto.ProgramInfo.TimerId = dto.Id;
|
dto.ProgramInfo.TimerId = dto.Id;
|
||||||
dto.ProgramInfo.SeriesTimerId = dto.SeriesTimerId;
|
dto.ProgramInfo.SeriesTimerId = dto.SeriesTimerId;
|
||||||
@ -260,7 +260,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
|||||||
return dto;
|
return dto;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProgramInfoDto GetProgramInfoDto(LiveTvProgram item, User user = null)
|
public ProgramInfoDto GetProgramInfoDto(LiveTvProgram item, string channelName, User user = null)
|
||||||
{
|
{
|
||||||
var program = item.ProgramInfo;
|
var program = item.ProgramInfo;
|
||||||
|
|
||||||
@ -283,7 +283,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
|||||||
AspectRatio = program.AspectRatio,
|
AspectRatio = program.AspectRatio,
|
||||||
IsRepeat = program.IsRepeat,
|
IsRepeat = program.IsRepeat,
|
||||||
EpisodeTitle = program.EpisodeTitle,
|
EpisodeTitle = program.EpisodeTitle,
|
||||||
ChannelName = program.ChannelName,
|
ChannelName = channelName,
|
||||||
IsMovie = program.IsMovie,
|
IsMovie = program.IsMovie,
|
||||||
IsSeries = program.IsSeries,
|
IsSeries = program.IsSeries,
|
||||||
IsSports = program.IsSports,
|
IsSports = program.IsSports,
|
||||||
|
@ -123,11 +123,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
|||||||
|
|
||||||
public LiveTvChannel GetInternalChannel(string id)
|
public LiveTvChannel GetInternalChannel(string id)
|
||||||
{
|
{
|
||||||
var guid = new Guid(id);
|
return GetInternalChannel(new Guid(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
private LiveTvChannel GetInternalChannel(Guid id)
|
||||||
|
{
|
||||||
LiveTvChannel channel = null;
|
LiveTvChannel channel = null;
|
||||||
|
|
||||||
_channels.TryGetValue(guid, out channel);
|
_channels.TryGetValue(id, out channel);
|
||||||
return channel;
|
return channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,11 +275,24 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private LiveTvChannel GetChannel(LiveTvProgram program)
|
||||||
|
{
|
||||||
|
var programChannelId = program.ProgramInfo.ChannelId;
|
||||||
|
|
||||||
|
var internalProgramChannelId = _tvDtoService.GetInternalChannelId(program.ServiceName, programChannelId);
|
||||||
|
|
||||||
|
return GetInternalChannel(internalProgramChannelId);
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<ProgramInfoDto> GetProgram(string id, CancellationToken cancellationToken, User user = null)
|
public async Task<ProgramInfoDto> GetProgram(string id, CancellationToken cancellationToken, User user = null)
|
||||||
{
|
{
|
||||||
var program = GetInternalProgram(id);
|
var program = GetInternalProgram(id);
|
||||||
|
|
||||||
var dto = _tvDtoService.GetProgramInfoDto(program, user);
|
var channel = GetChannel(program);
|
||||||
|
|
||||||
|
var channelName = channel == null ? null : channel.ChannelInfo.Name;
|
||||||
|
|
||||||
|
var dto = _tvDtoService.GetProgramInfoDto(program, channelName, user);
|
||||||
|
|
||||||
await AddRecordingInfo(new[] { dto }, cancellationToken).ConfigureAwait(false);
|
await AddRecordingInfo(new[] { dto }, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
@ -311,7 +327,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
|||||||
|
|
||||||
var returnArray = programs
|
var returnArray = programs
|
||||||
.OrderBy(i => i.ProgramInfo.StartDate)
|
.OrderBy(i => i.ProgramInfo.StartDate)
|
||||||
.Select(i => _tvDtoService.GetProgramInfoDto(i, user))
|
.Select(i =>
|
||||||
|
{
|
||||||
|
var channel = GetChannel(i);
|
||||||
|
|
||||||
|
var channelName = channel == null ? null : channel.ChannelInfo.Name;
|
||||||
|
|
||||||
|
return _tvDtoService.GetProgramInfoDto(i, channelName, user);
|
||||||
|
})
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false);
|
await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false);
|
||||||
@ -447,7 +470,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
|||||||
var returnArray = entities
|
var returnArray = entities
|
||||||
.Select(i =>
|
.Select(i =>
|
||||||
{
|
{
|
||||||
var channel = string.IsNullOrEmpty(i.RecordingInfo.ChannelId) ? null : GetInternalChannel(_tvDtoService.GetInternalChannelId(service.Name, i.RecordingInfo.ChannelId).ToString("N"));
|
var channel = string.IsNullOrEmpty(i.RecordingInfo.ChannelId) ? null : GetInternalChannel(_tvDtoService.GetInternalChannelId(service.Name, i.RecordingInfo.ChannelId));
|
||||||
return _tvDtoService.GetRecordingInfoDto(i, channel, service, user);
|
return _tvDtoService.GetRecordingInfoDto(i, channel, service, user);
|
||||||
})
|
})
|
||||||
.OrderByDescending(i => i.StartDate)
|
.OrderByDescending(i => i.StartDate)
|
||||||
@ -504,7 +527,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
|||||||
.Select(i =>
|
.Select(i =>
|
||||||
{
|
{
|
||||||
var program = string.IsNullOrEmpty(i.ProgramId) ? null : GetInternalProgram(_tvDtoService.GetInternalProgramId(service.Name, i.ProgramId).ToString("N"));
|
var program = string.IsNullOrEmpty(i.ProgramId) ? null : GetInternalProgram(_tvDtoService.GetInternalProgramId(service.Name, i.ProgramId).ToString("N"));
|
||||||
var channel = string.IsNullOrEmpty(i.ChannelId) ? null : GetInternalChannel(_tvDtoService.GetInternalChannelId(service.Name, i.ChannelId).ToString("N"));
|
var channel = string.IsNullOrEmpty(i.ChannelId) ? null : GetInternalChannel(_tvDtoService.GetInternalChannelId(service.Name, i.ChannelId));
|
||||||
|
|
||||||
return _tvDtoService.GetTimerInfoDto(i, service, program, channel);
|
return _tvDtoService.GetTimerInfoDto(i, service, program, channel);
|
||||||
})
|
})
|
||||||
@ -603,7 +626,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
|||||||
if (!string.IsNullOrEmpty(i.ChannelId))
|
if (!string.IsNullOrEmpty(i.ChannelId))
|
||||||
{
|
{
|
||||||
var internalChannelId = _tvDtoService.GetInternalChannelId(service.Name, i.ChannelId);
|
var internalChannelId = _tvDtoService.GetInternalChannelId(service.Name, i.ChannelId);
|
||||||
var channel = GetInternalChannel(internalChannelId.ToString("N"));
|
var channel = GetInternalChannel(internalChannelId);
|
||||||
channelName = channel == null ? null : channel.ChannelInfo.Name;
|
channelName = channel == null ? null : channel.ChannelInfo.Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common.Internal</id>
|
<id>MediaBrowser.Common.Internal</id>
|
||||||
<version>3.0.290</version>
|
<version>3.0.292</version>
|
||||||
<title>MediaBrowser.Common.Internal</title>
|
<title>MediaBrowser.Common.Internal</title>
|
||||||
<authors>Luke</authors>
|
<authors>Luke</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
@ -12,7 +12,7 @@
|
|||||||
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
|
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
|
||||||
<copyright>Copyright © Media Browser 2013</copyright>
|
<copyright>Copyright © Media Browser 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.290" />
|
<dependency id="MediaBrowser.Common" version="3.0.292" />
|
||||||
<dependency id="NLog" version="2.1.0" />
|
<dependency id="NLog" version="2.1.0" />
|
||||||
<dependency id="SimpleInjector" version="2.4.0" />
|
<dependency id="SimpleInjector" version="2.4.0" />
|
||||||
<dependency id="sharpcompress" version="0.10.2" />
|
<dependency id="sharpcompress" version="0.10.2" />
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common</id>
|
<id>MediaBrowser.Common</id>
|
||||||
<version>3.0.290</version>
|
<version>3.0.292</version>
|
||||||
<title>MediaBrowser.Common</title>
|
<title>MediaBrowser.Common</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Server.Core</id>
|
<id>MediaBrowser.Server.Core</id>
|
||||||
<version>3.0.290</version>
|
<version>3.0.292</version>
|
||||||
<title>Media Browser.Server.Core</title>
|
<title>Media Browser.Server.Core</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
@ -12,7 +12,7 @@
|
|||||||
<description>Contains core components required to build plugins for Media Browser Server.</description>
|
<description>Contains core components required to build plugins for Media Browser Server.</description>
|
||||||
<copyright>Copyright © Media Browser 2013</copyright>
|
<copyright>Copyright © Media Browser 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.290" />
|
<dependency id="MediaBrowser.Common" version="3.0.292" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user