aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Genres
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-01-28 13:37:01 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-01-28 13:37:01 -0500
commitad82c9f5e95e2b1f94ba7adda047dbfbc38004ea (patch)
tree52ab08873cb353faff048edecf8d97d49114b4db /MediaBrowser.Providers/Genres
parentd748967c5de99ba20a788c2448b066fc3fc4fecb (diff)
New provider system. Only for people right now
Diffstat (limited to 'MediaBrowser.Providers/Genres')
-rw-r--r--MediaBrowser.Providers/Genres/GenreImageProvider.cs150
-rw-r--r--MediaBrowser.Providers/Genres/GenreMetadataService.cs42
2 files changed, 192 insertions, 0 deletions
diff --git a/MediaBrowser.Providers/Genres/GenreImageProvider.cs b/MediaBrowser.Providers/Genres/GenreImageProvider.cs
new file mode 100644
index 000000000..189cc8cde
--- /dev/null
+++ b/MediaBrowser.Providers/Genres/GenreImageProvider.cs
@@ -0,0 +1,150 @@
+using MediaBrowser.Common.IO;
+using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
+using MediaBrowser.Providers.ImagesByName;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Providers.Genres
+{
+ public class GenreImageProvider : IRemoteImageProvider
+ {
+ private readonly IServerConfigurationManager _config;
+ private readonly IHttpClient _httpClient;
+ private readonly IFileSystem _fileSystem;
+
+ private readonly SemaphoreSlim _listResourcePool = new SemaphoreSlim(1, 1);
+
+ public static SemaphoreSlim ImageDownloadResourcePool = new SemaphoreSlim(5, 5);
+
+ public GenreImageProvider(IServerConfigurationManager config, IHttpClient httpClient, IFileSystem fileSystem)
+ {
+ _config = config;
+ _httpClient = httpClient;
+ _fileSystem = fileSystem;
+ }
+
+ public string Name
+ {
+ get { return ProviderName; }
+ }
+
+ public static string ProviderName
+ {
+ get { return "Media Browser"; }
+ }
+
+ public bool Supports(IHasImages item)
+ {
+ return item is Genre;
+ }
+
+ public IEnumerable<ImageType> GetSupportedImages(IHasImages item)
+ {
+ return new List<ImageType>
+ {
+ ImageType.Primary,
+ ImageType.Thumb
+ };
+ }
+
+ public Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, ImageType imageType, CancellationToken cancellationToken)
+ {
+ return GetImages(item, imageType == ImageType.Primary, imageType == ImageType.Thumb, cancellationToken);
+ }
+
+ public Task<IEnumerable<RemoteImageInfo>> GetAllImages(IHasImages item, CancellationToken cancellationToken)
+ {
+ return GetImages(item, true, true, cancellationToken);
+ }
+
+ private async Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, bool posters, bool thumbs, CancellationToken cancellationToken)
+ {
+ var list = new List<RemoteImageInfo>();
+
+ if (posters)
+ {
+ var posterPath = Path.Combine(_config.ApplicationPaths.CachePath, "imagesbyname", "remotegenreposters.txt");
+
+ await EnsurePosterList(posterPath, cancellationToken).ConfigureAwait(false);
+
+ list.Add(GetImage(item, posterPath, ImageType.Primary, "folder"));
+ }
+
+ cancellationToken.ThrowIfCancellationRequested();
+
+ if (thumbs)
+ {
+ var thumbsPath = Path.Combine(_config.ApplicationPaths.CachePath, "imagesbyname", "remotegenrethumbs.txt");
+
+ await EnsureThumbsList(thumbsPath, cancellationToken).ConfigureAwait(false);
+
+ list.Add(GetImage(item, thumbsPath, ImageType.Thumb, "thumb"));
+ }
+
+ return list.Where(i => i != null);
+ }
+
+ private RemoteImageInfo GetImage(IHasImages item, string filename, ImageType type, string remoteFilename)
+ {
+ var list = ImageUtils.GetAvailableImages(filename);
+
+ var match = ImageUtils.FindMatch(item, list);
+
+ if (!string.IsNullOrEmpty(match))
+ {
+ var url = GetUrl(match, remoteFilename);
+
+ return new RemoteImageInfo
+ {
+ ProviderName = Name,
+ Type = type,
+ Url = url
+ };
+ }
+
+ return null;
+ }
+
+ private string GetUrl(string image, string filename)
+ {
+ return string.Format("https://raw.github.com/MediaBrowser/MediaBrowser.Resources/master/images/imagesbyname/genres/{0}/{1}.jpg", image, filename);
+ }
+
+ private Task EnsureThumbsList(string file, CancellationToken cancellationToken)
+ {
+ const string url = "https://raw.github.com/MediaBrowser/MediaBrowser.Resources/master/images/imagesbyname/genrethumbs.txt";
+
+ return ImageUtils.EnsureList(url, file, _httpClient, _fileSystem, _listResourcePool, cancellationToken);
+ }
+
+ private Task EnsurePosterList(string file, CancellationToken cancellationToken)
+ {
+ const string url = "https://raw.github.com/MediaBrowser/MediaBrowser.Resources/master/images/imagesbyname/genreposters.txt";
+
+ return ImageUtils.EnsureList(url, file, _httpClient, _fileSystem, _listResourcePool, cancellationToken);
+ }
+
+ public int Order
+ {
+ get { return 0; }
+ }
+
+ public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
+ {
+ return _httpClient.GetResponse(new HttpRequestOptions
+ {
+ CancellationToken = cancellationToken,
+ Url = url,
+ ResourcePool = ImageDownloadResourcePool
+ });
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/Genres/GenreMetadataService.cs b/MediaBrowser.Providers/Genres/GenreMetadataService.cs
new file mode 100644
index 000000000..7a8ffa5d4
--- /dev/null
+++ b/MediaBrowser.Providers/Genres/GenreMetadataService.cs
@@ -0,0 +1,42 @@
+using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Logging;
+using MediaBrowser.Providers.Manager;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Providers.Genres
+{
+ public class GenreMetadataService : MetadataService<Genre>
+ {
+ private readonly ILibraryManager _libraryManager;
+
+ public GenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, ILibraryManager libraryManager)
+ : base(serverConfigurationManager, logger, providerManager)
+ {
+ _libraryManager = libraryManager;
+ }
+
+ /// <summary>
+ /// Merges the specified source.
+ /// </summary>
+ /// <param name="source">The source.</param>
+ /// <param name="target">The target.</param>
+ /// <param name="lockedFields">The locked fields.</param>
+ /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
+ /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
+ protected override void MergeData(Genre source, Genre target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ {
+ ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+ }
+
+ protected override Task SaveItem(Genre item, ItemUpdateType reason, CancellationToken cancellationToken)
+ {
+ return _libraryManager.UpdateItem(item, reason, cancellationToken);
+ }
+ }
+}