diff options
Diffstat (limited to 'MediaBrowser.Controller/Entities/Folder.cs')
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 1f13c833b..8bfcf5dee 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -331,8 +331,25 @@ namespace MediaBrowser.Controller.Entities } } + private static bool IsLibraryFolderAccessible(IDirectoryService directoryService, BaseItem item) + { + // For top parents i.e. Library folders, skip the validation if it's empty or inaccessible + if (item.IsTopParent && !directoryService.IsAccessible(item.ContainingFolderPath)) + { + Logger.LogWarning("Library folder {LibraryFolderPath} is inaccessible or empty, skipping", item.ContainingFolderPath); + return false; + } + + return true; + } + private async Task ValidateChildrenInternal2(IProgress<double> progress, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService, CancellationToken cancellationToken) { + if (!IsLibraryFolderAccessible(directoryService, this)) + { + return; + } + cancellationToken.ThrowIfCancellationRequested(); var validChildren = new List<BaseItem>(); @@ -369,6 +386,11 @@ namespace MediaBrowser.Controller.Entities foreach (var child in nonCachedChildren) { + if (!IsLibraryFolderAccessible(directoryService, child)) + { + continue; + } + if (currentChildren.TryGetValue(child.Id, out BaseItem currentChild)) { validChildren.Add(currentChild); @@ -392,8 +414,8 @@ namespace MediaBrowser.Controller.Entities validChildren.Add(child); } - // If any items were added or removed.... - if (newItems.Count > 0 || currentChildren.Count != validChildren.Count) + // If it's an AggregateFolder, don't remove + if (!IsRoot && currentChildren.Count != validChildren.Count) { // That's all the new and changed ones - now see if there are any that are missing var itemsRemoved = currentChildren.Values.Except(validChildren).ToList(); @@ -408,7 +430,10 @@ namespace MediaBrowser.Controller.Entities LibraryManager.DeleteItem(item, new DeleteOptions { DeleteFileLocation = false }, this, false); } } + } + if (newItems.Count > 0) + { LibraryManager.CreateItems(newItems, this, cancellationToken); } } @@ -435,15 +460,7 @@ namespace MediaBrowser.Controller.Entities progress.Report(percent); - // TODO: this is sometimes being called after the refresh has completed. - try - { - ProviderManager.OnRefreshProgress(folder, percent); - } - catch (InvalidOperationException e) - { - Logger.LogError(e, "Error refreshing folder"); - } + ProviderManager.OnRefreshProgress(folder, percent); }); if (validChildrenNeedGeneration) @@ -475,15 +492,7 @@ namespace MediaBrowser.Controller.Entities if (recursive) { - // TODO: this is sometimes being called after the refresh has completed. - try - { - ProviderManager.OnRefreshProgress(folder, percent); - } - catch (InvalidOperationException e) - { - Logger.LogError(e, "Error refreshing folder"); - } + ProviderManager.OnRefreshProgress(folder, percent); } }); |
