Tim Eisele 1 тиждень тому
батько
коміт
9f0f9a276f

+ 22 - 14
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<Person>(path),
-                        DateCreated = info.CreationTimeUtc,
-                        DateModified = lastWriteTime,
-                        Path = path
-                    };
-
-                    personEntity.PresentationUniqueKey = personEntity.CreatePresentationUniqueKey();
-                    saveEntity = true;
-                    createEntity = true;
+                        var path = Person.GetPath(person.Name);
+                        var info = Directory.CreateDirectory(path);
+                        var lastWriteTime = info.LastWriteTimeUtc;
+                        personEntity = new Person()
+                        {
+                            Name = person.Name,
+                            Id = GetItemByNameId<Person>(path),
+                            DateCreated = info.CreationTimeUtc,
+                            DateModified = lastWriteTime,
+                            Path = path
+                        };
+
+                        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)

+ 1 - 2
MediaBrowser.Providers/Manager/MetadataService.cs

@@ -262,14 +262,13 @@ namespace MediaBrowser.Providers.Manager
 
         protected async Task SaveItemAsync(MetadataResult<TItemType> 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)

+ 13 - 7
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<MusicAlbum, AlbumInfo>
     protected override IReadOnlyList<BaseItem> GetChildrenForMetadataUpdates(MusicAlbum item)
         => item.GetRecursiveChildren(i => i is Audio);
 
+    /// <inheritdoc />
+    protected override Task AfterMetadataRefresh(MusicAlbum item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
+    {
+        base.AfterMetadataRefresh(item, refreshOptions, cancellationToken);
+
+        SetPeople(item);
+
+        return Task.CompletedTask;
+    }
+
     /// <inheritdoc />
     protected override ItemUpdateType UpdateMetadataFromChildren(MusicAlbum item, IReadOnlyList<BaseItem> children, bool isFullRefresh, ItemUpdateType currentUpdateType)
     {
@@ -83,7 +95,6 @@ public class AlbumMetadataService : MetadataService<MusicAlbum, AlbumInfo>
             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<MusicAlbum, AlbumInfo>
         }
     }
 
-    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<PersonInfo>();
@@ -205,10 +214,7 @@ public class AlbumMetadataService : MetadataService<MusicAlbum, AlbumInfo>
             }
 
             LibraryManager.UpdatePeople(item, people);
-            updateType |= ItemUpdateType.MetadataEdit;
         }
-
-        return updateType;
     }
 
     /// <inheritdoc />