diff options
Diffstat (limited to 'MediaBrowser.Providers/Manager/ProviderManager.cs')
| -rw-r--r-- | MediaBrowser.Providers/Manager/ProviderManager.cs | 302 |
1 files changed, 167 insertions, 135 deletions
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index cdef42771..4c9312b83 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -25,6 +25,7 @@ using MediaBrowser.Model.Events; using MediaBrowser.Model.Serialization; using Priority_Queue; using MediaBrowser.Model.Extensions; +using MediaBrowser.Controller.Subtitles; namespace MediaBrowser.Providers.Manager { @@ -67,22 +68,18 @@ namespace MediaBrowser.Providers.Manager private IExternalId[] _externalIds; private readonly Func<ILibraryManager> _libraryManagerFactory; - private readonly IMemoryStreamFactory _memoryStreamProvider; private CancellationTokenSource _disposeCancellationTokenSource = new CancellationTokenSource(); public event EventHandler<GenericEventArgs<BaseItem>> RefreshStarted; public event EventHandler<GenericEventArgs<BaseItem>> RefreshCompleted; public event EventHandler<GenericEventArgs<Tuple<BaseItem, double>>> RefreshProgress; + private ISubtitleManager _subtitleManager; + /// <summary> /// Initializes a new instance of the <see cref="ProviderManager" /> class. /// </summary> - /// <param name="httpClient">The HTTP client.</param> - /// <param name="configurationManager">The configuration manager.</param> - /// <param name="libraryMonitor">The directory watchers.</param> - /// <param name="logManager">The log manager.</param> - /// <param name="fileSystem">The file system.</param> - public ProviderManager(IHttpClient httpClient, IServerConfigurationManager configurationManager, ILibraryMonitor libraryMonitor, ILogManager logManager, IFileSystem fileSystem, IServerApplicationPaths appPaths, Func<ILibraryManager> libraryManagerFactory, IJsonSerializer json, IMemoryStreamFactory memoryStreamProvider) + public ProviderManager(IHttpClient httpClient, ISubtitleManager subtitleManager, IServerConfigurationManager configurationManager, ILibraryMonitor libraryMonitor, ILogManager logManager, IFileSystem fileSystem, IServerApplicationPaths appPaths, Func<ILibraryManager> libraryManagerFactory, IJsonSerializer json) { _logger = logManager.GetLogger("ProviderManager"); _httpClient = httpClient; @@ -92,7 +89,7 @@ namespace MediaBrowser.Providers.Manager _appPaths = appPaths; _libraryManagerFactory = libraryManagerFactory; _json = json; - _memoryStreamProvider = memoryStreamProvider; + _subtitleManager = subtitleManager; } /// <summary> @@ -116,7 +113,7 @@ namespace MediaBrowser.Providers.Manager }).ToArray(); } - public Task<ItemUpdateType> RefreshSingleItem(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken) + public Task<ItemUpdateType> RefreshSingleItem(BaseItem item, MetadataRefreshOptions options, CancellationToken cancellationToken) { IMetadataService service = null; var type = item.GetType(); @@ -151,7 +148,7 @@ namespace MediaBrowser.Providers.Manager return Task.FromResult(ItemUpdateType.None); } - public async Task SaveImage(IHasMetadata item, string url, ImageType type, int? imageIndex, CancellationToken cancellationToken) + public async Task SaveImage(BaseItem item, string url, ImageType type, int? imageIndex, CancellationToken cancellationToken) { using (var response = await _httpClient.GetResponse(new HttpRequestOptions { @@ -161,16 +158,26 @@ namespace MediaBrowser.Providers.Manager }).ConfigureAwait(false)) { + // Workaround for tvheadend channel icons + // TODO: Isolate this hack into the tvh plugin + if (string.IsNullOrEmpty(response.ContentType)) + { + if (url.IndexOf("/imagecache/", StringComparison.OrdinalIgnoreCase) != -1) + { + response.ContentType = "image/png"; + } + } + await SaveImage(item, response.Content, response.ContentType, type, imageIndex, cancellationToken).ConfigureAwait(false); } } - public Task SaveImage(IHasMetadata item, Stream source, string mimeType, ImageType type, int? imageIndex, CancellationToken cancellationToken) + public Task SaveImage(BaseItem item, Stream source, string mimeType, ImageType type, int? imageIndex, CancellationToken cancellationToken) { - return new ImageSaver(ConfigurationManager, _libraryMonitor, _fileSystem, _logger, _memoryStreamProvider).SaveImage(item, source, mimeType, type, imageIndex, cancellationToken); + return new ImageSaver(ConfigurationManager, _libraryMonitor, _fileSystem, _logger).SaveImage(item, source, mimeType, type, imageIndex, cancellationToken); } - public Task SaveImage(IHasMetadata item, string source, string mimeType, ImageType type, int? imageIndex, bool? saveLocallyWithMedia, CancellationToken cancellationToken) + public Task SaveImage(BaseItem item, string source, string mimeType, ImageType type, int? imageIndex, bool? saveLocallyWithMedia, CancellationToken cancellationToken) { if (string.IsNullOrWhiteSpace(source)) { @@ -179,10 +186,10 @@ namespace MediaBrowser.Providers.Manager var fileStream = _fileSystem.GetFileStream(source, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.ReadWrite, true); - return new ImageSaver(ConfigurationManager, _libraryMonitor, _fileSystem, _logger, _memoryStreamProvider).SaveImage(item, fileStream, mimeType, type, imageIndex, saveLocallyWithMedia, cancellationToken); + return new ImageSaver(ConfigurationManager, _libraryMonitor, _fileSystem, _logger).SaveImage(item, fileStream, mimeType, type, imageIndex, saveLocallyWithMedia, cancellationToken); } - public async Task<IEnumerable<RemoteImageInfo>> GetAvailableRemoteImages(IHasMetadata item, RemoteImageQuery query, CancellationToken cancellationToken) + public async Task<IEnumerable<RemoteImageInfo>> GetAvailableRemoteImages(BaseItem item, RemoteImageQuery query, CancellationToken cancellationToken) { var providers = GetRemoteImageProviders(item, query.IncludeDisabledProviders); @@ -217,7 +224,7 @@ namespace MediaBrowser.Providers.Manager /// <param name="preferredLanguages">The preferred languages.</param> /// <param name="type">The type.</param> /// <returns>Task{IEnumerable{RemoteImageInfo}}.</returns> - private async Task<IEnumerable<RemoteImageInfo>> GetImages(IHasMetadata item, CancellationToken cancellationToken, IRemoteImageProvider provider, List<string> preferredLanguages, ImageType? type = null) + private async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken, IRemoteImageProvider provider, List<string> preferredLanguages, ImageType? type = null) { try { @@ -253,7 +260,7 @@ namespace MediaBrowser.Providers.Manager /// </summary> /// <param name="item">The item.</param> /// <returns>IEnumerable{IImageProvider}.</returns> - public IEnumerable<ImageProviderInfo> GetRemoteImageProviderInfo(IHasMetadata item) + public IEnumerable<ImageProviderInfo> GetRemoteImageProviderInfo(BaseItem item) { return GetRemoteImageProviders(item, true).Select(i => new ImageProviderInfo { @@ -262,64 +269,70 @@ namespace MediaBrowser.Providers.Manager }); } - public IEnumerable<IImageProvider> GetImageProviders(IHasMetadata item, ImageRefreshOptions refreshOptions) + public IEnumerable<IImageProvider> GetImageProviders(BaseItem item, ImageRefreshOptions refreshOptions) { - return GetImageProviders(item, GetMetadataOptions(item), refreshOptions, false); + return GetImageProviders(item, _libraryManagerFactory().GetLibraryOptions(item), GetMetadataOptions(item), refreshOptions, false); } - private IEnumerable<IImageProvider> GetImageProviders(IHasMetadata item, MetadataOptions options, ImageRefreshOptions refreshOptions, bool includeDisabled) + private IEnumerable<IImageProvider> GetImageProviders(BaseItem item, LibraryOptions libraryOptions, MetadataOptions options, ImageRefreshOptions refreshOptions, bool includeDisabled) { // Avoid implicitly captured closure var currentOptions = options; - return ImageProviders.Where(i => CanRefresh(i, item, options, refreshOptions, includeDisabled)) - .OrderBy(i => - { - // See if there's a user-defined order - if (!(i is ILocalImageProvider)) - { - var index = Array.IndexOf(currentOptions.ImageFetcherOrder, i.Name); + var typeOptions = libraryOptions.GetTypeOptions(item.GetType().Name); + var typeFetcherOrder = typeOptions == null ? null : typeOptions.ImageFetcherOrder; - if (index != -1) + return ImageProviders.Where(i => CanRefresh(i, item, libraryOptions, options, refreshOptions, includeDisabled)) + .OrderBy(i => + { + // See if there's a user-defined order + if (!(i is ILocalImageProvider)) { - return index; + var fetcherOrder = typeFetcherOrder ?? currentOptions.ImageFetcherOrder; + + var index = Array.IndexOf(fetcherOrder, i.Name); + + if (index != -1) + { + return index; + } } - } - // Not configured. Just return some high number to put it at the end. - return 100; - }) + // Not configured. Just return some high number to put it at the end. + return 100; + }) .ThenBy(GetOrder); } - public IEnumerable<IMetadataProvider<T>> GetMetadataProviders<T>(IHasMetadata item) - where T : IHasMetadata + public IEnumerable<IMetadataProvider<T>> GetMetadataProviders<T>(BaseItem item, LibraryOptions libraryOptions) + where T : BaseItem { - var options = GetMetadataOptions(item); + var globalMetadataOptions = GetMetadataOptions(item); - return GetMetadataProvidersInternal<T>(item, options, false, false, true); + return GetMetadataProvidersInternal<T>(item, libraryOptions, globalMetadataOptions, false, false); } - private IEnumerable<IMetadataProvider<T>> GetMetadataProvidersInternal<T>(IHasMetadata item, MetadataOptions options, bool includeDisabled, bool forceEnableInternetMetadata, bool checkIsOwnedItem) - where T : IHasMetadata + private IEnumerable<IMetadataProvider<T>> GetMetadataProvidersInternal<T>(BaseItem item, LibraryOptions libraryOptions, MetadataOptions globalMetadataOptions, bool includeDisabled, bool forceEnableInternetMetadata) + where T : BaseItem { // Avoid implicitly captured closure - var currentOptions = options; + var currentOptions = globalMetadataOptions; return _metadataProviders.OfType<IMetadataProvider<T>>() - .Where(i => CanRefresh(i, item, currentOptions, includeDisabled, forceEnableInternetMetadata, checkIsOwnedItem)) - .OrderBy(i => GetConfiguredOrder(i, options)) + .Where(i => CanRefresh(i, item, libraryOptions, currentOptions, includeDisabled, forceEnableInternetMetadata)) + .OrderBy(i => GetConfiguredOrder(item, i, libraryOptions, globalMetadataOptions)) .ThenBy(GetDefaultOrder); } - private IEnumerable<IRemoteImageProvider> GetRemoteImageProviders(IHasMetadata item, bool includeDisabled) + private IEnumerable<IRemoteImageProvider> GetRemoteImageProviders(BaseItem item, bool includeDisabled) { var options = GetMetadataOptions(item); + var libraryOptions = _libraryManagerFactory().GetLibraryOptions(item); - return GetImageProviders(item, options, new ImageRefreshOptions(new DirectoryService(_logger, _fileSystem)), includeDisabled).OfType<IRemoteImageProvider>(); + return GetImageProviders(item, libraryOptions, options, new ImageRefreshOptions(new DirectoryService(_logger, _fileSystem)), includeDisabled).OfType<IRemoteImageProvider>(); } - private bool CanRefresh(IMetadataProvider provider, IHasMetadata item, MetadataOptions options, bool includeDisabled, bool forceEnableInternetMetadata, bool checkIsOwnedItem) + private bool CanRefresh(IMetadataProvider provider, BaseItem item, LibraryOptions libraryOptions, MetadataOptions options, bool includeDisabled, bool forceEnableInternetMetadata) { if (!includeDisabled) { @@ -331,12 +344,7 @@ namespace MediaBrowser.Providers.Manager if (provider is IRemoteMetadataProvider) { - if (!forceEnableInternetMetadata && !item.IsInternetMetadataEnabled()) - { - return false; - } - - if (Array.IndexOf(options.DisabledMetadataFetchers, provider.Name) != -1) + if (!forceEnableInternetMetadata && !item.IsMetadataFetcherEnabled(libraryOptions, provider.Name)) { return false; } @@ -349,7 +357,7 @@ namespace MediaBrowser.Providers.Manager } // If this restriction is ever lifted, movie xml providers will have to be updated to prevent owned items like trailers from reading those files - if (checkIsOwnedItem && item.IsOwnedItem) + if (!item.OwnerId.Equals(Guid.Empty)) { if (provider is ILocalMetadataProvider || provider is IRemoteMetadataProvider) { @@ -360,14 +368,14 @@ namespace MediaBrowser.Providers.Manager return true; } - private bool CanRefresh(IImageProvider provider, IHasMetadata item, MetadataOptions options, ImageRefreshOptions refreshOptions, bool includeDisabled) + private bool CanRefresh(IImageProvider provider, BaseItem item, LibraryOptions libraryOptions, MetadataOptions options, ImageRefreshOptions refreshOptions, bool includeDisabled) { if (!includeDisabled) { // If locked only allow local providers if (item.IsLocked && !(provider is ILocalImageProvider)) { - if (refreshOptions.ImageRefreshMode != ImageRefreshMode.FullRefresh) + if (refreshOptions.ImageRefreshMode != MetadataRefreshMode.FullRefresh) { return false; } @@ -375,18 +383,10 @@ namespace MediaBrowser.Providers.Manager if (provider is IRemoteImageProvider || provider is IDynamicImageProvider) { - if (Array.IndexOf(options.DisabledImageFetchers, provider.Name) != -1) + if (!item.IsImageFetcherEnabled(libraryOptions, provider.Name)) { return false; } - - if (provider is IRemoteImageProvider) - { - if (!refreshOptions.ForceEnableInternetMetadata && !item.IsInternetMetadataEnabled()) - { - return false; - } - } } } @@ -418,12 +418,14 @@ namespace MediaBrowser.Providers.Manager return hasOrder.Order; } - private int GetConfiguredOrder(IMetadataProvider provider, MetadataOptions options) + private int GetConfiguredOrder(BaseItem item, IMetadataProvider provider, LibraryOptions libraryOptions, MetadataOptions globalMetadataOptions) { // See if there's a user-defined order if (provider is ILocalMetadataProvider) { - var index = Array.IndexOf(options.LocalMetadataReaderOrder, provider.Name); + var configuredOrder = libraryOptions.LocalMetadataReaderOrder ?? globalMetadataOptions.LocalMetadataReaderOrder; + + var index = Array.IndexOf(configuredOrder, provider.Name); if (index != -1) { @@ -434,7 +436,12 @@ namespace MediaBrowser.Providers.Manager // See if there's a user-defined order if (provider is IRemoteMetadataProvider) { - var index = Array.IndexOf(options.MetadataFetcherOrder, provider.Name); + var typeOptions = libraryOptions.GetTypeOptions(item.GetType().Name); + var typeFetcherOrder = typeOptions == null ? null : typeOptions.MetadataFetcherOrder; + + var fetcherOrder = typeFetcherOrder ?? globalMetadataOptions.MetadataFetcherOrder; + + var index = Array.IndexOf(fetcherOrder, provider.Name); if (index != -1) { @@ -470,22 +477,13 @@ namespace MediaBrowser.Providers.Manager GetPluginSummary<Series>(), GetPluginSummary<Season>(), GetPluginSummary<Episode>(), - GetPluginSummary<Person>(), GetPluginSummary<MusicAlbum>(), GetPluginSummary<MusicArtist>(), GetPluginSummary<Audio>(), GetPluginSummary<AudioBook>(), - GetPluginSummary<AudioPodcast>(), - GetPluginSummary<Genre>(), GetPluginSummary<Studio>(), - GetPluginSummary<GameGenre>(), - GetPluginSummary<MusicGenre>(), GetPluginSummary<MusicVideo>(), - GetPluginSummary<Video>(), - GetPluginSummary<LiveTvChannel>(), - GetPluginSummary<LiveTvProgram>(), - GetPluginSummary<LiveTvVideoRecording>(), - GetPluginSummary<LiveTvAudioRecording>() + GetPluginSummary<Video>() }; } @@ -506,13 +504,24 @@ namespace MediaBrowser.Providers.Manager ItemType = typeof(T).Name }; - var imageProviders = GetImageProviders(dummy, options, new ImageRefreshOptions(new DirectoryService(_logger, _fileSystem)), true).ToList(); + var libraryOptions = new LibraryOptions(); + + var imageProviders = GetImageProviders(dummy, libraryOptions, options, new ImageRefreshOptions(new DirectoryService(_logger, _fileSystem)), true).ToList(); var pluginList = summary.Plugins.ToList(); - AddMetadataPlugins(pluginList, dummy, options); + AddMetadataPlugins(pluginList, dummy, libraryOptions, options); AddImagePlugins(pluginList, dummy, imageProviders); + var subtitleProviders = _subtitleManager.GetSupportedProviders(dummy); + + // Subtitle fetchers + pluginList.AddRange(subtitleProviders.Select(i => new MetadataPlugin + { + Name = i.Name, + Type = MetadataPluginType.SubtitleFetcher + })); + summary.Plugins = pluginList.ToArray(pluginList.Count); var supportedImageTypes = imageProviders.OfType<IRemoteImageProvider>() @@ -527,10 +536,10 @@ namespace MediaBrowser.Providers.Manager return summary; } - private void AddMetadataPlugins<T>(List<MetadataPlugin> list, T item, MetadataOptions options) - where T : IHasMetadata + private void AddMetadataPlugins<T>(List<MetadataPlugin> list, T item, LibraryOptions libraryOptions, MetadataOptions options) + where T : BaseItem { - var providers = GetMetadataProvidersInternal<T>(item, options, true, false, false).ToList(); + var providers = GetMetadataProvidersInternal<T>(item, libraryOptions, options, true, true).ToList(); // Locals list.AddRange(providers.Where(i => (i is ILocalMetadataProvider)).Select(i => new MetadataPlugin @@ -547,7 +556,7 @@ namespace MediaBrowser.Providers.Manager })); // Savers - list.AddRange(_savers.Where(i => IsSaverEnabledForItem(i, item, ItemUpdateType.MetadataEdit, true)).OrderBy(i => i.Name).Select(i => new MetadataPlugin + list.AddRange(_savers.Where(i => IsSaverEnabledForItem(i, item, libraryOptions, ItemUpdateType.MetadataEdit, true)).OrderBy(i => i.Name).Select(i => new MetadataPlugin { Name = i.Name, Type = MetadataPluginType.MetadataSaver @@ -555,7 +564,7 @@ namespace MediaBrowser.Providers.Manager } private void AddImagePlugins<T>(List<MetadataPlugin> list, T item, List<IImageProvider> imageProviders) - where T : IHasMetadata + where T : BaseItem { // Locals @@ -565,17 +574,15 @@ namespace MediaBrowser.Providers.Manager Type = MetadataPluginType.LocalImageProvider })); - var enableInternet = item.IsInternetMetadataEnabled(); - // Fetchers - list.AddRange(imageProviders.Where(i => i is IDynamicImageProvider || (enableInternet && i is IRemoteImageProvider)).Select(i => new MetadataPlugin + list.AddRange(imageProviders.Where(i => i is IDynamicImageProvider || (i is IRemoteImageProvider)).Select(i => new MetadataPlugin { Name = i.Name, Type = MetadataPluginType.ImageFetcher })); } - public MetadataOptions GetMetadataOptions(IHasMetadata item) + public MetadataOptions GetMetadataOptions(BaseItem item) { var type = item.GetType().Name; @@ -587,7 +594,7 @@ namespace MediaBrowser.Providers.Manager /// <summary> /// Saves the metadata. /// </summary> - public void SaveMetadata(IHasMetadata item, ItemUpdateType updateType) + public void SaveMetadata(BaseItem item, ItemUpdateType updateType) { SaveMetadata(item, updateType, _savers); } @@ -595,7 +602,7 @@ namespace MediaBrowser.Providers.Manager /// <summary> /// Saves the metadata. /// </summary> - public void SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable<string> savers) + public void SaveMetadata(BaseItem item, ItemUpdateType updateType, IEnumerable<string> savers) { SaveMetadata(item, updateType, _savers.Where(i => savers.Contains(i.Name, StringComparer.OrdinalIgnoreCase))); } @@ -607,9 +614,11 @@ namespace MediaBrowser.Providers.Manager /// <param name="updateType">Type of the update.</param> /// <param name="savers">The savers.</param> /// <returns>Task.</returns> - private void SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable<IMetadataSaver> savers) + private void SaveMetadata(BaseItem item, ItemUpdateType updateType, IEnumerable<IMetadataSaver> savers) { - foreach (var saver in savers.Where(i => IsSaverEnabledForItem(i, item, updateType, false))) + var libraryOptions = _libraryManagerFactory().GetLibraryOptions(item); + + foreach (var saver in savers.Where(i => IsSaverEnabledForItem(i, item, libraryOptions, updateType, false))) { _logger.Debug("Saving {0} to {1}.", item.Path ?? item.Name, saver.Name); @@ -660,49 +669,57 @@ namespace MediaBrowser.Providers.Manager /// <summary> /// Determines whether [is saver enabled for item] [the specified saver]. /// </summary> - /// <param name="saver">The saver.</param> - /// <param name="item">The item.</param> - /// <param name="updateType">Type of the update.</param> - /// <param name="includeDisabled">if set to <c>true</c> [include disabled].</param> - /// <returns><c>true</c> if [is saver enabled for item] [the specified saver]; otherwise, <c>false</c>.</returns> - private bool IsSaverEnabledForItem(IMetadataSaver saver, IHasMetadata item, ItemUpdateType updateType, bool includeDisabled) + private bool IsSaverEnabledForItem(IMetadataSaver saver, BaseItem item, LibraryOptions libraryOptions, ItemUpdateType updateType, bool includeDisabled) { var options = GetMetadataOptions(item); try { - var isEnabledFor = saver.IsEnabledFor(item, updateType); + if (!saver.IsEnabledFor(item, updateType)) + { + return false; + } if (!includeDisabled) { - if (options.DisabledMetadataSavers.Contains(saver.Name, StringComparer.OrdinalIgnoreCase)) + if (libraryOptions.MetadataSavers == null) { - return false; - } + if (options.DisabledMetadataSavers.Contains(saver.Name, StringComparer.OrdinalIgnoreCase)) + { + return false; + } - if (!item.IsSaveLocalMetadataEnabled()) - { - if (updateType >= ItemUpdateType.MetadataEdit) + if (!item.IsSaveLocalMetadataEnabled()) { - var fileSaver = saver as IMetadataFileSaver; + if (updateType >= ItemUpdateType.MetadataEdit) + { + var fileSaver = saver as IMetadataFileSaver; - // Manual edit occurred - // Even if save local is off, save locally anyway if the metadata file already exists - if (fileSaver == null || !isEnabledFor || !_fileSystem.FileExists(fileSaver.GetSavePath(item))) + // Manual edit occurred + // Even if save local is off, save locally anyway if the metadata file already exists + if (fileSaver == null || !_fileSystem.FileExists(fileSaver.GetSavePath(item))) + { + return false; + } + } + else { + // Manual edit did not occur + // Since local metadata saving is disabled, consider it disabled return false; } } - else + } + else + { + if (!libraryOptions.MetadataSavers.Contains(saver.Name, StringComparer.OrdinalIgnoreCase)) { - // Manual edit did not occur - // Since local metadata saving is disabled, consider it disabled return false; } } } - return isEnabledFor; + return true; } catch (Exception ex) { @@ -711,23 +728,48 @@ namespace MediaBrowser.Providers.Manager } } - public async Task<IEnumerable<RemoteSearchResult>> GetRemoteSearchResults<TItemType, TLookupType>(RemoteSearchQuery<TLookupType> searchInfo, - CancellationToken cancellationToken) + public Task<IEnumerable<RemoteSearchResult>> GetRemoteSearchResults<TItemType, TLookupType>(RemoteSearchQuery<TLookupType> searchInfo, CancellationToken cancellationToken) where TItemType : BaseItem, new() where TLookupType : ItemLookupInfo { - // Give it a dummy path just so that it looks like a file system item - var dummy = new TItemType + BaseItem referenceItem = null; + + if (!searchInfo.ItemId.Equals(Guid.Empty)) { - Path = Path.Combine(_appPaths.InternalMetadataPath, "dummy"), - ParentId = Guid.NewGuid() - }; + referenceItem = _libraryManagerFactory().GetItemById(searchInfo.ItemId); + } - dummy.SetParent(new Folder()); + return GetRemoteSearchResults<TItemType, TLookupType>(searchInfo, referenceItem, cancellationToken); + } - var options = GetMetadataOptions(dummy); + public async Task<IEnumerable<RemoteSearchResult>> GetRemoteSearchResults<TItemType, TLookupType>(RemoteSearchQuery<TLookupType> searchInfo, BaseItem referenceItem, CancellationToken cancellationToken) + where TItemType : BaseItem, new() + where TLookupType : ItemLookupInfo + { + LibraryOptions libraryOptions; - var providers = GetMetadataProvidersInternal<TItemType>(dummy, options, searchInfo.IncludeDisabledProviders, false, false) + if (referenceItem == null) + { + // Give it a dummy path just so that it looks like a file system item + var dummy = new TItemType + { + Path = Path.Combine(_appPaths.InternalMetadataPath, "dummy"), + ParentId = Guid.NewGuid() + }; + + dummy.SetParent(new Folder()); + + referenceItem = dummy; + libraryOptions = new LibraryOptions(); + } + else + { + libraryOptions = _libraryManagerFactory().GetLibraryOptions(referenceItem); + } + + var options = GetMetadataOptions(referenceItem); + + var providers = GetMetadataProvidersInternal<TItemType>(referenceItem, libraryOptions, options, searchInfo.IncludeDisabledProviders, false) .OfType<IRemoteSearchProvider<TLookupType>>(); if (!string.IsNullOrEmpty(searchInfo.SearchProviderName)) @@ -1006,15 +1048,6 @@ namespace MediaBrowser.Providers.Manager // Try to throttle this a little bit. await Task.Delay(100).ConfigureAwait(false); - if (refreshItem.Item2.ValidateChildren) - { - var folder = item as Folder; - if (folder != null) - { - await folder.ValidateChildren(new SimpleProgress<double>(), cancellationToken).ConfigureAwait(false); - } - } - var artist = item as MusicArtist; var task = artist == null ? RefreshItem(item, refreshItem.Item2, cancellationToken) @@ -1082,7 +1115,7 @@ namespace MediaBrowser.Providers.Manager .GetItemList(new InternalItemsQuery { IncludeItemTypes = new[] { typeof(MusicAlbum).Name }, - ArtistIds = new[] { item.Id.ToString("N") }, + ArtistIds = new[] { item.Id }, DtoOptions = new DtoOptions(false) { EnableImages = false @@ -1110,10 +1143,10 @@ namespace MediaBrowser.Providers.Manager } } - public Task RefreshFullItem(IHasMetadata item, MetadataRefreshOptions options, + public Task RefreshFullItem(BaseItem item, MetadataRefreshOptions options, CancellationToken cancellationToken) { - return RefreshItem((BaseItem)item, options, cancellationToken); + return RefreshItem(item, options, cancellationToken); } private bool _disposed; @@ -1125,7 +1158,6 @@ namespace MediaBrowser.Providers.Manager { _disposeCancellationTokenSource.Cancel(); } - GC.SuppressFinalize(this); } } }
\ No newline at end of file |
