aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Manager/ProviderManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Manager/ProviderManager.cs')
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs65
1 files changed, 21 insertions, 44 deletions
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index 06db8a237..0f0745d1b 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -20,6 +20,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using CommonIO;
+using MediaBrowser.Model.Serialization;
namespace MediaBrowser.Providers.Manager
{
@@ -54,12 +55,11 @@ namespace MediaBrowser.Providers.Manager
private readonly IFileSystem _fileSystem;
private IMetadataService[] _metadataServices = { };
- private IItemIdentityProvider[] _identityProviders = { };
- private IItemIdentityConverter[] _identityConverters = { };
private IMetadataProvider[] _metadataProviders = { };
private IEnumerable<IMetadataSaver> _savers;
private IImageSaver[] _imageSavers;
private readonly IServerApplicationPaths _appPaths;
+ private readonly IJsonSerializer _json;
private IExternalId[] _externalIds;
@@ -73,7 +73,7 @@ namespace MediaBrowser.Providers.Manager
/// <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)
+ public ProviderManager(IHttpClient httpClient, IServerConfigurationManager configurationManager, ILibraryMonitor libraryMonitor, ILogManager logManager, IFileSystem fileSystem, IServerApplicationPaths appPaths, Func<ILibraryManager> libraryManagerFactory, IJsonSerializer json)
{
_logger = logManager.GetLogger("ProviderManager");
_httpClient = httpClient;
@@ -82,6 +82,7 @@ namespace MediaBrowser.Providers.Manager
_fileSystem = fileSystem;
_appPaths = appPaths;
_libraryManagerFactory = libraryManagerFactory;
+ _json = json;
}
/// <summary>
@@ -89,22 +90,17 @@ namespace MediaBrowser.Providers.Manager
/// </summary>
/// <param name="imageProviders">The image providers.</param>
/// <param name="metadataServices">The metadata services.</param>
- /// <param name="identityProviders">The identity providers.</param>
- /// <param name="identityConverters">The identity converters.</param>
/// <param name="metadataProviders">The metadata providers.</param>
/// <param name="metadataSavers">The metadata savers.</param>
/// <param name="imageSavers">The image savers.</param>
/// <param name="externalIds">The external ids.</param>
public void AddParts(IEnumerable<IImageProvider> imageProviders, IEnumerable<IMetadataService> metadataServices,
- IEnumerable<IItemIdentityProvider> identityProviders, IEnumerable<IItemIdentityConverter> identityConverters,
IEnumerable<IMetadataProvider> metadataProviders, IEnumerable<IMetadataSaver> metadataSavers,
IEnumerable<IImageSaver> imageSavers, IEnumerable<IExternalId> externalIds)
{
ImageProviders = imageProviders.ToArray();
_metadataServices = metadataServices.OrderBy(i => i.Order).ToArray();
- _identityProviders = identityProviders.ToArray();
- _identityConverters = identityConverters.ToArray();
_metadataProviders = metadataProviders.ToArray();
_imageSavers = imageSavers.ToArray();
_externalIds = externalIds.OrderBy(i => i.Name).ToArray();
@@ -298,18 +294,6 @@ namespace MediaBrowser.Providers.Manager
.ThenBy(GetDefaultOrder);
}
- public IEnumerable<IItemIdentityProvider<TLookupInfo>> GetItemIdentityProviders<TLookupInfo>()
- where TLookupInfo : ItemLookupInfo
- {
- return _identityProviders.OfType<IItemIdentityProvider<TLookupInfo>>();
- }
-
- public IEnumerable<IItemIdentityConverter<TLookupInfo>> GetItemIdentityConverters<TLookupInfo>()
- where TLookupInfo : ItemLookupInfo
- {
- return _identityConverters.OfType<IItemIdentityConverter<TLookupInfo>>();
- }
-
private IEnumerable<IRemoteImageProvider> GetRemoteImageProviders(IHasImages item, bool includeDisabled)
{
var options = GetMetadataOptions(item);
@@ -730,8 +714,6 @@ namespace MediaBrowser.Providers.Manager
where TItemType : BaseItem, new()
where TLookupType : ItemLookupInfo
{
- const int maxResults = 10;
-
// Give it a dummy path just so that it looks like a file system item
var dummy = new TItemType
{
@@ -761,8 +743,6 @@ namespace MediaBrowser.Providers.Manager
}
var resultList = new List<RemoteSearchResult>();
- var foundProviderIds = new Dictionary<Tuple<string, string>, RemoteSearchResult>();
- var foundTitleYearStrings = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
foreach (var provider in providers)
{
@@ -772,31 +752,26 @@ namespace MediaBrowser.Providers.Manager
foreach (var result in results)
{
- var bFound = false;
+ var existingMatch = resultList.FirstOrDefault(i => i.ProviderIds.Any(p => string.Equals(result.GetProviderId(p.Key), p.Value, StringComparison.OrdinalIgnoreCase)));
- // This check prevents duplicate search results by comparing provider ids
- foreach (var providerId in result.ProviderIds)
+ if (existingMatch == null)
{
- var idTuple = new Tuple<string, string>(providerId.Key.ToLower(), providerId.Value.ToLower());
-
- if (!foundProviderIds.ContainsKey(idTuple))
- {
- foundProviderIds.Add(idTuple, result);
- }
- else
+ resultList.Add(result);
+ }
+ else
+ {
+ foreach (var providerId in result.ProviderIds)
{
- bFound = true;
- var existingResult = foundProviderIds[idTuple];
- if (string.IsNullOrEmpty(existingResult.ImageUrl) && !string.IsNullOrEmpty(result.ImageUrl))
+ if (!existingMatch.ProviderIds.ContainsKey(providerId.Key))
{
- existingResult.ImageUrl = result.ImageUrl;
+ existingMatch.ProviderIds.Add(providerId.Key, providerId.Value);
}
}
- }
- if (!bFound && resultList.Count < maxResults)
- {
- resultList.Add(result);
+ if (string.IsNullOrWhiteSpace(existingMatch.ImageUrl))
+ {
+ existingMatch.ImageUrl = result.ImageUrl;
+ }
}
}
}
@@ -806,6 +781,8 @@ namespace MediaBrowser.Providers.Manager
}
}
+ //_logger.Debug("Returning search results {0}", _json.SerializeToString(resultList));
+
return resultList;
}
@@ -853,7 +830,7 @@ namespace MediaBrowser.Providers.Manager
});
}
- public IEnumerable<ExternalUrl> GetExternalUrls(IHasProviderIds item)
+ public IEnumerable<ExternalUrl> GetExternalUrls(BaseItem item)
{
return GetExternalIds(item)
.Select(i =>
@@ -876,7 +853,7 @@ namespace MediaBrowser.Providers.Manager
Url = string.Format(i.UrlFormatString, value)
};
- }).Where(i => i != null);
+ }).Where(i => i != null).Concat(item.GetRelatedUrls());
}
public IEnumerable<ExternalIdInfo> GetExternalIdInfos(IHasProviderIds item)