Bläddra i källkod

Offline fixes

Luke Pulverenti 12 år sedan
förälder
incheckning
d62e63acb8
2 ändrade filer med 33 tillägg och 29 borttagningar
  1. 7 16
      MediaBrowser.Controller/Entities/BaseItem.cs
  2. 26 13
      MediaBrowser.Controller/Entities/Folder.cs

+ 7 - 16
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;
         }
 

+ 26 - 13
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<BaseItem> 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<BaseItem, bool>(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
         /// <returns></returns>
         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
         /// <returns>IEnumerable{BaseItem}.</returns>
         protected virtual IEnumerable<BaseItem> GetNonCachedChildren()
         {
-            IEnumerable<FileSystemInfo> 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<BaseItem>();
+                Logger.Error("Null for {0}", Path);
             }
 
-            return LibraryManager.ResolvePaths<BaseItem>(fileSystemChildren, this);
+            return LibraryManager.ResolvePaths<BaseItem>(ResolveArgs.FileSystemChildren, this);
         }
 
         /// <summary>