mirror of https://github.com/jellyfin/jellyfin.git
Compare commits
5 Commits
55bda09a29
...
0f59e46761
Author | SHA1 | Date |
---|---|---|
Frank Riley | 0f59e46761 | |
renovate[bot] | 5612cb8178 | |
renovate[bot] | ccd06bc547 | |
Bond-009 | d29b85a134 | |
Frank Riley | 1449b861b1 |
|
@ -20,7 +20,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4.0.0
|
||||
with:
|
||||
|
|
|
@ -14,7 +14,7 @@ jobs:
|
|||
permissions: read-all
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
|
@ -39,7 +39,7 @@ jobs:
|
|||
permissions: read-all
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
|
@ -78,12 +78,12 @@ jobs:
|
|||
- openapi-base
|
||||
steps:
|
||||
- name: Download openapi-head
|
||||
uses: actions/download-artifact@9c19ed7fe5d278cd354c7dfd5d3b88589c7e2395 # v4.1.6
|
||||
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
|
||||
with:
|
||||
name: openapi-head
|
||||
path: openapi-head
|
||||
- name: Download openapi-base
|
||||
uses: actions/download-artifact@9c19ed7fe5d278cd354c7dfd5d3b88589c7e2395 # v4.1.6
|
||||
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
|
||||
with:
|
||||
name: openapi-base
|
||||
path: openapi-base
|
||||
|
@ -152,7 +152,7 @@ jobs:
|
|||
run: |-
|
||||
echo "JELLYFIN_VERSION=$(date +'%Y%m%d%H%M%S')" >> $GITHUB_ENV
|
||||
- name: Download openapi-head
|
||||
uses: actions/download-artifact@9c19ed7fe5d278cd354c7dfd5d3b88589c7e2395 # v4.1.6
|
||||
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
|
||||
with:
|
||||
name: openapi-head
|
||||
path: openapi-head
|
||||
|
|
|
@ -19,7 +19,7 @@ jobs:
|
|||
|
||||
runs-on: "${{ matrix.os }}"
|
||||
steps:
|
||||
- uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
|
||||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
|
||||
- uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4.0.0
|
||||
with:
|
||||
|
|
|
@ -24,7 +24,7 @@ jobs:
|
|||
reactions: '+1'
|
||||
|
||||
- name: Checkout the latest code
|
||||
uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
token: ${{ secrets.JF_BOT_TOKEN }}
|
||||
fetch-depth: 0
|
||||
|
@ -51,7 +51,7 @@ jobs:
|
|||
reactions: eyes
|
||||
|
||||
- name: Checkout the latest code
|
||||
uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
token: ${{ secrets.JF_BOT_TOKEN }}
|
||||
fetch-depth: 0
|
||||
|
@ -128,7 +128,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: pull in script
|
||||
uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
repository: jellyfin/jellyfin-triage-script
|
||||
- name: install python
|
||||
|
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
issues: write
|
||||
steps:
|
||||
- name: pull in script
|
||||
uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
repository: jellyfin/jellyfin-triage-script
|
||||
- name: install python
|
||||
|
|
|
@ -33,7 +33,7 @@ jobs:
|
|||
yq-version: v4.9.8
|
||||
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
ref: ${{ env.TAG_BRANCH }}
|
||||
|
||||
|
@ -66,7 +66,7 @@ jobs:
|
|||
NEXT_VERSION: ${{ github.event.inputs.NEXT_VERSION }}
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
|
||||
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
|
||||
with:
|
||||
ref: ${{ env.TAG_BRANCH }}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<PackageVersion Include="BlurHashSharp" Version="1.3.2" />
|
||||
<PackageVersion Include="CommandLineParser" Version="2.9.1" />
|
||||
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
|
||||
<PackageVersion Include="Diacritics" Version="3.3.27" />
|
||||
<PackageVersion Include="Diacritics" Version="3.3.29" />
|
||||
<PackageVersion Include="DiscUtils.Udf" Version="0.16.13" />
|
||||
<PackageVersion Include="DotNet.Glob" Version="3.1.3" />
|
||||
<PackageVersion Include="EFCoreSecondLevelCacheInterceptor" Version="4.4.3" />
|
||||
|
|
|
@ -44,7 +44,6 @@ using MediaBrowser.Model.Library;
|
|||
using MediaBrowser.Model.Querying;
|
||||
using MediaBrowser.Model.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using TMDbLib.Objects.Authentication;
|
||||
using Episode = MediaBrowser.Controller.Entities.TV.Episode;
|
||||
using EpisodeInfo = Emby.Naming.TV.EpisodeInfo;
|
||||
using Genre = MediaBrowser.Controller.Entities.Genre;
|
||||
|
@ -1612,14 +1611,18 @@ namespace Emby.Server.Implementations.Library
|
|||
/// <returns>IEnumerable{System.String}.</returns>
|
||||
public async Task<IEnumerable<Video>> GetIntros(BaseItem item, User user)
|
||||
{
|
||||
if (IntroProviders.Length == 0)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
var tasks = IntroProviders
|
||||
.Take(1)
|
||||
.Select(i => GetIntros(i, item, user));
|
||||
|
||||
var items = await Task.WhenAll(tasks).ConfigureAwait(false);
|
||||
|
||||
return items
|
||||
.SelectMany(i => i.ToArray())
|
||||
.SelectMany(i => i)
|
||||
.Select(ResolveIntro)
|
||||
.Where(i => i is not null)!; // null values got filtered out
|
||||
}
|
||||
|
|
|
@ -274,7 +274,7 @@ namespace Emby.Server.Implementations.Library
|
|||
var tasks = _providers.Select(i => GetDynamicMediaSources(item, i, cancellationToken));
|
||||
var results = await Task.WhenAll(tasks).ConfigureAwait(false);
|
||||
|
||||
return results.SelectMany(i => i.ToList());
|
||||
return results.SelectMany(i => i);
|
||||
}
|
||||
|
||||
private async Task<IEnumerable<MediaSourceInfo>> GetDynamicMediaSources(BaseItem item, IMediaSourceProvider provider, CancellationToken cancellationToken)
|
||||
|
|
|
@ -84,6 +84,11 @@ namespace MediaBrowser.Model.Entities
|
|||
/// <summary>
|
||||
/// The TvMaze provider.
|
||||
/// </summary>
|
||||
TvMaze = 19
|
||||
TvMaze = 19,
|
||||
|
||||
/// <summary>
|
||||
/// The Jellyfin provider.
|
||||
/// </summary>
|
||||
Jellyfin = 20
|
||||
}
|
||||
}
|
||||
|
|
|
@ -286,7 +286,7 @@ namespace MediaBrowser.Providers.Manager
|
|||
|
||||
var results = await Task.WhenAll(tasks).ConfigureAwait(false);
|
||||
|
||||
return results.SelectMany(i => i.ToList());
|
||||
return results.SelectMany(i => i);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -92,6 +92,8 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
"musicbrainzreleasegroupid",
|
||||
"tvdbid",
|
||||
"collectionitem",
|
||||
"jellyfinid",
|
||||
"uniqueid",
|
||||
|
||||
"isuserfavorite",
|
||||
"userrating",
|
||||
|
@ -296,6 +298,11 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
}
|
||||
}
|
||||
|
||||
protected virtual MetadataProvider? GetDefaultProvider()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
protected abstract void WriteCustomElements(BaseItem item, XmlWriter writer);
|
||||
|
||||
public static void AddMediaInfo<T>(T item, XmlWriter writer)
|
||||
|
@ -439,6 +446,17 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
{
|
||||
var writtenProviderIds = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
var defaultProvider = GetDefaultProvider();
|
||||
|
||||
if (defaultProvider != null)
|
||||
{
|
||||
var defaultProviderId = item.GetProviderId((MetadataProvider)defaultProvider);
|
||||
if (!string.IsNullOrEmpty(defaultProviderId))
|
||||
{
|
||||
writer.WriteElementString("id", defaultProviderId);
|
||||
}
|
||||
}
|
||||
|
||||
var overview = (item.Overview ?? string.Empty)
|
||||
.StripHtml()
|
||||
.Replace(""", "'", StringComparison.Ordinal);
|
||||
|
@ -544,46 +562,17 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
writer.WriteElementString("aspectratio", hasAspectRatio.AspectRatio);
|
||||
}
|
||||
|
||||
var tmdbCollection = item.GetProviderId(MetadataProvider.TmdbCollection);
|
||||
AddProviderId(writer, item, MetadataProvider.TmdbCollection, writtenProviderIds, "collectionnumber");
|
||||
|
||||
if (!string.IsNullOrEmpty(tmdbCollection))
|
||||
var imdbTagName = "imdbid";
|
||||
if (item is Series)
|
||||
{
|
||||
writer.WriteElementString("collectionnumber", tmdbCollection);
|
||||
writtenProviderIds.Add(MetadataProvider.TmdbCollection.ToString());
|
||||
imdbTagName = "imdb_id";
|
||||
}
|
||||
|
||||
var imdb = item.GetProviderId(MetadataProvider.Imdb);
|
||||
if (!string.IsNullOrEmpty(imdb))
|
||||
{
|
||||
if (item is Series)
|
||||
{
|
||||
writer.WriteElementString("imdb_id", imdb);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteElementString("imdbid", imdb);
|
||||
}
|
||||
|
||||
writtenProviderIds.Add(MetadataProvider.Imdb.ToString());
|
||||
}
|
||||
|
||||
// Series xml saver already saves this
|
||||
if (item is not Series)
|
||||
{
|
||||
var tvdb = item.GetProviderId(MetadataProvider.Tvdb);
|
||||
if (!string.IsNullOrEmpty(tvdb))
|
||||
{
|
||||
writer.WriteElementString("tvdbid", tvdb);
|
||||
writtenProviderIds.Add(MetadataProvider.Tvdb.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
var tmdb = item.GetProviderId(MetadataProvider.Tmdb);
|
||||
if (!string.IsNullOrEmpty(tmdb))
|
||||
{
|
||||
writer.WriteElementString("tmdbid", tmdb);
|
||||
writtenProviderIds.Add(MetadataProvider.Tmdb.ToString());
|
||||
}
|
||||
AddProviderIdAndUniqueId(writer, item, MetadataProvider.Imdb, writtenProviderIds, false, imdbTagName);
|
||||
AddProviderIdAndUniqueId(writer, item, MetadataProvider.Tvdb, writtenProviderIds);
|
||||
AddProviderIdAndUniqueId(writer, item, MetadataProvider.Tmdb, writtenProviderIds);
|
||||
|
||||
if (!string.IsNullOrEmpty(item.PreferredMetadataLanguage))
|
||||
{
|
||||
|
@ -687,68 +676,16 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
}
|
||||
}
|
||||
|
||||
var externalId = item.GetProviderId(MetadataProvider.AudioDbArtist);
|
||||
AddProviderId(writer, item, MetadataProvider.AudioDbArtist, writtenProviderIds);
|
||||
AddProviderId(writer, item, MetadataProvider.AudioDbAlbum, writtenProviderIds);
|
||||
AddProviderId(writer, item, MetadataProvider.Zap2It, writtenProviderIds);
|
||||
AddProviderId(writer, item, MetadataProvider.MusicBrainzAlbum, writtenProviderIds);
|
||||
AddProviderId(writer, item, MetadataProvider.MusicBrainzAlbumArtist, writtenProviderIds);
|
||||
AddProviderId(writer, item, MetadataProvider.MusicBrainzArtist, writtenProviderIds);
|
||||
AddProviderId(writer, item, MetadataProvider.MusicBrainzReleaseGroup, writtenProviderIds);
|
||||
AddProviderId(writer, item, MetadataProvider.TvRage, writtenProviderIds);
|
||||
|
||||
if (!string.IsNullOrEmpty(externalId))
|
||||
{
|
||||
writer.WriteElementString("audiodbartistid", externalId);
|
||||
writtenProviderIds.Add(MetadataProvider.AudioDbArtist.ToString());
|
||||
}
|
||||
|
||||
externalId = item.GetProviderId(MetadataProvider.AudioDbAlbum);
|
||||
|
||||
if (!string.IsNullOrEmpty(externalId))
|
||||
{
|
||||
writer.WriteElementString("audiodbalbumid", externalId);
|
||||
writtenProviderIds.Add(MetadataProvider.AudioDbAlbum.ToString());
|
||||
}
|
||||
|
||||
externalId = item.GetProviderId(MetadataProvider.Zap2It);
|
||||
|
||||
if (!string.IsNullOrEmpty(externalId))
|
||||
{
|
||||
writer.WriteElementString("zap2itid", externalId);
|
||||
writtenProviderIds.Add(MetadataProvider.Zap2It.ToString());
|
||||
}
|
||||
|
||||
externalId = item.GetProviderId(MetadataProvider.MusicBrainzAlbum);
|
||||
|
||||
if (!string.IsNullOrEmpty(externalId))
|
||||
{
|
||||
writer.WriteElementString("musicbrainzalbumid", externalId);
|
||||
writtenProviderIds.Add(MetadataProvider.MusicBrainzAlbum.ToString());
|
||||
}
|
||||
|
||||
externalId = item.GetProviderId(MetadataProvider.MusicBrainzAlbumArtist);
|
||||
|
||||
if (!string.IsNullOrEmpty(externalId))
|
||||
{
|
||||
writer.WriteElementString("musicbrainzalbumartistid", externalId);
|
||||
writtenProviderIds.Add(MetadataProvider.MusicBrainzAlbumArtist.ToString());
|
||||
}
|
||||
|
||||
externalId = item.GetProviderId(MetadataProvider.MusicBrainzArtist);
|
||||
|
||||
if (!string.IsNullOrEmpty(externalId))
|
||||
{
|
||||
writer.WriteElementString("musicbrainzartistid", externalId);
|
||||
writtenProviderIds.Add(MetadataProvider.MusicBrainzArtist.ToString());
|
||||
}
|
||||
|
||||
externalId = item.GetProviderId(MetadataProvider.MusicBrainzReleaseGroup);
|
||||
|
||||
if (!string.IsNullOrEmpty(externalId))
|
||||
{
|
||||
writer.WriteElementString("musicbrainzreleasegroupid", externalId);
|
||||
writtenProviderIds.Add(MetadataProvider.MusicBrainzReleaseGroup.ToString());
|
||||
}
|
||||
|
||||
externalId = item.GetProviderId(MetadataProvider.TvRage);
|
||||
if (!string.IsNullOrEmpty(externalId))
|
||||
{
|
||||
writer.WriteElementString("tvrageid", externalId);
|
||||
writtenProviderIds.Add(MetadataProvider.TvRage.ToString());
|
||||
}
|
||||
AddProviderIdAndUniqueId(writer, item, MetadataProvider.Jellyfin, writtenProviderIds, true, null, item.Id.ToString("N", CultureInfo.InvariantCulture));
|
||||
|
||||
if (item.ProviderIds is not null)
|
||||
{
|
||||
|
@ -764,7 +701,10 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
XmlConvert.VerifyName(tagName);
|
||||
Logger.LogDebug("Saving custom provider tagname {0}", tagName);
|
||||
|
||||
writer.WriteElementString(GetTagForProviderKey(providerKey), providerId);
|
||||
writer.WriteElementString(tagName, providerId);
|
||||
|
||||
var typeName = GetUniqueIdTypeForProviderKey(providerKey);
|
||||
AddUniqueId(writer, item, typeName, providerId, IsDefaultProvider(providerKey));
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
|
@ -793,6 +733,56 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
}
|
||||
}
|
||||
|
||||
private void AddProviderIdAndUniqueId(XmlWriter writer, BaseItem item, MetadataProvider provider, HashSet<string> writtenProviderIds, bool isDefault = false, string? tagName = null, string? externalId = null)
|
||||
{
|
||||
AddProviderIdImpl(writer, item, provider, writtenProviderIds, true, isDefault, tagName, externalId);
|
||||
}
|
||||
|
||||
private void AddProviderId(XmlWriter writer, BaseItem item, MetadataProvider provider, HashSet<string> writtenProviderIds, string? tagName = null, string? externalId = null)
|
||||
{
|
||||
AddProviderIdImpl(writer, item, provider, writtenProviderIds, false, false, tagName, externalId);
|
||||
}
|
||||
|
||||
private void AddProviderIdImpl(XmlWriter writer, BaseItem item, MetadataProvider provider, HashSet<string> writtenProviderIds, bool addUniqueId, bool isDefault, string? tagName = null, string? externalId = null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(externalId))
|
||||
{
|
||||
externalId = item.GetProviderId(provider);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(externalId))
|
||||
{
|
||||
var providerKey = provider.ToString();
|
||||
|
||||
if (tagName is null)
|
||||
{
|
||||
tagName = GetTagForProviderKey(providerKey);
|
||||
}
|
||||
|
||||
writer.WriteElementString(tagName, externalId);
|
||||
writtenProviderIds.Add(providerKey);
|
||||
|
||||
if (addUniqueId)
|
||||
{
|
||||
AddUniqueId(writer, item, GetUniqueIdTypeForProviderKey(providerKey), externalId, isDefault);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void AddUniqueId(XmlWriter writer, BaseItem item, string providerTypeName, string externalId, bool isDefault)
|
||||
{
|
||||
writer.WriteStartElement("uniqueid");
|
||||
writer.WriteAttributeString("type", providerTypeName);
|
||||
|
||||
if (isDefault)
|
||||
{
|
||||
writer.WriteAttributeString("default", "true");
|
||||
}
|
||||
|
||||
writer.WriteString(externalId);
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
|
||||
private void AddCollectionItems(Folder item, XmlWriter writer)
|
||||
{
|
||||
var items = item.LinkedChildren
|
||||
|
@ -1024,5 +1014,31 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
|
||||
private string GetTagForProviderKey(string providerKey)
|
||||
=> providerKey.ToLowerInvariant() + "id";
|
||||
|
||||
private string GetUniqueIdTypeForProviderKey(string providerKey)
|
||||
=> providerKey.ToLowerInvariant();
|
||||
|
||||
private bool IsDefaultProvider(string providerKey)
|
||||
{
|
||||
var defaultProvider = GetDefaultProvider();
|
||||
if (defaultProvider != null)
|
||||
{
|
||||
var defaultProviderKey = defaultProvider.ToString();
|
||||
return providerKey.Equals(defaultProviderKey, StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool IsDefaultProvider(MetadataProvider provider)
|
||||
{
|
||||
var defaultProvider = GetDefaultProvider();
|
||||
if (defaultProvider != null)
|
||||
{
|
||||
return provider == defaultProvider;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ using MediaBrowser.Controller.Configuration;
|
|||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.XbmcMetadata.Configuration;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
@ -49,6 +50,12 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
|
||||
=> item.SupportsLocalMetadata && item is Episode && updateType >= MinimumUpdateType;
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override MetadataProvider? GetDefaultProvider()
|
||||
{
|
||||
return MetadataProvider.Tvdb;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
|
||||
{
|
||||
|
|
|
@ -91,16 +91,15 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
return false;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override MetadataProvider? GetDefaultProvider()
|
||||
{
|
||||
return MetadataProvider.Imdb;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
|
||||
{
|
||||
var imdb = item.GetProviderId(MetadataProvider.Imdb);
|
||||
|
||||
if (!string.IsNullOrEmpty(imdb))
|
||||
{
|
||||
writer.WriteElementString("id", imdb);
|
||||
}
|
||||
|
||||
if (item is MusicVideo musicVideo)
|
||||
{
|
||||
foreach (var artist in musicVideo.Artists)
|
||||
|
|
|
@ -49,6 +49,12 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
|
||||
=> item.SupportsLocalMetadata && item is Series && updateType >= MinimumUpdateType;
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override MetadataProvider? GetDefaultProvider()
|
||||
{
|
||||
return MetadataProvider.Tvdb;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
|
||||
{
|
||||
|
@ -58,8 +64,6 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
|
||||
if (!string.IsNullOrEmpty(tvdb))
|
||||
{
|
||||
writer.WriteElementString("id", tvdb);
|
||||
|
||||
writer.WriteStartElement("episodeguide");
|
||||
|
||||
var language = item.GetPreferredMetadataLanguage();
|
||||
|
|
Loading…
Reference in New Issue