浏览代码

fixes #629 - Deleting a movie only deletes the video file

Luke Pulverenti 11 年之前
父节点
当前提交
7ac2f74817

+ 9 - 6
MediaBrowser.Api/LibraryService.cs

@@ -465,13 +465,16 @@ namespace MediaBrowser.Api
 
             if (item.LocationType == LocationType.FileSystem)
             {
-                if (Directory.Exists(item.Path))
+                foreach (var path in item.GetDeletePaths().ToList())
                 {
-                    Directory.Delete(item.Path, true);
-                }
-                else if (File.Exists(item.Path))
-                {
-                    File.Delete(item.Path);
+                    if (Directory.Exists(path))
+                    {
+                        Directory.Delete(path, true);
+                    }
+                    else if (File.Exists(path))
+                    {
+                        File.Delete(path);
+                    }
                 }
 
                 if (parent != null)

+ 9 - 0
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -1765,5 +1765,14 @@ namespace MediaBrowser.Controller.Entities
             // See if we can avoid a file system lookup by looking for the file in ResolveArgs
             return metaFileEntry == null ? FileSystem.GetLastWriteTimeUtc(imagePath) : FileSystem.GetLastWriteTimeUtc(metaFileEntry);
         }
+
+        /// <summary>
+        /// Gets the file system path to delete when the item is to be deleted
+        /// </summary>
+        /// <returns></returns>
+        public virtual IEnumerable<string> GetDeletePaths()
+        {
+            return new[] { Path };
+        }
     }
 }

+ 11 - 1
MediaBrowser.Controller/Entities/Game.cs

@@ -7,7 +7,7 @@ namespace MediaBrowser.Controller.Entities
     public class Game : BaseItem, IHasSoundtracks
     {
         public List<Guid> SoundtrackIds { get; set; }
-        
+
         public Game()
         {
             MultiPartGameFiles = new List<string>();
@@ -84,5 +84,15 @@ namespace MediaBrowser.Controller.Entities
             }
             return base.GetUserDataKey();
         }
+
+        public override IEnumerable<string> GetDeletePaths()
+        {
+            if (!IsInMixedFolder)
+            {
+                return new[] { System.IO.Path.GetDirectoryName(Path) };
+            }
+
+            return base.GetDeletePaths();
+        }
     }
 }

+ 5 - 0
MediaBrowser.Controller/Entities/TV/Episode.cs

@@ -248,5 +248,10 @@ namespace MediaBrowser.Controller.Entities.TV
         {
             get { return LocationType == Model.Entities.LocationType.Virtual && IsUnaired; }
         }
+
+        public override IEnumerable<string> GetDeletePaths()
+        {
+            return new[] { Path };
+        }
     }
 }

+ 9 - 0
MediaBrowser.Controller/Entities/Video.cs

@@ -258,5 +258,14 @@ namespace MediaBrowser.Controller.Entities
             }).ToList();
         }
 
+        public override IEnumerable<string> GetDeletePaths()
+        {
+            if (!IsInMixedFolder)
+            {
+                return new[] { System.IO.Path.GetDirectoryName(Path) };
+            }
+
+            return base.GetDeletePaths();
+        }
     }
 }