diff --git a/MediaBrowser.Controller/Entities/Audio/AudioPodcast.cs b/MediaBrowser.Controller/Entities/Audio/AudioPodcast.cs index d2b4569baf..1b717b900a 100644 --- a/MediaBrowser.Controller/Entities/Audio/AudioPodcast.cs +++ b/MediaBrowser.Controller/Entities/Audio/AudioPodcast.cs @@ -1,8 +1,9 @@ -using MediaBrowser.Model.Serialization; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Controller.Entities.Audio { - public class AudioPodcast : Audio + public class AudioPodcast : Audio, IHasLookupInfo { [IgnoreDataMember] public override bool SupportsPositionTicksResume @@ -13,6 +14,15 @@ namespace MediaBrowser.Controller.Entities.Audio } } + [IgnoreDataMember] + public override bool SupportsPlayedStatus + { + get + { + return true; + } + } + public override double? GetDefaultPrimaryImageAspectRatio() { return 1; diff --git a/MediaBrowser.Controller/Entities/AudioBook.cs b/MediaBrowser.Controller/Entities/AudioBook.cs index 1bdcfb881e..78fb102536 100644 --- a/MediaBrowser.Controller/Entities/AudioBook.cs +++ b/MediaBrowser.Controller/Entities/AudioBook.cs @@ -1,11 +1,12 @@ using System; +using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Entities; namespace MediaBrowser.Controller.Entities { - public class AudioBook : Audio.Audio, IHasSeries + public class AudioBook : Audio.Audio, IHasSeries, IHasLookupInfo { [IgnoreDataMember] public override bool SupportsPositionTicksResume diff --git a/MediaBrowser.Controller/Providers/IMetadataService.cs b/MediaBrowser.Controller/Providers/IMetadataService.cs index 2d4873f7ed..7b7bf166b5 100644 --- a/MediaBrowser.Controller/Providers/IMetadataService.cs +++ b/MediaBrowser.Controller/Providers/IMetadataService.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using System; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using System.Threading; using System.Threading.Tasks; @@ -13,6 +14,7 @@ namespace MediaBrowser.Controller.Providers /// The item. /// true if this instance can refresh the specified item; otherwise, false. bool CanRefresh(IHasMetadata item); + bool CanRefreshPrimary(Type type); /// /// Refreshes the metadata. diff --git a/MediaBrowser.Providers/Books/GoogleBooksProvider.cs b/MediaBrowser.Providers/Books/GoogleBooksProvider.cs new file mode 100644 index 0000000000..7330b8c43e --- /dev/null +++ b/MediaBrowser.Providers/Books/GoogleBooksProvider.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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.Providers; + +namespace MediaBrowser.Providers.Books +{ + public class GoogleBooksProvider : IRemoteMetadataProvider + { + public string Name => "Google Books"; + private readonly IHttpClient _httpClient; + + public GoogleBooksProvider(IHttpClient httpClient) + { + _httpClient = httpClient; + } + + public Task GetImageResponse(string url, CancellationToken cancellationToken) + { + return _httpClient.GetResponse(new HttpRequestOptions + { + CancellationToken = cancellationToken, + Url = url, + BufferContent = false + }); + } + + public async Task> GetMetadata(SongInfo info, CancellationToken cancellationToken) + { + return new MetadataResult(); + } + + public async Task> GetSearchResults(SongInfo searchInfo, CancellationToken cancellationToken) + { + return new List(); + } + } +} diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 23c6b3efd6..c37e05d957 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -453,6 +453,11 @@ namespace MediaBrowser.Providers.Manager return item is TItemType; } + public bool CanRefreshPrimary(Type type) + { + return type == typeof(TItemType); + } + protected virtual async Task RefreshWithProviders(MetadataResult metadata, TIdType id, MetadataRefreshOptions options, diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index 9f46d41dfe..28367662bc 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -118,7 +118,29 @@ namespace MediaBrowser.Providers.Manager public Task RefreshSingleItem(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken) { - var service = _metadataServices.FirstOrDefault(i => i.CanRefresh(item)); + IMetadataService service = null; + var type = item.GetType(); + + foreach (var current in _metadataServices) + { + if (current.CanRefreshPrimary(type)) + { + service = current; + break; + } + } + + if (service == null) + { + foreach (var current in _metadataServices) + { + if (current.CanRefresh(item)) + { + service = current; + break; + } + } + } if (service != null) { @@ -452,6 +474,8 @@ namespace MediaBrowser.Providers.Manager GetPluginSummary(), GetPluginSummary(), GetPluginSummary