mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
update artist and album fields on song changes
This commit is contained in:
parent
359f90afd4
commit
f39d460f04
@ -1,4 +1,5 @@
|
|||||||
using MediaBrowser.Controller.Providers;
|
using MediaBrowser.Controller.Library;
|
||||||
|
using MediaBrowser.Controller.Providers;
|
||||||
using MediaBrowser.Model.Configuration;
|
using MediaBrowser.Model.Configuration;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.Users;
|
using MediaBrowser.Model.Users;
|
||||||
@ -148,12 +149,15 @@ namespace MediaBrowser.Controller.Entities.Audio
|
|||||||
var totalItems = songs.Count + others.Count;
|
var totalItems = songs.Count + others.Count;
|
||||||
var numComplete = 0;
|
var numComplete = 0;
|
||||||
|
|
||||||
|
var childUpdateType = ItemUpdateType.None;
|
||||||
|
|
||||||
// Refresh songs
|
// Refresh songs
|
||||||
foreach (var item in songs)
|
foreach (var item in songs)
|
||||||
{
|
{
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
var updateType = await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
||||||
|
childUpdateType = childUpdateType | updateType;
|
||||||
|
|
||||||
numComplete++;
|
numComplete++;
|
||||||
double percent = numComplete;
|
double percent = numComplete;
|
||||||
@ -161,15 +165,22 @@ namespace MediaBrowser.Controller.Entities.Audio
|
|||||||
progress.Report(percent * 100);
|
progress.Report(percent * 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var parentRefreshOptions = refreshOptions;
|
||||||
|
if (childUpdateType > ItemUpdateType.None)
|
||||||
|
{
|
||||||
|
parentRefreshOptions = new MetadataRefreshOptions(refreshOptions);
|
||||||
|
parentRefreshOptions.MetadataRefreshMode = MetadataRefreshMode.FullRefresh;
|
||||||
|
}
|
||||||
|
|
||||||
// Refresh current item
|
// Refresh current item
|
||||||
await RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
await RefreshMetadata(parentRefreshOptions, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
// Refresh all non-songs
|
// Refresh all non-songs
|
||||||
foreach (var item in others)
|
foreach (var item in others)
|
||||||
{
|
{
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
var updateType = await item.RefreshMetadata(parentRefreshOptions, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
numComplete++;
|
numComplete++;
|
||||||
double percent = numComplete;
|
double percent = numComplete;
|
||||||
|
@ -717,7 +717,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
/// <param name="options">The options.</param>
|
/// <param name="options">The options.</param>
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns>true if a provider reports we changed</returns>
|
/// <returns>true if a provider reports we changed</returns>
|
||||||
public async Task RefreshMetadata(MetadataRefreshOptions options, CancellationToken cancellationToken)
|
public async Task<ItemUpdateType> RefreshMetadata(MetadataRefreshOptions options, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var locationType = LocationType;
|
var locationType = LocationType;
|
||||||
|
|
||||||
@ -744,15 +744,16 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var dateLastSaved = DateLastSaved;
|
var refreshOptions = requiresSave
|
||||||
|
? new MetadataRefreshOptions(options)
|
||||||
|
{
|
||||||
|
ForceSave = true
|
||||||
|
}
|
||||||
|
: options;
|
||||||
|
|
||||||
await ProviderManager.RefreshMetadata(this, options, cancellationToken).ConfigureAwait(false);
|
var result = await ProviderManager.RefreshMetadata(this, refreshOptions, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
// If it wasn't saved by the provider process, save now
|
return result;
|
||||||
if (requiresSave && dateLastSaved == DateLastSaved)
|
|
||||||
{
|
|
||||||
await UpdateToRepository(ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[IgnoreDataMember]
|
[IgnoreDataMember]
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Providers;
|
using MediaBrowser.Controller.Providers;
|
||||||
using MediaBrowser.Model.Library;
|
using MediaBrowser.Model.Library;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -22,7 +23,7 @@ namespace MediaBrowser.Controller.LiveTv
|
|||||||
|
|
||||||
bool IsParentalAllowed(User user);
|
bool IsParentalAllowed(User user);
|
||||||
|
|
||||||
Task RefreshMetadata(MetadataRefreshOptions options, CancellationToken cancellationToken);
|
Task<ItemUpdateType> RefreshMetadata(MetadataRefreshOptions options, CancellationToken cancellationToken);
|
||||||
|
|
||||||
PlayAccess GetPlayAccess(User user);
|
PlayAccess GetPlayAccess(User user);
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System.Threading;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
using MediaBrowser.Controller.Library;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Providers
|
namespace MediaBrowser.Controller.Providers
|
||||||
{
|
{
|
||||||
@ -20,7 +21,7 @@ namespace MediaBrowser.Controller.Providers
|
|||||||
/// <param name="refreshOptions">The options.</param>
|
/// <param name="refreshOptions">The options.</param>
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
Task RefreshMetadata(IHasMetadata item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken);
|
Task<ItemUpdateType> RefreshMetadata(IHasMetadata item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the order.
|
/// Gets the order.
|
||||||
|
@ -23,7 +23,7 @@ namespace MediaBrowser.Controller.Providers
|
|||||||
/// <param name="options">The options.</param>
|
/// <param name="options">The options.</param>
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
Task RefreshMetadata(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken);
|
Task<ItemUpdateType> RefreshMetadata(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Saves the image.
|
/// Saves the image.
|
||||||
|
@ -12,7 +12,7 @@ namespace MediaBrowser.Controller.Providers
|
|||||||
public bool ReplaceAllMetadata { get; set; }
|
public bool ReplaceAllMetadata { get; set; }
|
||||||
|
|
||||||
public bool IsPostRecursiveRefresh { get; set; }
|
public bool IsPostRecursiveRefresh { get; set; }
|
||||||
|
|
||||||
public MetadataRefreshMode MetadataRefreshMode { get; set; }
|
public MetadataRefreshMode MetadataRefreshMode { get; set; }
|
||||||
|
|
||||||
public bool ForceSave { get; set; }
|
public bool ForceSave { get; set; }
|
||||||
@ -28,7 +28,7 @@ namespace MediaBrowser.Controller.Providers
|
|||||||
MetadataRefreshMode = MetadataRefreshMode.Default;
|
MetadataRefreshMode = MetadataRefreshMode.Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MetadataRefreshOptions( MetadataRefreshOptions copy)
|
public MetadataRefreshOptions(MetadataRefreshOptions copy)
|
||||||
: base(copy.DirectoryService)
|
: base(copy.DirectoryService)
|
||||||
{
|
{
|
||||||
MetadataRefreshMode = copy.MetadataRefreshMode;
|
MetadataRefreshMode = copy.MetadataRefreshMode;
|
||||||
|
@ -87,7 +87,7 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
return ProviderRepo.GetMetadataStatus(item.Id) ?? new MetadataStatus { ItemId = item.Id };
|
return ProviderRepo.GetMetadataStatus(item.Id) ?? new MetadataStatus { ItemId = item.Id };
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task RefreshMetadata(IHasMetadata item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
|
public async Task<ItemUpdateType> RefreshMetadata(IHasMetadata item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var itemOfType = (TItemType)item;
|
var itemOfType = (TItemType)item;
|
||||||
var config = ProviderManager.GetMetadataOptions(item);
|
var config = ProviderManager.GetMetadataOptions(item);
|
||||||
@ -184,6 +184,8 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
}
|
}
|
||||||
|
|
||||||
await AfterMetadataRefresh(itemOfType, refreshOptions, cancellationToken).ConfigureAwait(false);
|
await AfterMetadataRefresh(itemOfType, refreshOptions, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
|
return updateType;
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly Task _cachedTask = Task.FromResult(true);
|
private readonly Task _cachedTask = Task.FromResult(true);
|
||||||
|
@ -108,7 +108,7 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
_externalIds = externalIds.OrderBy(i => i.Name).ToArray();
|
_externalIds = externalIds.OrderBy(i => i.Name).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task RefreshMetadata(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
public Task<ItemUpdateType> RefreshMetadata(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var service = _metadataServices.FirstOrDefault(i => i.CanRefresh(item));
|
var service = _metadataServices.FirstOrDefault(i => i.CanRefresh(item));
|
||||||
|
|
||||||
@ -118,7 +118,7 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
}
|
}
|
||||||
|
|
||||||
_logger.Error("Unable to find a metadata service for item of type " + item.GetType().Name);
|
_logger.Error("Unable to find a metadata service for item of type " + item.GetType().Name);
|
||||||
return Task.FromResult(true);
|
return Task.FromResult(ItemUpdateType.None);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SaveImage(IHasImages item, string url, SemaphoreSlim resourcePool, ImageType type, int? imageIndex, CancellationToken cancellationToken)
|
public async Task SaveImage(IHasImages item, string url, SemaphoreSlim resourcePool, ImageType type, int? imageIndex, CancellationToken cancellationToken)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user