Move external url listing to provider for plugin use (#12279)
This commit is contained in:
parent
78ed8f660c
commit
b026772764
|
@ -664,7 +664,8 @@ namespace Emby.Server.Implementations
|
|||
GetExports<IMetadataService>(),
|
||||
GetExports<IMetadataProvider>(),
|
||||
GetExports<IMetadataSaver>(),
|
||||
GetExports<IExternalId>());
|
||||
GetExports<IExternalId>(),
|
||||
GetExports<IExternalUrlProvider>());
|
||||
|
||||
Resolve<IMediaSourceManager>().AddParts(GetExports<IMediaSourceProvider>());
|
||||
}
|
||||
|
|
|
@ -2497,11 +2497,6 @@ namespace MediaBrowser.Controller.Entities
|
|||
return new[] { Id };
|
||||
}
|
||||
|
||||
public virtual List<ExternalUrl> GetRelatedUrls()
|
||||
{
|
||||
return new List<ExternalUrl>();
|
||||
}
|
||||
|
||||
public virtual double? GetRefreshProgress()
|
||||
{
|
||||
return null;
|
||||
|
|
|
@ -121,23 +121,5 @@ namespace MediaBrowser.Controller.Entities.Movies
|
|||
|
||||
return hasChanges;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override List<ExternalUrl> GetRelatedUrls()
|
||||
{
|
||||
var list = base.GetRelatedUrls();
|
||||
|
||||
var imdbId = this.GetProviderId(MetadataProvider.Imdb);
|
||||
if (!string.IsNullOrEmpty(imdbId))
|
||||
{
|
||||
list.Add(new ExternalUrl
|
||||
{
|
||||
Name = "Trakt",
|
||||
Url = string.Format(CultureInfo.InvariantCulture, "https://trakt.tv/movies/{0}", imdbId)
|
||||
});
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -344,22 +344,5 @@ namespace MediaBrowser.Controller.Entities.TV
|
|||
|
||||
return hasChanges;
|
||||
}
|
||||
|
||||
public override List<ExternalUrl> GetRelatedUrls()
|
||||
{
|
||||
var list = base.GetRelatedUrls();
|
||||
|
||||
var imdbId = this.GetProviderId(MetadataProvider.Imdb);
|
||||
if (!string.IsNullOrEmpty(imdbId))
|
||||
{
|
||||
list.Add(new ExternalUrl
|
||||
{
|
||||
Name = "Trakt",
|
||||
Url = string.Format(CultureInfo.InvariantCulture, "https://trakt.tv/episodes/{0}", imdbId)
|
||||
});
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -482,22 +482,5 @@ namespace MediaBrowser.Controller.Entities.TV
|
|||
|
||||
return hasChanges;
|
||||
}
|
||||
|
||||
public override List<ExternalUrl> GetRelatedUrls()
|
||||
{
|
||||
var list = base.GetRelatedUrls();
|
||||
|
||||
var imdbId = this.GetProviderId(MetadataProvider.Imdb);
|
||||
if (!string.IsNullOrEmpty(imdbId))
|
||||
{
|
||||
list.Add(new ExternalUrl
|
||||
{
|
||||
Name = "Trakt",
|
||||
Url = string.Format(CultureInfo.InvariantCulture, "https://trakt.tv/shows/{0}", imdbId)
|
||||
});
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -80,22 +80,5 @@ namespace MediaBrowser.Controller.Entities
|
|||
|
||||
return hasChanges;
|
||||
}
|
||||
|
||||
public override List<ExternalUrl> GetRelatedUrls()
|
||||
{
|
||||
var list = base.GetRelatedUrls();
|
||||
|
||||
var imdbId = this.GetProviderId(MetadataProvider.Imdb);
|
||||
if (!string.IsNullOrEmpty(imdbId))
|
||||
{
|
||||
list.Add(new ExternalUrl
|
||||
{
|
||||
Name = "Trakt",
|
||||
Url = string.Format(CultureInfo.InvariantCulture, "https://trakt.tv/movies/{0}", imdbId)
|
||||
});
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -254,25 +254,5 @@ namespace MediaBrowser.Controller.LiveTv
|
|||
|
||||
return name;
|
||||
}
|
||||
|
||||
public override List<ExternalUrl> GetRelatedUrls()
|
||||
{
|
||||
var list = base.GetRelatedUrls();
|
||||
|
||||
var imdbId = this.GetProviderId(MetadataProvider.Imdb);
|
||||
if (!string.IsNullOrEmpty(imdbId))
|
||||
{
|
||||
if (IsMovie)
|
||||
{
|
||||
list.Add(new ExternalUrl
|
||||
{
|
||||
Name = "Trakt",
|
||||
Url = string.Format(CultureInfo.InvariantCulture, "https://trakt.tv/movies/{0}", imdbId)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Providers;
|
||||
|
||||
|
@ -33,6 +34,7 @@ namespace MediaBrowser.Controller.Providers
|
|||
/// <summary>
|
||||
/// Gets the URL format string for this id.
|
||||
/// </summary>
|
||||
[Obsolete("Obsolete in 10.10, to be removed in 10.11")]
|
||||
string? UrlFormatString { get; }
|
||||
|
||||
/// <summary>
|
||||
|
|
22
MediaBrowser.Controller/Providers/IExternalUrlProvider.cs
Normal file
22
MediaBrowser.Controller/Providers/IExternalUrlProvider.cs
Normal file
|
@ -0,0 +1,22 @@
|
|||
using System.Collections.Generic;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
|
||||
namespace MediaBrowser.Controller.Providers;
|
||||
|
||||
/// <summary>
|
||||
/// Interface to include related urls for an item.
|
||||
/// </summary>
|
||||
public interface IExternalUrlProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the external service name.
|
||||
/// </summary>
|
||||
string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Get the list of external urls.
|
||||
/// </summary>
|
||||
/// <param name="item">The item to get external urls for.</param>
|
||||
/// <returns>The list of external urls.</returns>
|
||||
IEnumerable<string> GetExternalUrls(BaseItem item);
|
||||
}
|
|
@ -99,12 +99,14 @@ namespace MediaBrowser.Controller.Providers
|
|||
/// <param name="metadataProviders">Metadata providers to use.</param>
|
||||
/// <param name="metadataSavers">Metadata savers to use.</param>
|
||||
/// <param name="externalIds">External IDs to use.</param>
|
||||
/// <param name="externalUrlProviders">The list of external url providers.</param>
|
||||
void AddParts(
|
||||
IEnumerable<IImageProvider> imageProviders,
|
||||
IEnumerable<IMetadataService> metadataServices,
|
||||
IEnumerable<IMetadataProvider> metadataProviders,
|
||||
IEnumerable<IMetadataSaver> metadataSavers,
|
||||
IEnumerable<IExternalId> externalIds);
|
||||
IEnumerable<IExternalId> externalIds,
|
||||
IEnumerable<IExternalUrlProvider> externalUrlProviders);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the available remote images.
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
using System;
|
||||
|
||||
namespace MediaBrowser.Model.Providers
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -17,7 +19,9 @@ namespace MediaBrowser.Model.Providers
|
|||
Name = name;
|
||||
Key = key;
|
||||
Type = type;
|
||||
#pragma warning disable CS0618 // Type or member is obsolete - Remove 10.11
|
||||
UrlFormatString = urlFormatString;
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -46,6 +50,7 @@ namespace MediaBrowser.Model.Providers
|
|||
/// <summary>
|
||||
/// Gets or sets the URL format string.
|
||||
/// </summary>
|
||||
[Obsolete("Obsolete in 10.10, to be removed in 10.11")]
|
||||
public string? UrlFormatString { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,11 +69,12 @@ namespace MediaBrowser.Providers.Manager
|
|||
o.PoolInitialFill = 1;
|
||||
});
|
||||
|
||||
private IImageProvider[] _imageProviders = Array.Empty<IImageProvider>();
|
||||
private IMetadataService[] _metadataServices = Array.Empty<IMetadataService>();
|
||||
private IMetadataProvider[] _metadataProviders = Array.Empty<IMetadataProvider>();
|
||||
private IMetadataSaver[] _savers = Array.Empty<IMetadataSaver>();
|
||||
private IExternalId[] _externalIds = Array.Empty<IExternalId>();
|
||||
private IImageProvider[] _imageProviders = [];
|
||||
private IMetadataService[] _metadataServices = [];
|
||||
private IMetadataProvider[] _metadataProviders = [];
|
||||
private IMetadataSaver[] _savers = [];
|
||||
private IExternalId[] _externalIds = [];
|
||||
private IExternalUrlProvider[] _externalUrlProviders = [];
|
||||
private bool _isProcessingRefreshQueue;
|
||||
private bool _disposed;
|
||||
|
||||
|
@ -132,12 +133,14 @@ namespace MediaBrowser.Providers.Manager
|
|||
IEnumerable<IMetadataService> metadataServices,
|
||||
IEnumerable<IMetadataProvider> metadataProviders,
|
||||
IEnumerable<IMetadataSaver> metadataSavers,
|
||||
IEnumerable<IExternalId> externalIds)
|
||||
IEnumerable<IExternalId> externalIds,
|
||||
IEnumerable<IExternalUrlProvider> externalUrlProviders)
|
||||
{
|
||||
_imageProviders = imageProviders.ToArray();
|
||||
_metadataServices = metadataServices.OrderBy(i => i.Order).ToArray();
|
||||
_metadataProviders = metadataProviders.ToArray();
|
||||
_externalIds = externalIds.OrderBy(i => i.ProviderName).ToArray();
|
||||
_externalUrlProviders = externalUrlProviders.OrderBy(i => i.Name).ToArray();
|
||||
|
||||
_savers = metadataSavers.ToArray();
|
||||
}
|
||||
|
@ -877,31 +880,35 @@ namespace MediaBrowser.Providers.Manager
|
|||
/// <inheritdoc/>
|
||||
public IEnumerable<ExternalUrl> GetExternalUrls(BaseItem item)
|
||||
{
|
||||
return GetExternalIds(item)
|
||||
#pragma warning disable CS0618 // Type or member is obsolete - Remove 10.11
|
||||
var legacyExternalIdUrls = GetExternalIds(item)
|
||||
.Select(i =>
|
||||
{
|
||||
if (string.IsNullOrEmpty(i.UrlFormatString))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var urlFormatString = i.UrlFormatString;
|
||||
if (string.IsNullOrEmpty(urlFormatString)
|
||||
|| !item.TryGetProviderId(i.Key, out var providerId))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var value = item.GetProviderId(i.Key);
|
||||
return new ExternalUrl
|
||||
{
|
||||
Name = i.ProviderName,
|
||||
Url = string.Format(
|
||||
CultureInfo.InvariantCulture,
|
||||
urlFormatString,
|
||||
providerId)
|
||||
};
|
||||
})
|
||||
.OfType<ExternalUrl>();
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var externalUrls = _externalUrlProviders
|
||||
.SelectMany(p => p
|
||||
.GetExternalUrls(item)
|
||||
.Select(externalUrl => new ExternalUrl { Name = p.Name, Url = externalUrl }));
|
||||
|
||||
return new ExternalUrl
|
||||
{
|
||||
Name = i.ProviderName,
|
||||
Url = string.Format(
|
||||
CultureInfo.InvariantCulture,
|
||||
i.UrlFormatString,
|
||||
value)
|
||||
};
|
||||
}).Where(i => i is not null)
|
||||
.Concat(item.GetRelatedUrls())!; // We just filtered out all the nulls
|
||||
return legacyExternalIdUrls.Concat(externalUrls).OrderBy(u => u.Name);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
@ -912,7 +919,9 @@ namespace MediaBrowser.Providers.Manager
|
|||
name: i.ProviderName,
|
||||
key: i.Key,
|
||||
type: i.Type,
|
||||
#pragma warning disable CS0618 // Type or member is obsolete - Remove 10.11
|
||||
urlFormatString: i.UrlFormatString));
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
|
|
@ -585,15 +585,17 @@ namespace Jellyfin.Providers.Tests.Manager
|
|||
IEnumerable<IMetadataService>? metadataServices = null,
|
||||
IEnumerable<IMetadataProvider>? metadataProviders = null,
|
||||
IEnumerable<IMetadataSaver>? metadataSavers = null,
|
||||
IEnumerable<IExternalId>? externalIds = null)
|
||||
IEnumerable<IExternalId>? externalIds = null,
|
||||
IEnumerable<IExternalUrlProvider>? externalUrlProviders = null)
|
||||
{
|
||||
imageProviders ??= Array.Empty<IImageProvider>();
|
||||
metadataServices ??= Array.Empty<IMetadataService>();
|
||||
metadataProviders ??= Array.Empty<IMetadataProvider>();
|
||||
metadataSavers ??= Array.Empty<IMetadataSaver>();
|
||||
externalIds ??= Array.Empty<IExternalId>();
|
||||
externalUrlProviders ??= Array.Empty<IExternalUrlProvider>();
|
||||
|
||||
providerManager.AddParts(imageProviders, metadataServices, metadataProviders, metadataSavers, externalIds);
|
||||
providerManager.AddParts(imageProviders, metadataServices, metadataProviders, metadataSavers, externalIds, externalUrlProviders);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
Loading…
Reference in New Issue
Block a user