瀏覽代碼

move media path methods to core

Luke Pulverenti 9 年之前
父節點
當前提交
107d1fc4f1

+ 0 - 35
MediaBrowser.Api/Library/LibraryHelpers.cs

@@ -50,40 +50,5 @@ namespace MediaBrowser.Api.Library
                 fileSystem.DeleteFile(shortcut);
                 fileSystem.DeleteFile(shortcut);
             }
             }
         }
         }
-
-        /// <summary>
-        /// Adds an additional mediaPath to an existing virtual folder, within either the default view or a user view
-        /// </summary>
-        /// <param name="fileSystem">The file system.</param>
-        /// <param name="virtualFolderName">Name of the virtual folder.</param>
-        /// <param name="path">The path.</param>
-        /// <param name="appPaths">The app paths.</param>
-        public static void AddMediaPath(IFileSystem fileSystem, string virtualFolderName, string path, IServerApplicationPaths appPaths)
-        {
-            if (string.IsNullOrWhiteSpace(path))
-            {
-                throw new ArgumentNullException("path");
-            }
-
-			if (!fileSystem.DirectoryExists(path))
-            {
-                throw new DirectoryNotFoundException("The path does not exist.");
-            }
-
-            var rootFolderPath = appPaths.DefaultUserViewsPath;
-            var virtualFolderPath = Path.Combine(rootFolderPath, virtualFolderName);
-
-            var shortcutFilename = fileSystem.GetFileNameWithoutExtension(path);
-
-            var lnk = Path.Combine(virtualFolderPath, shortcutFilename + ShortcutFileExtension);
-
-			while (fileSystem.FileExists(lnk))
-            {
-                shortcutFilename += "1";
-                lnk = Path.Combine(virtualFolderPath, shortcutFilename + ShortcutFileExtension);
-            }
-
-            fileSystem.CreateShortcut(lnk, path);
-        }
     }
     }
 }
 }

+ 2 - 70
MediaBrowser.Api/Library/LibraryStructureService.cs

@@ -190,75 +190,7 @@ namespace MediaBrowser.Api.Library
         /// <param name="request">The request.</param>
         /// <param name="request">The request.</param>
         public void Post(AddVirtualFolder request)
         public void Post(AddVirtualFolder request)
         {
         {
-            if (string.IsNullOrWhiteSpace(request.Name))
-            {
-                throw new ArgumentNullException("request");
-            }
-
-            var name = _fileSystem.GetValidFilename(request.Name);
-
-            var rootFolderPath = _appPaths.DefaultUserViewsPath;
-
-            var virtualFolderPath = Path.Combine(rootFolderPath, name);
-            while (_fileSystem.DirectoryExists(virtualFolderPath))
-            {
-                name += "1";
-                virtualFolderPath = Path.Combine(rootFolderPath, name);
-            }
-
-            if (request.Paths != null)
-            {
-                var invalidpath = request.Paths.FirstOrDefault(i => !_fileSystem.DirectoryExists(i));
-                if (invalidpath != null)
-                {
-                    throw new ArgumentException("The specified path does not exist: " + invalidpath + ".");
-                }
-            }
-            
-            _libraryMonitor.Stop();
-
-            try
-            {
-				_fileSystem.CreateDirectory(virtualFolderPath);
-
-                if (!string.IsNullOrEmpty(request.CollectionType))
-                {
-                    var path = Path.Combine(virtualFolderPath, request.CollectionType + ".collection");
-
-                    using (File.Create(path))
-                    {
-
-                    }
-                }
-
-                if (request.Paths != null)
-                {
-                    foreach (var path in request.Paths)
-                    {
-                        LibraryHelpers.AddMediaPath(_fileSystem, name, path, _appPaths);
-                    }
-                }
-            }
-            finally
-            {
-                Task.Run(() =>
-                {
-                    // No need to start if scanning the library because it will handle it
-                    if (request.RefreshLibrary)
-                    {
-                        _libraryManager.ValidateMediaLibrary(new Progress<double>(), CancellationToken.None);
-                    }
-                    else
-                    {
-                        // Need to add a delay here or directory watchers may still pick up the changes
-                        var task = Task.Delay(1000);
-                        // Have to block here to allow exceptions to bubble
-                        Task.WaitAll(task);
-                        
-                        _libraryMonitor.Start();
-                    }
-                });
-            }
+            _libraryManager.AddVirtualFolder(request.Name, request.CollectionType, request.Paths, request.RefreshLibrary);
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -393,7 +325,7 @@ namespace MediaBrowser.Api.Library
 
 
             try
             try
             {
             {
-                LibraryHelpers.AddMediaPath(_fileSystem, request.Name, request.Path, _appPaths);
+                _libraryManager.AddMediaPath(request.Name, request.Path);
             }
             }
             finally
             finally
             {
             {

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

@@ -569,5 +569,8 @@ namespace MediaBrowser.Controller.Library
         /// <param name="parent">The parent.</param>
         /// <param name="parent">The parent.</param>
         /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
         /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
         bool IgnoreFile(FileSystemMetadata file, BaseItem parent);
         bool IgnoreFile(FileSystemMetadata file, BaseItem parent);
+
+        void AddVirtualFolder(string name, string collectionType, string[] mediaPaths, bool refreshLibrary);
+        void AddMediaPath(string virtualFolderName, string path);
     }
     }
 }
 }

