From 4a39df98cdd56505db5eea61d29509179cd9e48e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 19 Feb 2014 13:50:37 -0500 Subject: rework image extraction settings --- .../Library/LibraryManager.cs | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) (limited to 'MediaBrowser.Server.Implementations/Library/LibraryManager.cs') diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index a06e03c4a..656e0993f 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -408,6 +408,83 @@ namespace MediaBrowser.Server.Implementations.Library LibraryItemsCache.AddOrUpdate(item.Id, item, delegate { return item; }); } + public async Task DeleteItem(BaseItem item) + { + var parent = item.Parent; + + var locationType = item.LocationType; + + var children = item.IsFolder + ? ((Folder)item).RecursiveChildren.ToList() + : new List(); + + foreach (var metadataPath in GetMetadataPaths(item, children)) + { + _logger.Debug("Deleting path {0}", metadataPath); + + try + { + Directory.Delete(metadataPath, true); + } + catch (DirectoryNotFoundException) + { + + } + catch (Exception ex) + { + _logger.ErrorException("Error deleting {0}", ex, metadataPath); + } + } + + if (locationType == LocationType.FileSystem || locationType == LocationType.Offline) + { + foreach (var path in item.GetDeletePaths().ToList()) + { + if (Directory.Exists(path)) + { + _logger.Debug("Deleting path {0}", path); + Directory.Delete(path, true); + } + else if (File.Exists(path)) + { + _logger.Debug("Deleting path {0}", path); + File.Delete(path); + } + } + + if (parent != null) + { + await parent.ValidateChildren(new Progress(), CancellationToken.None) + .ConfigureAwait(false); + } + } + else if (parent != null) + { + await parent.RemoveChild(item, CancellationToken.None).ConfigureAwait(false); + } + else + { + throw new InvalidOperationException("Don't know how to delete " + item.Name); + } + + foreach (var child in children) + { + await ItemRepository.DeleteItem(child.Id, CancellationToken.None).ConfigureAwait(false); + } + } + + private IEnumerable GetMetadataPaths(BaseItem item, IEnumerable children) + { + var list = new List + { + ConfigurationManager.ApplicationPaths.GetInternalMetadataPath(item.Id) + }; + + list.AddRange(children.Select(i => ConfigurationManager.ApplicationPaths.GetInternalMetadataPath(i.Id))); + + return list; + } + /// /// Resolves the item. /// -- cgit v1.2.3