fixes #200 - MB3 Locking Folders for a long time

This commit is contained in:
Luke Pulverenti
2013-04-28 01:29:27 -04:00
parent 90bb3d46c4
commit b443d591a2
33 changed files with 254 additions and 405 deletions

View File

@@ -1,4 +1,5 @@
using MediaBrowser.Controller.Entities;
using System.IO;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Resolvers;
@@ -40,7 +41,7 @@ namespace MediaBrowser.Controller.Library
/// <param name="fileInfo">The file info.</param>
/// <returns>BaseItem.</returns>
/// <exception cref="System.ArgumentNullException"></exception>
BaseItem ResolvePath(string path, Folder parent = null, WIN32_FIND_DATA? fileInfo = null);
BaseItem ResolvePath(string path, Folder parent = null, FileSystemInfo fileInfo = null);
/// <summary>
/// Resolves a set of files into a list of BaseItem
@@ -49,7 +50,7 @@ namespace MediaBrowser.Controller.Library
/// <param name="files">The files.</param>
/// <param name="parent">The parent.</param>
/// <returns>List{``0}.</returns>
List<T> ResolvePaths<T>(IEnumerable<WIN32_FIND_DATA> files, Folder parent)
List<T> ResolvePaths<T>(IEnumerable<FileSystemInfo> files, Folder parent)
where T : BaseItem;
/// <summary>

View File