+ 111 - 4
MediaBrowser.Server.Implementations/Library/LibraryManager.cs

@@ -952,10 +952,15 @@ namespace MediaBrowser.Server.Implementations.Library
 
 
             if (isArtist)
             if (isArtist)
             {
             {
-                var existing = RootFolder
-                    .GetRecursiveChildren(i => i is T && NameExtensions.AreEqual(i.Name, name))
-                    .Cast<T>()
-                    .FirstOrDefault();
+                var existing = GetItemList(new InternalItemsQuery
+                {
+                    IncludeItemTypes = new[] { typeof(T).Name },
+                    Name = name
+
+                }).Cast<MusicArtist>()
+                .Where(i => !i.IsAccessedByName)
+                .Cast<T>()
+                .FirstOrDefault();
 
 
                 if (existing != null)
                 if (existing != null)
                 {
                 {
@@ -2558,5 +2563,107 @@ namespace MediaBrowser.Server.Implementations.Library
 
 
             throw new InvalidOperationException();
             throw new InvalidOperationException();
         }
         }
+
+        public void AddVirtualFolder(string name, string collectionType, string[] mediaPaths, bool refreshLibrary)
+        {
+            if (string.IsNullOrWhiteSpace(name))
+            {
+                throw new ArgumentNullException("name");
+            }
+
+             name = _fileSystem.GetValidFilename(name);
+            
+            var rootFolderPath = ConfigurationManager.ApplicationPaths.DefaultUserViewsPath;
+
+            var virtualFolderPath = Path.Combine(rootFolderPath, name);
+            while (_fileSystem.DirectoryExists(virtualFolderPath))
+            {
+                name += "1";
+                virtualFolderPath = Path.Combine(rootFolderPath, name);
+            }
+
+            if (mediaPaths != null)
+            {
+                var invalidpath = mediaPaths.FirstOrDefault(i => !_fileSystem.DirectoryExists(i));
+                if (invalidpath != null)
+                {
+                    throw new ArgumentException("The specified path does not exist: " + invalidpath + ".");
+                }
+            }
+
+            _libraryMonitorFactory().Stop();
+
+            try
+            {
+                _fileSystem.CreateDirectory(virtualFolderPath);
+
+                if (!string.IsNullOrEmpty(collectionType))
+                {
+                    var path = Path.Combine(virtualFolderPath, collectionType + ".collection");
+
+                    using (File.Create(path))
+                    {
+
+                    }
+                }
+
+                if (mediaPaths != null)
+                {
+                    foreach (var path in mediaPaths)
+                    {
+                        AddMediaPath(name, path);
+                    }
+                }
+            }
+            finally
+            {
+                Task.Run(() =>
+                {
+                    // No need to start if scanning the library because it will handle it
+                    if (refreshLibrary)
+                    {
+                        ValidateMediaLibrary(new Progress<double>(), CancellationToken.None);
+                    }
+                    else
+                    {
+                        // Need to add a delay here or directory watchers may still pick up the changes
+                        var task = Task.Delay(1000);
+                        // Have to block here to allow exceptions to bubble
+                        Task.WaitAll(task);
+
+                        _libraryMonitorFactory().Start();
+                    }
+                });
+            }
+        }
+
+        private const string ShortcutFileExtension = ".mblink";
+        public void AddMediaPath(string virtualFolderName, string path)
+        {
+            if (string.IsNullOrWhiteSpace(path))
+            {
+                throw new ArgumentNullException("path");
+            }
+
+            if (!_fileSystem.DirectoryExists(path))
+            {
+                throw new DirectoryNotFoundException("The path does not exist.");
+            }
+
+            var rootFolderPath = ConfigurationManager.ApplicationPaths.DefaultUserViewsPath;
+            var virtualFolderPath = Path.Combine(rootFolderPath, virtualFolderName);
+
+            var shortcutFilename = _fileSystem.GetFileNameWithoutExtension(path);
+
+            var lnk = Path.Combine(virtualFolderPath, shortcutFilename + ShortcutFileExtension);
+
+            while (_fileSystem.FileExists(lnk))
+            {
+                shortcutFilename += "1";
+                lnk = Path.Combine(virtualFolderPath, shortcutFilename + ShortcutFileExtension);
+            }
+
+            _fileSystem.CreateShortcut(lnk, path);
+        }
     }
     }
 }
 }