diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 05ab35d9a..154765325 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -263,11 +263,12 @@ namespace MediaBrowser.Controller.Entities try { LazyInitializer.EnsureInitialized(ref _resolveArgs, ref _resolveArgsInitialized, ref _resolveArgsSyncLock, () => CreateResolveArgs()); - } catch (IOException ex) { - Logger.ErrorException("Error creating resolve args for ", ex, Path); + Logger.ErrorException("Error creating resolve args for {0}", ex, Path); + + IsOffline = true; throw; } @@ -300,8 +301,7 @@ namespace MediaBrowser.Controller.Entities { var path = Path; - // non file-system entries will not have a path - if (LocationType != LocationType.FileSystem || string.IsNullOrEmpty(path)) + if (LocationType == LocationType.Remote || LocationType == LocationType.Virtual) { return new ItemResolveArgs(ConfigurationManager.ApplicationPaths); } @@ -314,24 +314,13 @@ namespace MediaBrowser.Controller.Entities isDirectory = true; } - try - { - pathInfo = pathInfo ?? (isDirectory ? new DirectoryInfo(path) : FileSystem.GetFileSystemInfo(path)); - } - catch (IOException) - { - IsOffline = true; - throw; - } + pathInfo = pathInfo ?? (isDirectory ? new DirectoryInfo(path) : FileSystem.GetFileSystemInfo(path)); if (pathInfo == null || !pathInfo.Exists) { - IsOffline = true; throw new IOException("Unable to retrieve file system info for " + path); } - IsOffline = false; - var args = new ItemResolveArgs(ConfigurationManager.ApplicationPaths) { FileInfo = pathInfo, @@ -367,6 +356,8 @@ namespace MediaBrowser.Controller.Entities //update our dates EntityResolutionHelper.EnsureDates(this, args); + IsOffline = false; + return args; } diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index f0ea63b29..77500808c 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Extensions; +using System.Collections; +using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Progress; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; @@ -645,8 +646,18 @@ namespace MediaBrowser.Controller.Entities cancellationToken.ThrowIfCancellationRequested(); - //get the current valid children from filesystem (or wherever) - var nonCachedChildren = IsOffline ? new BaseItem[] { } : GetNonCachedChildren(); + IEnumerable nonCachedChildren; + + try + { + nonCachedChildren = GetNonCachedChildren(); + } + catch (IOException ex) + { + nonCachedChildren = new BaseItem[] { }; + + Logger.ErrorException("Error getting file system entries for {0}", ex, Path); + } if (nonCachedChildren == null) return; //nothing to validate @@ -685,6 +696,8 @@ namespace MediaBrowser.Controller.Entities { validChildren.Add(new Tuple(currentChild, false)); } + + currentChild.IsOffline = false; } else { @@ -707,6 +720,8 @@ namespace MediaBrowser.Controller.Entities { if (IsRootPathAvailable(item.Path)) { + item.IsOffline = false; + BaseItem removed; if (!_children.TryRemove(item.Id, out removed)) @@ -717,7 +732,6 @@ namespace MediaBrowser.Controller.Entities { LibraryManager.ReportItemRemoved(item); } - item.IsOffline = false; } else { @@ -854,6 +868,11 @@ namespace MediaBrowser.Controller.Entities /// private bool IsRootPathAvailable(string path) { + if (File.Exists(path)) + { + return true; + } + // Depending on whether the path is local or unc, it may return either null or '\' at the top while (!string.IsNullOrEmpty(path) && path.Length > 1) { @@ -874,19 +893,13 @@ namespace MediaBrowser.Controller.Entities /// IEnumerable{BaseItem}. protected virtual IEnumerable GetNonCachedChildren() { - IEnumerable fileSystemChildren; - try + if (ResolveArgs == null || ResolveArgs.FileSystemDictionary == null) { - fileSystemChildren = ResolveArgs.FileSystemChildren; - } - catch (IOException ex) - { - Logger.ErrorException("Error getting ResolveArgs for {0}", ex, Path); - return new List(); + Logger.Error("Null for {0}", Path); } - return LibraryManager.ResolvePaths(fileSystemChildren, this); + return LibraryManager.ResolvePaths(ResolveArgs.FileSystemChildren, this); } ///