@@ -31,7 +31,7 @@ namespace MediaBrowser.Controller.Library
/// Gets the file system children.
/// </summary>
/// <value>The file system children.</value>
public IEnumerable<WIN32_FIND_DATA> FileSystemChildren
public IEnumerable<FileSystemInfo> FileSystemChildren
{
get { return FileSystemDictionary.Values; }
}
@@ -40,7 +40,7 @@ namespace MediaBrowser.Controller.Library
/// Gets or sets the file system dictionary.
/// </summary>
/// <value>The file system dictionary.</value>
public Dictionary<string, WIN32_FIND_DATA> FileSystemDictionary { get; set; }
public Dictionary<string, FileSystemInfo> FileSystemDictionary { get; set; }
/// <summary>
/// Gets or sets the parent.
@@ -52,7 +52,7 @@ namespace MediaBrowser.Controller.Library
/// Gets or sets the file info.
/// </summary>
/// <value>The file info.</value>
public WIN32_FIND_DATA FileInfo { get; set; }
public FileSystemInfo FileInfo { get; set; }
/// <summary>
/// Gets or sets the path.
@@ -68,7 +68,7 @@ namespace MediaBrowser.Controller.Library
{
get
{
return FileInfo.dwFileAttributes.HasFlag(FileAttributes.Directory);
return FileInfo.Attributes.HasFlag(FileAttributes.Directory);
}
}
@@ -80,7 +80,7 @@ namespace MediaBrowser.Controller.Library
{
get
{
return FileInfo.IsHidden;
return FileInfo.Attributes.HasFlag(FileAttributes.Hidden);
}
}
@@ -92,7 +92,7 @@ namespace MediaBrowser.Controller.Library
{
get
{
return FileInfo.IsSystemFile;
return FileInfo.Attributes.HasFlag(FileAttributes.System);
}
}
@@ -112,7 +112,7 @@ namespace MediaBrowser.Controller.Library
return false;
}
var parentDir = FileInfo.Path != null ? System.IO.Path.GetDirectoryName(FileInfo.Path) ?? string.Empty : string.Empty;
var parentDir = System.IO.Path.GetDirectoryName(FileInfo.FullName) ?? string.Empty;
return (parentDir.Length > _appPaths.RootFolderPath.Length
&& parentDir.StartsWith(_appPaths.RootFolderPath, StringComparison.OrdinalIgnoreCase));
@@ -187,13 +187,13 @@ namespace MediaBrowser.Controller.Library
/// Store these to reduce disk access in Resolvers
/// </summary>
/// <value>The metadata file dictionary.</value>
private Dictionary<string, WIN32_FIND_DATA> MetadataFileDictionary { get; set; }
private Dictionary<string, FileSystemInfo> MetadataFileDictionary { get; set; }
/// <summary>
/// Gets the metadata files.
/// </summary>
/// <value>The metadata files.</value>
public IEnumerable<WIN32_FIND_DATA> MetadataFiles
public IEnumerable<FileSystemInfo> MetadataFiles
{
get
{
@@ -202,7 +202,7 @@ namespace MediaBrowser.Controller.Library
return MetadataFileDictionary.Values;
}
return new WIN32_FIND_DATA[] {};
return new FileSystemInfo[] { };
}
}
@@ -213,21 +213,21 @@ namespace MediaBrowser.Controller.Library
/// <exception cref="System.IO.FileNotFoundException"></exception>
public void AddMetadataFile(string path)
{
var file = FileSystem.GetFileData(path);
var file = FileSystem.GetFileSystemInfo(path);
if (!file.HasValue)
if (!file.Exists)
{
throw new FileNotFoundException(path);
}
AddMetadataFile(file.Value);
AddMetadataFile(file);
}
/// <summary>
/// Adds the metadata file.
/// </summary>
/// <param name="fileInfo">The file info.</param>
public void AddMetadataFile(WIN32_FIND_DATA fileInfo)
public void AddMetadataFile(FileSystemInfo fileInfo)
{
AddMetadataFiles(new[] { fileInfo });
}
@@ -237,7 +237,7 @@ namespace MediaBrowser.Controller.Library
/// </summary>
/// <param name="files">The files.</param>
/// <exception cref="System.ArgumentNullException"></exception>
public void AddMetadataFiles(IEnumerable<WIN32_FIND_DATA> files)
public void AddMetadataFiles(IEnumerable<FileSystemInfo> files)
{
if (files == null)
{
@@ -246,11 +246,11 @@ namespace MediaBrowser.Controller.Library
if (MetadataFileDictionary == null)
{
MetadataFileDictionary = new Dictionary<string, WIN32_FIND_DATA>(StringComparer.OrdinalIgnoreCase);
MetadataFileDictionary = new Dictionary<string, FileSystemInfo>(StringComparer.OrdinalIgnoreCase);
}
foreach (var file in files)
{
MetadataFileDictionary[file.cFileName] = file;
MetadataFileDictionary[file.Name] = file;
}
}
@@ -258,9 +258,9 @@ namespace MediaBrowser.Controller.Library
/// Gets the name of the file system entry by.
/// </summary>
/// <param name="name">The name.</param>
/// <returns>System.Nullable{WIN32_FIND_DATA}.</returns>
/// <returns>FileSystemInfo.</returns>
/// <exception cref="System.ArgumentNullException"></exception>
public WIN32_FIND_DATA? GetFileSystemEntryByName(string name)
public FileSystemInfo GetFileSystemEntryByName(string name)
{
if (string.IsNullOrEmpty(name))
{
@@ -274,9 +274,9 @@ namespace MediaBrowser.Controller.Library
/// Gets the file system entry by path.
/// </summary>
/// <param name="path">The path.</param>
/// <returns>System.Nullable{WIN32_FIND_DATA}.</returns>
/// <returns>FileSystemInfo.</returns>
/// <exception cref="System.ArgumentNullException"></exception>
public WIN32_FIND_DATA? GetFileSystemEntryByPath(string path)
public FileSystemInfo GetFileSystemEntryByPath(string path)
{
if (string.IsNullOrEmpty(path))
{
@@ -285,7 +285,7 @@ namespace MediaBrowser.Controller.Library
if (FileSystemDictionary != null)
{
WIN32_FIND_DATA entry;
FileSystemInfo entry;
if (FileSystemDictionary.TryGetValue(path, out entry))
{
@@ -300,9 +300,9 @@ namespace MediaBrowser.Controller.Library
/// Gets the meta file by path.
/// </summary>
/// <param name="path">The path.</param>
/// <returns>System.Nullable{WIN32_FIND_DATA}.</returns>
/// <returns>FileSystemInfo.</returns>
/// <exception cref="System.ArgumentNullException"></exception>
public WIN32_FIND_DATA? GetMetaFileByPath(string path)
public FileSystemInfo GetMetaFileByPath(string path)
{
if (string.IsNullOrEmpty(path))
{
@@ -311,7 +311,7 @@ namespace MediaBrowser.Controller.Library
if (MetadataFileDictionary != null)
{
WIN32_FIND_DATA entry;
FileSystemInfo entry;
if (MetadataFileDictionary.TryGetValue(System.IO.Path.GetFileName(path), out entry))
{
@@ -326,9 +326,9 @@ namespace MediaBrowser.Controller.Library
/// Gets the name of the meta file by.
/// </summary>
/// <param name="name">The name.</param>
/// <returns>System.Nullable{WIN32_FIND_DATA}.</returns>
/// <returns>FileSystemInfo.</returns>
/// <exception cref="System.ArgumentNullException"></exception>
public WIN32_FIND_DATA? GetMetaFileByName(string name)
public FileSystemInfo GetMetaFileByName(string name)
{
if (string.IsNullOrEmpty(name))
{
@@ -337,7 +337,7 @@ namespace MediaBrowser.Controller.Library
if (MetadataFileDictionary != null)
{
WIN32_FIND_DATA entry;
FileSystemInfo entry;
if (MetadataFileDictionary.TryGetValue(name, out entry))
{
@@ -355,7 +355,7 @@ namespace MediaBrowser.Controller.Library
/// <returns><c>true</c> if [contains meta file by name] [the specified name]; otherwise, <c>false</c>.</returns>
public bool ContainsMetaFileByName(string name)
{
return GetMetaFileByName(name).HasValue;
return GetMetaFileByName(name) != null;
}
/// <summary>
@@ -365,7 +365,7 @@ namespace MediaBrowser.Controller.Library
/// <returns><c>true</c> if [contains file system entry by name] [the specified name]; otherwise, <c>false</c>.</returns>
public bool ContainsFileSystemEntryByName(string name)
{
return GetFileSystemEntryByName(name).HasValue;
return GetFileSystemEntryByName(name) != null;
}
#region Equality Overrides

View File

@@ -1,4 +1,5 @@
using MediaBrowser.Controller.IO;
using System.IO;
using MediaBrowser.Controller.IO;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -154,21 +155,21 @@ namespace MediaBrowser.Controller.Library
/// <param name="path">The path.</param>
/// <param name="fileSystemChildren">The file system children.</param>
/// <returns><c>true</c> if [is series folder] [the specified path]; otherwise, <c>false</c>.</returns>
public static bool IsSeriesFolder(string path, IEnumerable<WIN32_FIND_DATA> fileSystemChildren)
public static bool IsSeriesFolder(string path, IEnumerable<FileSystemInfo> fileSystemChildren)
{
// A folder with more than 3 non-season folders in will not becounted as a series
var nonSeriesFolders = 0;
foreach (var child in fileSystemChildren)
{
if (child.IsHidden || child.IsSystemFile)
if (child.Attributes.HasFlag(FileAttributes.Hidden) || child.Attributes.HasFlag(FileAttributes.System))
{
continue;
}
if (child.IsDirectory)
if (child.Attributes.HasFlag(FileAttributes.Directory))
{
if (IsSeasonFolder(child.Path))
if (IsSeasonFolder(child.FullName))
{
return true;
}
@@ -182,8 +183,8 @@ namespace MediaBrowser.Controller.Library
}
else
{
if (EntityResolutionHelper.IsVideoFile(child.Path) &&
!string.IsNullOrEmpty(EpisodeNumberFromFile(child.Path, false)))
if (EntityResolutionHelper.IsVideoFile(child.FullName) &&
!string.IsNullOrEmpty(EpisodeNumberFromFile(child.FullName, false)))
{
return true;
}