aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers
diff options
context:
space:
mode:
authordkanada <dkanada@users.noreply.github.com>2020-01-08 01:21:09 +0900
committerdkanada <dkanada@users.noreply.github.com>2020-01-08 01:21:09 +0900
commitaca31457c06ea13042accd60e27ab61208a51577 (patch)
treeb734310d099f9b896ccce0b200ab96a3786d168b /MediaBrowser.Providers
parentdee247453e7b5cab1badb6a844af690cdf80aacd (diff)
parent0b592376d59d10d14dbdd248c24f7ec6397c3508 (diff)
merge branch master into media-attachments
Diffstat (limited to 'MediaBrowser.Providers')
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj9
-rw-r--r--MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs6
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs3
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs5
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs11
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbUtils.cs1
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Search/MovieResult.cs118
-rw-r--r--MediaBrowser.Providers/Tmdb/TV/TmdbSeasonImageProvider.cs146
-rw-r--r--MediaBrowser.Providers/Tmdb/TV/TmdbSeasonProvider.cs3
9 files changed, 227 insertions, 75 deletions
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index ae2102806..8d373be28 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -11,8 +11,8 @@
</ItemGroup>
<ItemGroup>
- <PackageReference Include="Microsoft.Extensions.Configuration" Version="3.0.0" />
- <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.0.0" />
+ <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.1" />
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.0.1" />
<PackageReference Include="OptimizedPriorityQueue" Version="4.2.0" />
<PackageReference Include="PlaylistsNET" Version="1.0.4" />
<PackageReference Include="TvDbSharper" Version="2.0.0" />
@@ -24,9 +24,4 @@
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
- <PropertyGroup>
- <!-- We need at least C# 7.1 -->
- <LangVersion>latest</LangVersion>
- </PropertyGroup>
-
</Project>
diff --git a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs
index e0b23108f..95b915b3d 100644
--- a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs
+++ b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs
@@ -62,7 +62,11 @@ namespace MediaBrowser.Providers.MediaInfo
{
var protocol = item.PathProtocol ?? MediaProtocol.File;
- var inputPath = MediaEncoderHelpers.GetInputArgument(_fileSystem, item.Path, null, item.GetPlayableStreamFileNames(_mediaEncoder));
+ var inputPath = MediaEncoderHelpers.GetInputArgument(
+ _fileSystem,
+ item.Path,
+ null,
+ item.GetPlayableStreamFileNames());
var mediaStreams =
item.GetMediaStreams();
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs
index eaebc13e3..fc7f12b1a 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs
@@ -57,7 +57,8 @@ namespace MediaBrowser.Providers.TV.TheTVDB
{
IndexNumber = episode.IndexNumber.Value,
ParentIndexNumber = episode.ParentIndexNumber.Value,
- SeriesProviderIds = series.ProviderIds
+ SeriesProviderIds = series.ProviderIds,
+ SeriesDisplayOrder = series.DisplayOrder
};
string episodeTvdbId = await _tvDbClientManager
.GetEpisodeTvdbId(episodeInfo, language, cancellationToken).ConfigureAwait(false);
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs
index e5287048d..4269d3420 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs
@@ -35,9 +35,8 @@ namespace MediaBrowser.Providers.TV.TheTVDB
{
var list = new List<RemoteSearchResult>();
- // The search query must either provide an episode number or date
- if (!searchInfo.IndexNumber.HasValue
- || !searchInfo.PremiereDate.HasValue
+ // Either an episode number or date must be provided; and the dictionary of provider ids must be valid
+ if ((searchInfo.IndexNumber == null && searchInfo.PremiereDate == null)
|| !TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds))
{
return list;
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
index 10ed4f073..72ceadaf1 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
@@ -170,11 +170,16 @@ namespace MediaBrowser.Providers.TV.TheTVDB
return result?.Data.First().Id.ToString();
}
+ /// <summary>
+ /// Check whether a dictionary of provider IDs includes an entry for a valid TV metadata provider.
+ /// </summary>
+ /// <param name="seriesProviderIds">The dictionary to check.</param>
+ /// <returns>True, if the dictionary contains a valid TV provider ID, otherwise false.</returns>
internal static bool IsValidSeries(Dictionary<string, string> seriesProviderIds)
{
- return seriesProviderIds.TryGetValue(MetadataProviders.Tvdb.ToString(), out _) ||
- seriesProviderIds.TryGetValue(MetadataProviders.Imdb.ToString(), out _) ||
- seriesProviderIds.TryGetValue(MetadataProviders.Zap2It.ToString(), out _);
+ return seriesProviderIds.ContainsKey(MetadataProviders.Tvdb.ToString()) ||
+ seriesProviderIds.ContainsKey(MetadataProviders.Imdb.ToString()) ||
+ seriesProviderIds.ContainsKey(MetadataProviders.Zap2It.ToString());
}
/// <summary>
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbUtils.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbUtils.cs
index 112cbf800..dd5ebf270 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbUtils.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbUtils.cs
@@ -1,5 +1,4 @@
using System;
-using System.ComponentModel;
using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.TV.TheTVDB
{
diff --git a/MediaBrowser.Providers/Tmdb/Models/Search/MovieResult.cs b/MediaBrowser.Providers/Tmdb/Models/Search/MovieResult.cs
index 25a211fa8..245162728 100644
--- a/MediaBrowser.Providers/Tmdb/Models/Search/MovieResult.cs
+++ b/MediaBrowser.Providers/Tmdb/Models/Search/MovieResult.cs
@@ -2,64 +2,64 @@ namespace MediaBrowser.Providers.Tmdb.Models.Search
{
public class MovieResult
{
- /// <summary>
- /// Gets or sets a value indicating whether this <see cref="TmdbMovieSearchResult" /> is adult.
- /// </summary>
- /// <value><c>true</c> if adult; otherwise, <c>false</c>.</value>
- public bool Adult { get; set; }
- /// <summary>
- /// Gets or sets the backdrop_path.
- /// </summary>
- /// <value>The backdrop_path.</value>
- public string Backdrop_Path { get; set; }
- /// <summary>
- /// Gets or sets the id.
- /// </summary>
- /// <value>The id.</value>
- public int Id { get; set; }
- /// <summary>
- /// Gets or sets the original_title.
- /// </summary>
- /// <value>The original_title.</value>
- public string Original_Title { get; set; }
- /// <summary>
- /// Gets or sets the original_name.
- /// </summary>
- /// <value>The original_name.</value>
- public string Original_Name { get; set; }
- /// <summary>
- /// Gets or sets the release_date.
- /// </summary>
- /// <value>The release_date.</value>
- public string Release_Date { get; set; }
- /// <summary>
- /// Gets or sets the poster_path.
- /// </summary>
- /// <value>The poster_path.</value>
- public string Poster_Path { get; set; }
- /// <summary>
- /// Gets or sets the popularity.
- /// </summary>
- /// <value>The popularity.</value>
- public double Popularity { get; set; }
- /// <summary>
- /// Gets or sets the title.
- /// </summary>
- /// <value>The title.</value>
- public string Title { get; set; }
- /// <summary>
- /// Gets or sets the vote_average.
- /// </summary>
- /// <value>The vote_average.</value>
- public double Vote_Average { get; set; }
- /// <summary>
- /// For collection search results
- /// </summary>
- public string Name { get; set; }
- /// <summary>
- /// Gets or sets the vote_count.
- /// </summary>
- /// <value>The vote_count.</value>
- public int Vote_Count { get; set; }
+ /// <summary>
+ /// Gets or sets a value indicating whether this <see cref="MovieResult" /> is adult.
+ /// </summary>
+ /// <value><c>true</c> if adult; otherwise, <c>false</c>.</value>
+ public bool Adult { get; set; }
+ /// <summary>
+ /// Gets or sets the backdrop_path.
+ /// </summary>
+ /// <value>The backdrop_path.</value>
+ public string Backdrop_Path { get; set; }
+ /// <summary>
+ /// Gets or sets the id.
+ /// </summary>
+ /// <value>The id.</value>
+ public int Id { get; set; }
+ /// <summary>
+ /// Gets or sets the original_title.
+ /// </summary>
+ /// <value>The original_title.</value>
+ public string Original_Title { get; set; }
+ /// <summary>
+ /// Gets or sets the original_name.
+ /// </summary>
+ /// <value>The original_name.</value>
+ public string Original_Name { get; set; }
+ /// <summary>
+ /// Gets or sets the release_date.
+ /// </summary>
+ /// <value>The release_date.</value>
+ public string Release_Date { get; set; }
+ /// <summary>
+ /// Gets or sets the poster_path.
+ /// </summary>
+ /// <value>The poster_path.</value>
+ public string Poster_Path { get; set; }
+ /// <summary>
+ /// Gets or sets the popularity.
+ /// </summary>
+ /// <value>The popularity.</value>
+ public double Popularity { get; set; }
+ /// <summary>
+ /// Gets or sets the title.
+ /// </summary>
+ /// <value>The title.</value>
+ public string Title { get; set; }
+ /// <summary>
+ /// Gets or sets the vote_average.
+ /// </summary>
+ /// <value>The vote_average.</value>
+ public double Vote_Average { get; set; }
+ /// <summary>
+ /// For collection search results
+ /// </summary>
+ public string Name { get; set; }
+ /// <summary>
+ /// Gets or sets the vote_count.
+ /// </summary>
+ /// <value>The vote_count.</value>
+ public int Vote_Count { get; set; }
}
}
diff --git a/MediaBrowser.Providers/Tmdb/TV/TmdbSeasonImageProvider.cs b/MediaBrowser.Providers/Tmdb/TV/TmdbSeasonImageProvider.cs
new file mode 100644
index 000000000..24cc8c73b
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/TV/TmdbSeasonImageProvider.cs
@@ -0,0 +1,146 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.TV;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Globalization;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Providers;
+using MediaBrowser.Model.Serialization;
+using MediaBrowser.Providers.Tmdb.Models.General;
+using MediaBrowser.Providers.Tmdb.Movies;
+
+namespace MediaBrowser.Providers.Tmdb.TV
+{
+ public class TmdbSeasonImageProvider : IRemoteImageProvider, IHasOrder
+ {
+ private readonly IJsonSerializer _jsonSerializer;
+ private readonly IHttpClient _httpClient;
+
+ public TmdbSeasonImageProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient)
+ {
+ _jsonSerializer = jsonSerializer;
+ _httpClient = httpClient;
+ }
+
+ public int Order => 1;
+
+ public string Name => ProviderName;
+
+ public static string ProviderName => TmdbUtils.ProviderName;
+
+ public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
+ {
+ return _httpClient.GetResponse(new HttpRequestOptions
+ {
+ CancellationToken = cancellationToken,
+ Url = url
+ });
+ }
+
+ public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken)
+ {
+ var season = (Season)item;
+ var series = season.Series;
+
+ var seriesId = series?.GetProviderId(MetadataProviders.Tmdb);
+
+ if (string.IsNullOrEmpty(seriesId))
+ {
+ return Enumerable.Empty<RemoteImageInfo>();
+ }
+
+ var seasonNumber = season.IndexNumber;
+
+ if (!seasonNumber.HasValue)
+ {
+ return Enumerable.Empty<RemoteImageInfo>();
+ }
+
+ var language = item.GetPreferredMetadataLanguage();
+
+ var results = await FetchImages(season, seriesId, language, cancellationToken).ConfigureAwait(false);
+
+ var tmdbSettings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+
+ var tmdbImageUrl = tmdbSettings.images.GetImageUrl("original");
+
+ var list = results.Select(i => new RemoteImageInfo
+ {
+ Url = tmdbImageUrl + i.File_Path,
+ CommunityRating = i.Vote_Average,
+ VoteCount = i.Vote_Count,
+ Width = i.Width,
+ Height = i.Height,
+ Language = TmdbMovieProvider.AdjustImageLanguage(i.Iso_639_1, language),
+ ProviderName = Name,
+ Type = ImageType.Primary,
+ RatingType = RatingType.Score
+ });
+
+ var isLanguageEn = string.Equals(language, "en", StringComparison.OrdinalIgnoreCase);
+
+ return list.OrderByDescending(i =>
+ {
+ if (string.Equals(language, i.Language, StringComparison.OrdinalIgnoreCase))
+ {
+ return 3;
+ }
+
+ if (!isLanguageEn)
+ {
+ if (string.Equals("en", i.Language, StringComparison.OrdinalIgnoreCase))
+ {
+ return 2;
+ }
+ }
+
+ if (string.IsNullOrEmpty(i.Language))
+ {
+ return isLanguageEn ? 3 : 2;
+ }
+
+ return 0;
+ })
+ .ThenByDescending(i => i.CommunityRating ?? 0)
+ .ThenByDescending(i => i.VoteCount ?? 0);
+ }
+
+ private async Task<List<Poster>> FetchImages(Season item, string tmdbId, string language, CancellationToken cancellationToken)
+ {
+ await TmdbSeasonProvider.Current.EnsureSeasonInfo(tmdbId, item.IndexNumber.GetValueOrDefault(), language, cancellationToken).ConfigureAwait(false);
+
+ var path = TmdbSeriesProvider.Current.GetDataFilePath(tmdbId, language);
+
+ if (!string.IsNullOrEmpty(path))
+ {
+ if (File.Exists(path))
+ {
+ return _jsonSerializer.DeserializeFromFile<Models.TV.SeasonResult>(path).Images.Posters;
+ }
+ }
+
+ return null;
+ }
+
+ public IEnumerable<ImageType> GetSupportedImages(BaseItem item)
+ {
+ return new List<ImageType>
+ {
+ ImageType.Primary
+ };
+ }
+
+ public bool Supports(BaseItem item)
+ {
+ return item is Season;
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/TV/TmdbSeasonProvider.cs b/MediaBrowser.Providers/Tmdb/TV/TmdbSeasonProvider.cs
index 2f2ac58e8..fc0cde8b3 100644
--- a/MediaBrowser.Providers/Tmdb/TV/TmdbSeasonProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/TV/TmdbSeasonProvider.cs
@@ -32,6 +32,8 @@ namespace MediaBrowser.Providers.Tmdb.TV
private readonly ILocalizationManager _localization;
private readonly ILogger _logger;
+ internal static TmdbSeasonProvider Current { get; private set; }
+
public TmdbSeasonProvider(IHttpClient httpClient, IServerConfigurationManager configurationManager, IFileSystem fileSystem, ILocalizationManager localization, IJsonSerializer jsonSerializer, ILoggerFactory loggerFactory)
{
_httpClient = httpClient;
@@ -40,6 +42,7 @@ namespace MediaBrowser.Providers.Tmdb.TV
_localization = localization;
_jsonSerializer = jsonSerializer;
_logger = loggerFactory.CreateLogger(GetType().Name);
+ Current = this;
}
public async Task<MetadataResult<Season>> GetMetadata(SeasonInfo info, CancellationToken cancellationToken)