Przeglądaj źródła

Fix Library renaming

This handler should not just spawn a normal library validation task because our new logic will prevent the removal of library root folder unless explicitly required, which will cause the old lib still "ghosting" in the db.

Signed-off-by: gnattu <gnattuoc@me.com>
gnattu 1 rok temu
rodzic
commit
8683253c6d

+ 1 - 1
Emby.Server.Implementations/Library/LibraryManager.cs

@@ -1029,7 +1029,7 @@ namespace Emby.Server.Implementations.Library
             }
         }
 
-        private async Task ValidateTopLibraryFolders(CancellationToken cancellationToken, bool removeRoot = false)
+        public async Task ValidateTopLibraryFolders(CancellationToken cancellationToken, bool removeRoot = false)
         {
             await RootFolder.RefreshMetadata(cancellationToken).ConfigureAwait(false);
 

+ 15 - 1
Jellyfin.Api/Controllers/LibraryStructureController.cs

@@ -180,7 +180,21 @@ public class LibraryStructureController : BaseJellyfinApiController
                 // No need to start if scanning the library because it will handle it
                 if (refreshLibrary)
                 {
-                    await _libraryManager.ValidateMediaLibrary(new Progress<double>(), CancellationToken.None).ConfigureAwait(false);
+                    await _libraryManager.ValidateTopLibraryFolders(CancellationToken.None, true).ConfigureAwait(false);
+                    var newLib = _libraryManager.GetUserRootFolder().Children.FirstOrDefault(f => f.Path.Equals(newPath, StringComparison.OrdinalIgnoreCase));
+                    if (newLib is CollectionFolder folder)
+                    {
+                        foreach (var child in folder.GetPhysicalFolders())
+                        {
+                            await child.RefreshMetadata(CancellationToken.None).ConfigureAwait(false);
+                            await child.ValidateChildren(new Progress<double>(), CancellationToken.None).ConfigureAwait(false);
+                        }
+                    }
+                    else
+                    {
+                        // We don't know if this one can be validated individually, trigger a new validation
+                        await _libraryManager.ValidateMediaLibrary(new Progress<double>(), CancellationToken.None).ConfigureAwait(false);
+                    }
                 }
                 else
                 {

+ 8 - 0
MediaBrowser.Controller/Library/ILibraryManager.cs

@@ -149,6 +149,14 @@ namespace MediaBrowser.Controller.Library
         /// <returns>Task.</returns>
         Task ValidateMediaLibrary(IProgress<double> progress, CancellationToken cancellationToken);
 
+        /// <summary>
+        /// Reloads the root media folder.
+        /// </summary>
+        /// <param name="cancellationToken">The cancellation token.</param>
+        /// <param name="removeRoot">Is remove the library itself allowed.</param>
+        /// <returns>Task.</returns>
+        Task ValidateTopLibraryFolders(CancellationToken cancellationToken, bool removeRoot = false);
+
         Task UpdateImagesAsync(BaseItem item, bool forceUpdate = false);
 
         /// <summary>