diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index d03c614cfe..47d6663a16 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -2987,21 +2987,29 @@ namespace Emby.Server.Implementations.Library if (personEntity is null) { - var path = Person.GetPath(person.Name); - var info = Directory.CreateDirectory(path); - var lastWriteTime = info.LastWriteTimeUtc; - personEntity = new Person() + try { - Name = person.Name, - Id = GetItemByNameId(path), - DateCreated = info.CreationTimeUtc, - DateModified = lastWriteTime, - Path = path - }; + var path = Person.GetPath(person.Name); + var info = Directory.CreateDirectory(path); + var lastWriteTime = info.LastWriteTimeUtc; + personEntity = new Person() + { + Name = person.Name, + Id = GetItemByNameId(path), + DateCreated = info.CreationTimeUtc, + DateModified = lastWriteTime, + Path = path + }; - personEntity.PresentationUniqueKey = personEntity.CreatePresentationUniqueKey(); - saveEntity = true; - createEntity = true; + personEntity.PresentationUniqueKey = personEntity.CreatePresentationUniqueKey(); + saveEntity = true; + createEntity = true; + } + catch (Exception ex) + { + _logger.LogWarning(ex, "Failed to create person {Name}", person.Name); + continue; + } } foreach (var id in person.ProviderIds) diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 3aada3cef6..da241533a8 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -262,14 +262,13 @@ namespace MediaBrowser.Providers.Manager protected async Task SaveItemAsync(MetadataResult result, ItemUpdateType reason, CancellationToken cancellationToken) { + await result.Item.UpdateToRepositoryAsync(reason, cancellationToken).ConfigureAwait(false); if (result.Item.SupportsPeople && result.People is not null) { var baseItem = result.Item; await LibraryManager.UpdatePeopleAsync(baseItem, result.People, cancellationToken).ConfigureAwait(false); } - - await result.Item.UpdateToRepositoryAsync(reason, cancellationToken).ConfigureAwait(false); } protected virtual Task AfterMetadataRefresh(TItemType item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken) diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs index 2af3667d01..14bdbc1416 100644 --- a/MediaBrowser.Providers/Music/AlbumMetadataService.cs +++ b/MediaBrowser.Providers/Music/AlbumMetadataService.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; +using System.Threading.Tasks; using Jellyfin.Data.Enums; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; @@ -53,6 +55,16 @@ public class AlbumMetadataService : MetadataService protected override IReadOnlyList GetChildrenForMetadataUpdates(MusicAlbum item) => item.GetRecursiveChildren(i => i is Audio); + /// + protected override Task AfterMetadataRefresh(MusicAlbum item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken) + { + base.AfterMetadataRefresh(item, refreshOptions, cancellationToken); + + SetPeople(item); + + return Task.CompletedTask; + } + /// protected override ItemUpdateType UpdateMetadataFromChildren(MusicAlbum item, IReadOnlyList children, bool isFullRefresh, ItemUpdateType currentUpdateType) { @@ -83,7 +95,6 @@ public class AlbumMetadataService : MetadataService updateType |= SetArtistsFromSongs(item, songs); updateType |= SetAlbumArtistFromSongs(item, songs); updateType |= SetAlbumFromSongs(item, songs); - updateType |= SetPeople(item); } return updateType; @@ -178,10 +189,8 @@ public class AlbumMetadataService : MetadataService } } - private ItemUpdateType SetPeople(MusicAlbum item) + private void SetPeople(MusicAlbum item) { - var updateType = ItemUpdateType.None; - if (item.AlbumArtists.Any() || item.Artists.Any()) { var people = new List(); @@ -205,10 +214,7 @@ public class AlbumMetadataService : MetadataService } LibraryManager.UpdatePeople(item, people); - updateType |= ItemUpdateType.MetadataEdit; } - - return updateType; } ///