beginnings of offline support

This commit is contained in:
Luke Pulverenti 2013-07-05 10:54:14 -04:00
parent ae559e0ed1
commit dc21adf1a4
4 changed files with 71 additions and 13 deletions

View File

@ -89,6 +89,9 @@ namespace MediaBrowser.Controller.Entities
/// <value>The path.</value> /// <value>The path.</value>
public virtual string Path { get; set; } public virtual string Path { get; set; }
[IgnoreDataMember]
protected internal bool IsOffline { get; set; }
/// <summary> /// <summary>
/// Gets or sets the type of the location. /// Gets or sets the type of the location.
/// </summary> /// </summary>
@ -97,6 +100,11 @@ namespace MediaBrowser.Controller.Entities
{ {
get get
{ {
if (IsOffline)
{
return LocationType.Offline;
}
if (string.IsNullOrEmpty(Path)) if (string.IsNullOrEmpty(Path))
{ {
return LocationType.Virtual; return LocationType.Virtual;
@ -648,6 +656,8 @@ namespace MediaBrowser.Controller.Entities
// Support xbmc trailers (-trailer suffix on video file names) // Support xbmc trailers (-trailer suffix on video file names)
files.AddRange(resolveArgs.FileSystemChildren.Where(i => files.AddRange(resolveArgs.FileSystemChildren.Where(i =>
{
try
{ {
if ((i.Attributes & FileAttributes.Directory) != FileAttributes.Directory) if ((i.Attributes & FileAttributes.Directory) != FileAttributes.Directory)
{ {
@ -656,6 +666,11 @@ namespace MediaBrowser.Controller.Entities
return true; return true;
} }
} }
}
catch (IOException ex)
{
Logger.ErrorException("Error accessing path {0}", ex, i.FullName);
}
return false; return false;
})); }));

View File

@ -702,6 +702,8 @@ namespace MediaBrowser.Controller.Entities
var itemsRemoved = currentChildren.Values.Except(newChildren).ToList(); var itemsRemoved = currentChildren.Values.Except(newChildren).ToList();
foreach (var item in itemsRemoved) foreach (var item in itemsRemoved)
{
if (IsRootPathAvailable(item.Path))
{ {
BaseItem removed; BaseItem removed;
@ -713,6 +715,12 @@ namespace MediaBrowser.Controller.Entities
{ {
LibraryManager.ReportItemRemoved(item); LibraryManager.ReportItemRemoved(item);
} }
item.IsOffline = false;
}
else
{
item.IsOffline = true;
}
} }
await LibraryManager.CreateItems(newItems, cancellationToken).ConfigureAwait(false); await LibraryManager.CreateItems(newItems, cancellationToken).ConfigureAwait(false);
@ -835,6 +843,28 @@ namespace MediaBrowser.Controller.Entities
await Task.WhenAll(tasks).ConfigureAwait(false); await Task.WhenAll(tasks).ConfigureAwait(false);
} }
/// <summary>
/// Determines if a path's root is available or not
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
private bool IsRootPathAvailable(string path)
{
var parent = System.IO.Path.GetDirectoryName(path);
while (!string.IsNullOrEmpty(parent) && !parent.ToCharArray()[0].Equals(System.IO.Path.DirectorySeparatorChar))
{
if (Directory.Exists(parent))
{
return true;
}
parent = System.IO.Path.GetDirectoryName(path);
}
return false;
}
/// <summary> /// <summary>
/// Get the children of this folder from the actual file system /// Get the children of this folder from the actual file system
/// </summary> /// </summary>
@ -973,7 +1003,7 @@ namespace MediaBrowser.Controller.Entities
{ {
var changed = await base.RefreshMetadata(cancellationToken, forceSave, forceRefresh, allowSlowProviders, resetResolveArgs).ConfigureAwait(false); var changed = await base.RefreshMetadata(cancellationToken, forceSave, forceRefresh, allowSlowProviders, resetResolveArgs).ConfigureAwait(false);
return changed || (SupportsLinkedChildren && RefreshLinkedChildren()); return changed || (SupportsLinkedChildren && LocationType == LocationType.FileSystem && RefreshLinkedChildren());
} }
/// <summary> /// <summary>

View File

@ -389,6 +389,8 @@ namespace MediaBrowser.Controller.Providers
/// <param name="extensions">The extensions.</param> /// <param name="extensions">The extensions.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
private bool IncludeInFileStamp(FileSystemInfo file, string[] extensions) private bool IncludeInFileStamp(FileSystemInfo file, string[] extensions)
{
try
{ {
if ((file.Attributes & FileAttributes.Directory) == FileAttributes.Directory) if ((file.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
{ {
@ -397,5 +399,12 @@ namespace MediaBrowser.Controller.Providers
return extensions.Length == 0 || extensions.Contains(file.Extension, StringComparer.OrdinalIgnoreCase); return extensions.Length == 0 || extensions.Contains(file.Extension, StringComparer.OrdinalIgnoreCase);
} }
catch (IOException ex)
{
Logger.ErrorException("Error accessing file attributes for {0}", ex, file.FullName);
return false;
}
}
} }
} }

View File

@ -17,6 +17,10 @@ namespace MediaBrowser.Model.Entities
/// <summary> /// <summary>
/// The virtual /// The virtual
/// </summary> /// </summary>
Virtual Virtual,
/// <summary>
/// The offline
/// </summary>
Offline
} }
} }