aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-04-28 01:29:27 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-04-28 01:29:27 -0400
commitb443d591a29bc18daea36a3871908a4c1c277990 (patch)
tree9f671e0484c1b42bd5cecfe58a4d7cc3e7a6ddc7
parent90bb3d46c416676105d5cf89d12279b3f7ccb944 (diff)
fixes #200 - MB3 Locking Folders for a long time
-rw-r--r--MediaBrowser.Api/EnvironmentService.cs2
-rw-r--r--MediaBrowser.Api/Playback/Hls/BaseHlsService.cs2
-rw-r--r--MediaBrowser.Controller/Drawing/ImageManager.cs4
-rw-r--r--MediaBrowser.Controller/Dto/DtoBuilder.cs2
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs31
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Movies/Movie.cs6
-rw-r--r--MediaBrowser.Controller/Entities/TV/Season.cs7
-rw-r--r--MediaBrowser.Controller/Entities/TV/Series.cs5
-rw-r--r--MediaBrowser.Controller/IO/FileData.cs90
-rw-r--r--MediaBrowser.Controller/IO/FileSystem.cs159
-rw-r--r--MediaBrowser.Controller/Library/ILibraryManager.cs7
-rw-r--r--MediaBrowser.Controller/Library/ItemResolveArgs.cs60
-rw-r--r--MediaBrowser.Controller/Library/TVUtils.cs15
-rw-r--r--MediaBrowser.Controller/Providers/FolderProviderFromXml.cs6
-rw-r--r--MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs59
-rw-r--r--MediaBrowser.Controller/Providers/ImagesByNameProvider.cs62
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs9
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs6
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs6
-rw-r--r--MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs2
-rw-r--r--MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs6
-rw-r--r--MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs13
-rw-r--r--MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs6
-rw-r--r--MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs6
-rw-r--r--MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs14
-rw-r--r--MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs4
-rw-r--r--MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs26
-rw-r--r--MediaBrowser.Server.Implementations/Library/ResolverHelper.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs8
-rw-r--r--MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs10
33 files changed, 245 insertions, 396 deletions
diff --git a/MediaBrowser.Api/EnvironmentService.cs b/MediaBrowser.Api/EnvironmentService.cs
index 6bcef4d07..9d11178c8 100644
--- a/MediaBrowser.Api/EnvironmentService.cs
+++ b/MediaBrowser.Api/EnvironmentService.cs
@@ -205,7 +205,7 @@ namespace MediaBrowser.Api
/// <returns>IEnumerable{FileSystemEntryInfo}.</returns>
private IEnumerable<FileSystemEntryInfo> GetFileSystemEntries(GetDirectoryContents request)
{
- var entries = new DirectoryInfo(request.Path).EnumerateFileSystemInfos("*", SearchOption.TopDirectoryOnly).Where(i =>
+ var entries = new DirectoryInfo(request.Path).EnumerateFileSystemInfos().Where(i =>
{
if (i.Attributes.HasFlag(FileAttributes.System))
{
diff --git a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
index 91552d7e5..6f4eae58c 100644
--- a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
@@ -200,7 +200,7 @@ namespace MediaBrowser.Api.Playback.Hls
var directory = Path.GetDirectoryName(outputFilePath);
var name = Path.GetFileNameWithoutExtension(outputFilePath);
- var filesToDelete = Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)
+ var filesToDelete = Directory.EnumerateFiles(directory)
.Where(f => f.IndexOf(name, StringComparison.OrdinalIgnoreCase) != -1)
.ToList();
diff --git a/MediaBrowser.Controller/Drawing/ImageManager.cs b/MediaBrowser.Controller/Drawing/ImageManager.cs
index d901d4a94..3bcd82d88 100644
--- a/MediaBrowser.Controller/Drawing/ImageManager.cs
+++ b/MediaBrowser.Controller/Drawing/ImageManager.cs
@@ -428,7 +428,7 @@ namespace MediaBrowser.Controller.Drawing
var metaFileEntry = item.ResolveArgs.GetMetaFileByPath(imagePath);
// If we didn't the metafile entry, check the Season
- if (!metaFileEntry.HasValue)
+ if (metaFileEntry == null)
{
var episode = item as Episode;
@@ -439,7 +439,7 @@ namespace MediaBrowser.Controller.Drawing
}
// See if we can avoid a file system lookup by looking for the file in ResolveArgs
- return metaFileEntry == null ? File.GetLastWriteTimeUtc(imagePath) : metaFileEntry.Value.LastWriteTimeUtc;
+ return metaFileEntry == null ? File.GetLastWriteTimeUtc(imagePath) : metaFileEntry.LastWriteTimeUtc;
}
/// <summary>
diff --git a/MediaBrowser.Controller/Dto/DtoBuilder.cs b/MediaBrowser.Controller/Dto/DtoBuilder.cs
index 93f5ba8cc..7af9cb496 100644
--- a/MediaBrowser.Controller/Dto/DtoBuilder.cs
+++ b/MediaBrowser.Controller/Dto/DtoBuilder.cs
@@ -212,7 +212,7 @@ namespace MediaBrowser.Controller.Dto
var metaFileEntry = item.ResolveArgs.GetMetaFileByPath(path);
// See if we can avoid a file system lookup by looking for the file in ResolveArgs
- var dateModified = metaFileEntry == null ? File.GetLastWriteTimeUtc(path) : metaFileEntry.Value.LastWriteTimeUtc;
+ var dateModified = metaFileEntry == null ? File.GetLastWriteTimeUtc(path) : metaFileEntry.LastWriteTimeUtc;
ImageSize size;
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index c93923ab9..805cb7bdf 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -244,13 +244,13 @@ namespace MediaBrowser.Controller.Entities
// Record the name of each file
// Need to sort these because accoring to msdn docs, our i/o methods are not guaranteed in any order
- foreach (var file in ResolveArgs.FileSystemChildren.OrderBy(f => f.cFileName))
+ foreach (var file in ResolveArgs.FileSystemChildren.OrderBy(f => f.Name))
{
- sb.Append(file.cFileName);
+ sb.Append(file.Name);
}
- foreach (var file in ResolveArgs.MetadataFiles.OrderBy(f => f.cFileName))
+ foreach (var file in ResolveArgs.MetadataFiles.OrderBy(f => f.Name))
{
- sb.Append(file.cFileName);
+ sb.Append(file.Name);
}
return sb.ToString().GetMD5();
@@ -307,7 +307,7 @@ namespace MediaBrowser.Controller.Entities
/// Resets the resolve args.
/// </summary>
/// <param name="pathInfo">The path info.</param>
- public void ResetResolveArgs(WIN32_FIND_DATA? pathInfo)
+ public void ResetResolveArgs(FileSystemInfo pathInfo)
{
ResolveArgs = CreateResolveArgs(pathInfo);
}
@@ -318,17 +318,14 @@ namespace MediaBrowser.Controller.Entities
/// <param name="pathInfo">The path info.</param>
/// <returns>ItemResolveArgs.</returns>
/// <exception cref="System.IO.IOException">Unable to retrieve file system info for + path</exception>
- protected internal virtual ItemResolveArgs CreateResolveArgs(WIN32_FIND_DATA? pathInfo = null)
+ protected internal virtual ItemResolveArgs CreateResolveArgs(FileSystemInfo pathInfo = null)
{
var path = Path;
// non file-system entries will not have a path
if (LocationType != LocationType.FileSystem || string.IsNullOrEmpty(path))
{
- return new ItemResolveArgs(ConfigurationManager.ApplicationPaths)
- {
- FileInfo = new WIN32_FIND_DATA()
- };
+ return new ItemResolveArgs(ConfigurationManager.ApplicationPaths);
}
if (UseParentPathToCreateResolveArgs)
@@ -336,16 +333,16 @@ namespace MediaBrowser.Controller.Entities
path = System.IO.Path.GetDirectoryName(path);
}
- pathInfo = pathInfo ?? FileSystem.GetFileData(path);
+ pathInfo = pathInfo ?? FileSystem.GetFileSystemInfo(path);
- if (!pathInfo.HasValue)
+ if (pathInfo == null || !pathInfo.Exists)
{
throw new IOException("Unable to retrieve file system info for " + path);
}
var args = new ItemResolveArgs(ConfigurationManager.ApplicationPaths)
{
- FileInfo = pathInfo.Value,
+ FileInfo = pathInfo,
Path = path,
Parent = Parent
};
@@ -735,11 +732,11 @@ namespace MediaBrowser.Controller.Entities
return new List<Trailer>();
}
- IEnumerable<WIN32_FIND_DATA> files;
+ IEnumerable<FileSystemInfo> files;
try
{
- files = FileSystem.GetFiles(folder.Value.Path);
+ files = new DirectoryInfo(folder.FullName).EnumerateFiles();
}
catch (IOException ex)
{
@@ -793,11 +790,11 @@ namespace MediaBrowser.Controller.Entities
return new List<Audio.Audio>();
}
- IEnumerable<WIN32_FIND_DATA> files;
+ IEnumerable<FileSystemInfo> files;
try
{
- files = FileSystem.GetFiles(folder.Value.Path);
+ files = new DirectoryInfo(folder.FullName).EnumerateFiles();
}
catch (IOException ex)
{
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 3a8c8eec1..a22daab22 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -768,7 +768,7 @@ namespace MediaBrowser.Controller.Entities
/// <returns>IEnumerable{BaseItem}.</returns>
protected virtual IEnumerable<BaseItem> GetNonCachedChildren()
{
- IEnumerable<WIN32_FIND_DATA> fileSystemChildren;
+ IEnumerable<FileSystemInfo> fileSystemChildren;
try
{
diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs
index b70ac2b3b..893d2d0e0 100644
--- a/MediaBrowser.Controller/Entities/Movies/Movie.cs
+++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs
@@ -115,7 +115,7 @@ namespace MediaBrowser.Controller.Entities.Movies
/// <returns>IEnumerable{Video}.</returns>
private IEnumerable<Video> LoadSpecialFeatures()
{
- WIN32_FIND_DATA? folder;
+ FileSystemInfo folder;
try
{
@@ -133,11 +133,11 @@ namespace MediaBrowser.Controller.Entities.Movies
return new List<Video>();
}
- IEnumerable<WIN32_FIND_DATA> files;
+ IEnumerable<FileSystemInfo> files;
try
{
- files = FileSystem.GetFiles(folder.Value.Path);
+ files = new DirectoryInfo(folder.FullName).EnumerateFiles();
}
catch (IOException ex)
{
diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs
index 2f3f7387c..79d608459 100644
--- a/MediaBrowser.Controller/Entities/TV/Season.cs
+++ b/MediaBrowser.Controller/Entities/TV/Season.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.IO;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
@@ -134,9 +135,9 @@ namespace MediaBrowser.Controller.Entities.TV
{
var folder = args.GetFileSystemEntryByName("metadata");
- if (folder.HasValue)
+ if (folder != null)
{
- args.AddMetadataFiles(FileSystem.GetFiles(folder.Value.Path));
+ args.AddMetadataFiles(new DirectoryInfo(folder.FullName).EnumerateFiles());
}
}
@@ -145,7 +146,7 @@ namespace MediaBrowser.Controller.Entities.TV
/// </summary>
/// <param name="pathInfo">The path info.</param>
/// <returns>ItemResolveArgs.</returns>
- protected internal override ItemResolveArgs CreateResolveArgs(WIN32_FIND_DATA? pathInfo = null)
+ protected internal override ItemResolveArgs CreateResolveArgs(FileSystemInfo pathInfo = null)
{
var args = base.CreateResolveArgs(pathInfo);
diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs
index 15b97f694..699ca22b1 100644
--- a/MediaBrowser.Controller/Entities/TV/Series.cs
+++ b/MediaBrowser.Controller/Entities/TV/Series.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Extensions;
+using System.IO;
+using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization;
@@ -68,7 +69,7 @@ namespace MediaBrowser.Controller.Entities.TV
/// </summary>
/// <param name="pathInfo">The path info.</param>
/// <returns>ItemResolveArgs.</returns>
- protected internal override ItemResolveArgs CreateResolveArgs(WIN32_FIND_DATA? pathInfo = null)
+ protected internal override ItemResolveArgs CreateResolveArgs(FileSystemInfo pathInfo = null)
{
var args = base.CreateResolveArgs(pathInfo);
diff --git a/MediaBrowser.Controller/IO/FileData.cs b/MediaBrowser.Controller/IO/FileData.cs
index 4571c1ad0..3f15d8ddb 100644
--- a/MediaBrowser.Controller/IO/FileData.cs
+++ b/MediaBrowser.Controller/IO/FileData.cs
@@ -3,7 +3,7 @@ using MediaBrowser.Model.Logging;
using System;
using System.Collections.Generic;
using System.IO;
-using System.Runtime.InteropServices;
+using System.Linq;
namespace MediaBrowser.Controller.IO
{
@@ -13,91 +13,47 @@ namespace MediaBrowser.Controller.IO
public static class FileData
{
/// <summary>
- /// Gets all file system entries within a foler
+ /// Gets the filtered file system entries.
/// </summary>
/// <param name="path">The path.</param>
/// <param name="logger">The logger.</param>
/// <param name="searchPattern">The search pattern.</param>
- /// <param name="includeFiles">if set to <c>true</c> [include files].</param>
- /// <param name="includeDirectories">if set to <c>true</c> [include directories].</param>
/// <param name="flattenFolderDepth">The flatten folder depth.</param>
/// <param name="resolveShortcuts">if set to <c>true</c> [resolve shortcuts].</param>
/// <param name="args">The args.</param>
- /// <returns>Dictionary{System.StringWIN32_FIND_DATA}.</returns>
- /// <exception cref="System.ArgumentNullException"></exception>
- /// <exception cref="System.IO.IOException">GetFileSystemEntries failed</exception>
- public static Dictionary<string, WIN32_FIND_DATA> GetFilteredFileSystemEntries(string path, ILogger logger, string searchPattern = "*", bool includeFiles = true, bool includeDirectories = true, int flattenFolderDepth = 0, bool resolveShortcuts = true, ItemResolveArgs args = null)
+ /// <returns>Dictionary{System.StringFileSystemInfo}.</returns>
+ /// <exception cref="System.ArgumentNullException">path</exception>
+ public static Dictionary<string, FileSystemInfo> GetFilteredFileSystemEntries(string path, ILogger logger, string searchPattern = "*", int flattenFolderDepth = 0, bool resolveShortcuts = true, ItemResolveArgs args = null)
{
if (string.IsNullOrEmpty(path))
{
- throw new ArgumentNullException();
+ throw new ArgumentNullException("path");
}
- var lpFileName = Path.Combine(path, searchPattern);
+ var dict = new Dictionary<string, FileSystemInfo>(StringComparer.OrdinalIgnoreCase);
+
+ var entries = new DirectoryInfo(path).EnumerateFileSystemInfos(searchPattern, SearchOption.TopDirectoryOnly)
+ .Where(i => !i.Attributes.HasFlag(FileAttributes.System) && !i.Name.Equals(".") && !i.Name.Equals(".."));
- WIN32_FIND_DATA lpFindFileData;
- var handle = NativeMethods.FindFirstFileEx(lpFileName, FINDEX_INFO_LEVELS.FindExInfoBasic, out lpFindFileData,
- FINDEX_SEARCH_OPS.FindExSearchNameMatch, IntPtr.Zero, FindFirstFileExFlags.FIND_FIRST_EX_LARGE_FETCH);
-
- if (handle == IntPtr.Zero)
- {
- int hr = Marshal.GetLastWin32Error();
- if (hr != 2 && hr != 0x12)
- {
- throw new IOException("GetFileSystemEntries failed");
- }
- return new Dictionary<string, WIN32_FIND_DATA>(StringComparer.OrdinalIgnoreCase);
- }
-
- var dict = new Dictionary<string, WIN32_FIND_DATA>(StringComparer.OrdinalIgnoreCase);
-
- if (FileSystem.IncludeInFindFileOutput(lpFindFileData.cFileName, lpFindFileData.dwFileAttributes, includeFiles, includeDirectories))
+ foreach (var entry in entries)
{
- if (!string.IsNullOrEmpty(lpFindFileData.cFileName))
- {
- lpFindFileData.Path = Path.Combine(path, lpFindFileData.cFileName);
-
- dict[lpFindFileData.Path] = lpFindFileData;
- }
- }
+ var isDirectory = entry.Attributes.HasFlag(FileAttributes.Directory);
- while (NativeMethods.FindNextFile(handle, out lpFindFileData) != IntPtr.Zero)
- {
- // This is the one circumstance where we can completely disregard a file
- if (lpFindFileData.IsSystemFile)
+ if (resolveShortcuts && FileSystem.IsShortcut(entry.FullName))
{
- continue;
- }
-
- // Filter out invalid entries
- if (lpFindFileData.cFileName.Equals(".", StringComparison.OrdinalIgnoreCase))
- {
- continue;
- }
- if (lpFindFileData.cFileName.Equals("..", StringComparison.OrdinalIgnoreCase))
- {
- continue;
- }
-
- lpFindFileData.Path = Path.Combine(path, lpFindFileData.cFileName);
-
- if (resolveShortcuts && FileSystem.IsShortcut(lpFindFileData.Path))
- {
- var newPath = FileSystem.ResolveShortcut(lpFindFileData.Path);
+ var newPath = FileSystem.ResolveShortcut(entry.FullName);
if (string.IsNullOrWhiteSpace(newPath))
{
//invalid shortcut - could be old or target could just be unavailable
- logger.Warn("Encountered invalid shortuct: " + lpFindFileData.Path);
+ logger.Warn("Encountered invalid shortuct: " + entry.FullName);
continue;
}
- var data = FileSystem.GetFileData(newPath);
+ var data = FileSystem.GetFileSystemInfo(newPath);
- if (data.HasValue)
+ if (data.Exists)
{
- lpFindFileData = data.Value;
-
// Find out if the shortcut is pointing to a directory or file
- if (lpFindFileData.IsDirectory)
+ if (data.Attributes.HasFlag(FileAttributes.Directory))
{
// add to our physical locations
if (args != null)
@@ -106,25 +62,25 @@ namespace MediaBrowser.Controller.IO
}
}
- dict[lpFindFileData.Path] = lpFindFileData;
+ dict[data.FullName] = data;
}
}
- else if (flattenFolderDepth > 0 && lpFindFileData.IsDirectory)
+ else if (flattenFolderDepth > 0 && isDirectory)
{
- foreach (var child in GetFilteredFileSystemEntries(lpFindFileData.Path, logger, flattenFolderDepth: flattenFolderDepth - 1, resolveShortcuts: resolveShortcuts))
+ foreach (var child in GetFilteredFileSystemEntries(entry.FullName, logger, flattenFolderDepth: flattenFolderDepth - 1, resolveShortcuts: resolveShortcuts))
{
dict[child.Key] = child.Value;
}
}
else
{
- dict[lpFindFileData.Path] = lpFindFileData;
+ dict[entry.FullName] = entry;
}
}
- NativeMethods.FindClose(handle);
return dict;
}
+
}
}
diff --git a/MediaBrowser.Controller/IO/FileSystem.cs b/MediaBrowser.Controller/IO/FileSystem.cs
index 7b031744e..cbe561fdf 100644
--- a/MediaBrowser.Controller/IO/FileSystem.cs
+++ b/MediaBrowser.Controller/IO/FileSystem.cs
@@ -1,8 +1,7 @@
-using System;
-using System.Collections.Generic;
+using MediaBrowser.Model.Logging;
+using System;
using System.Collections.Specialized;
using System.IO;
-using System.Runtime.InteropServices;
using System.Text;
namespace MediaBrowser.Controller.IO
@@ -13,153 +12,77 @@ namespace MediaBrowser.Controller.IO
public static class FileSystem
{
/// <summary>
- /// Gets information about a path
+ /// Gets the file system info.
/// </summary>
/// <param name="path">The path.</param>
- /// <returns>System.Nullable{WIN32_FIND_DATA}.</returns>
- /// <exception cref="System.ArgumentNullException">path</exception>
- /// <exception cref="System.IO.IOException">GetFileData failed for + path</exception>
- public static WIN32_FIND_DATA? GetFileData(string path)
+ /// <returns>FileSystemInfo.</returns>
+ public static FileSystemInfo GetFileSystemInfo(string path)
{
- if (string.IsNullOrEmpty(path))
+ // Take a guess to try and avoid two file system hits, but we'll double-check by calling Exists
+ if (Path.HasExtension(path))
{
- throw new ArgumentNullException("path");
- }
-
- WIN32_FIND_DATA data;
- var handle = NativeMethods.FindFirstFileEx(path, FINDEX_INFO_LEVELS.FindExInfoBasic, out data,
- FINDEX_SEARCH_OPS.FindExSearchNameMatch, IntPtr.Zero, FindFirstFileExFlags.NONE);
+ var fileInfo = new FileInfo(path);
- var getFilename = false;
-
- if (handle == NativeMethods.INVALID_HANDLE_VALUE && !Path.HasExtension(path))
- {
- if (!path.EndsWith("*", StringComparison.OrdinalIgnoreCase))
+ if (fileInfo.Exists)
{
- NativeMethods.FindClose(handle);
-
- handle = NativeMethods.FindFirstFileEx(Path.Combine(path, "*"), FINDEX_INFO_LEVELS.FindExInfoBasic, out data,
- FINDEX_SEARCH_OPS.FindExSearchNameMatch, IntPtr.Zero, FindFirstFileExFlags.NONE);
-
- getFilename = true;
+ return fileInfo;
}
- }
-
- if (handle == IntPtr.Zero)
- {
- throw new IOException("GetFileData failed for " + path);
- }
- NativeMethods.FindClose(handle);
-
- // According to MSDN documentation, this will default to 1601 for paths that don't exist.
- if (data.CreationTimeUtc.Year == 1601)
- {
- return null;
+ return new DirectoryInfo(path);
}
-
- if (getFilename)
+ else
{
- data.cFileName = Path.GetFileName(path);
- }
+ var fileInfo = new DirectoryInfo(path);
- data.Path = path;
- return data;
- }
+ if (fileInfo.Exists)
+ {
+ return fileInfo;
+ }
- /// <summary>
- /// Gets all files within a folder
- /// </summary>
- /// <param name="path">The path.</param>
- /// <param name="searchPattern">The search pattern.</param>
- /// <returns>IEnumerable{WIN32_FIND_DATA}.</returns>
- public static IEnumerable<WIN32_FIND_DATA> GetFiles(string path, string searchPattern = "*")
- {
- return GetFileSystemEntries(path, searchPattern, includeDirectories: false);
+ return new FileInfo(path);
+ }
}
/// <summary>
- /// Gets all file system entries within a foler
+ /// Gets the creation time UTC.
/// </summary>
- /// <param name="path">The path.</param>
- /// <param name="searchPattern">The search pattern.</param>
- /// <param name="includeFiles">if set to <c>true</c> [include files].</param>
- /// <param name="includeDirectories">if set to <c>true</c> [include directories].</param>
- /// <returns>IEnumerable{WIN32_FIND_DATA}.</returns>
- /// <exception cref="System.ArgumentNullException">path</exception>
- /// <exception cref="System.IO.IOException">GetFileSystemEntries failed</exception>
- public static IEnumerable<WIN32_FIND_DATA> GetFileSystemEntries(string path, string searchPattern = "*", bool includeFiles = true, bool includeDirectories = true)
+ /// <param name="info">The info.</param>
+ /// <param name="logger">The logger.</param>
+ /// <returns>DateTime.</returns>
+ public static DateTime GetLastWriteTimeUtc(FileSystemInfo info, ILogger logger)
{
- if (string.IsNullOrEmpty(path))
- {
- throw new ArgumentNullException("path");
- }
-
- var lpFileName = Path.Combine(path, searchPattern);
-
- WIN32_FIND_DATA lpFindFileData;
- var handle = NativeMethods.FindFirstFileEx(lpFileName, FINDEX_INFO_LEVELS.FindExInfoBasic, out lpFindFileData,
- FINDEX_SEARCH_OPS.FindExSearchNameMatch, IntPtr.Zero, FindFirstFileExFlags.FIND_FIRST_EX_LARGE_FETCH);
-
- if (handle == IntPtr.Zero)
- {
- var hr = Marshal.GetLastWin32Error();
- if (hr != 2 && hr != 0x12)
- {
- throw new IOException("GetFileSystemEntries failed");
- }
- yield break;
- }
+ // This could throw an error on some file systems that have dates out of range
- if (IncludeInFindFileOutput(lpFindFileData.cFileName, lpFindFileData.dwFileAttributes, includeFiles, includeDirectories))
+ try
{
- lpFindFileData.Path = Path.Combine(path, lpFindFileData.cFileName);
-
- yield return lpFindFileData;
+ return info.LastAccessTimeUtc;
}
-
- while (NativeMethods.FindNextFile(handle, out lpFindFileData) != IntPtr.Zero)
+ catch (Exception ex)
{
- if (IncludeInFindFileOutput(lpFindFileData.cFileName, lpFindFileData.dwFileAttributes, includeFiles, includeDirectories))
- {
- lpFindFileData.Path = Path.Combine(path, lpFindFileData.cFileName);
- yield return lpFindFileData;
- }
+ logger.ErrorException("Error determining LastAccessTimeUtc for {0}", ex, info.FullName);
+ return DateTime.MinValue;
}
-
- NativeMethods.FindClose(handle);
}
/// <summary>
- /// Includes the in find file output.
+ /// Gets the creation time UTC.
/// </summary>
- /// <param name="cFileName">Name of the c file.</param>
- /// <param name="attributes">The attributes.</param>
- /// <param name="includeFiles">if set to <c>true</c> [include files].</param>
- /// <param name="includeDirectories">if set to <c>true</c> [include directories].</param>
- /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
- public static bool IncludeInFindFileOutput(string cFileName, FileAttributes attributes, bool includeFiles, bool includeDirectories)
+ /// <param name="info">The info.</param>
+ /// <param name="logger">The logger.</param>
+ /// <returns>DateTime.</returns>
+ public static DateTime GetCreationTimeUtc(FileSystemInfo info, ILogger logger)
{
- if (cFileName.Equals(".", StringComparison.OrdinalIgnoreCase))
- {
- return false;
- }
- if (cFileName.Equals("..", StringComparison.OrdinalIgnoreCase))
- {
- return false;
- }
+ // This could throw an error on some file systems that have dates out of range
- if (!includeFiles && !attributes.HasFlag(FileAttributes.Directory))
+ try
{
- return false;
+ return info.CreationTimeUtc;
}
-
- if (!includeDirectories && attributes.HasFlag(FileAttributes.Directory))
+ catch (Exception ex)
{
- return false;
+ logger.ErrorException("Error determining CreationTimeUtc for {0}", ex, info.FullName);
+ return DateTime.MinValue;
}
-
- return true;
}
/// <summary>
diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs
index 060f52e37..a456ee24c 100644
--- a/MediaBrowser.Controller/Library/ILibraryManager.cs
+++ b/MediaBrowser.Controller/Library/ILibraryManager.cs
@@ -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>
diff --git a/MediaBrowser.Controller/Library/ItemResolveArgs.cs b/MediaBrowser.Controller/Library/ItemResolveArgs.cs
index 2dbbc9d83..0ddf61f19 100644
--- a/MediaBrowser.Controller/Library/ItemResolveArgs.cs
+++ b/MediaBrowser.Controller/Library/ItemResolveArgs.cs
@@ -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
diff --git a/MediaBrowser.Controller/Library/TVUtils.cs b/MediaBrowser.Controller/Library/TVUtils.cs
index 6ddb1ba5f..9181fe9e8 100644
--- a/MediaBrowser.Controller/Library/TVUtils.cs
+++ b/MediaBrowser.Controller/Library/TVUtils.cs
@@ -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;
}
diff --git a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs
index 99744390a..641a291ff 100644
--- a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs
+++ b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs
@@ -46,7 +46,7 @@ namespace MediaBrowser.Controller.Providers
protected override DateTime CompareDate(BaseItem item)
{
var entry = item.MetaLocation != null ? item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "folder.xml")) : null;
- return entry != null ? entry.Value.LastWriteTimeUtc : DateTime.MinValue;
+ return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue;
}
/// <summary>
@@ -73,9 +73,9 @@ namespace MediaBrowser.Controller.Providers
var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "folder.xml"));
- if (metadataFile.HasValue)
+ if (metadataFile != null)
{
- var path = metadataFile.Value.Path;
+ var path = metadataFile.FullName;
await XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
diff --git a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs
index f11ba8f97..2adee6883 100644
--- a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs
+++ b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs
@@ -17,7 +17,8 @@ namespace MediaBrowser.Controller.Providers
/// </summary>
public class ImageFromMediaLocationProvider : BaseMetadataProvider
{
- public ImageFromMediaLocationProvider(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager)
+ public ImageFromMediaLocationProvider(ILogManager logManager, IServerConfigurationManager configurationManager)
+ : base(logManager, configurationManager)
{
}
@@ -62,7 +63,7 @@ namespace MediaBrowser.Controller.Providers
public override Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
-
+
// Make sure current image paths still exist
ValidateImages(item);
@@ -72,7 +73,7 @@ namespace MediaBrowser.Controller.Providers
ValidateBackdrops(item);
cancellationToken.ThrowIfCancellationRequested();
-
+
PopulateBaseItemImages(item);
SetLastRefreshed(item, DateTime.UtcNow);
@@ -95,11 +96,11 @@ namespace MediaBrowser.Controller.Providers
{
var path = item.Images[image];
- return IsInMetaLocation(item, path) && !item.ResolveArgs.GetMetaFileByPath(path).HasValue;
+ return IsInMetaLocation(item, path) && item.ResolveArgs.GetMetaFileByPath(path) == null;
}).ToList();
// Now remove them from the dictionary
- foreach(var key in deletedKeys)
+ foreach (var key in deletedKeys)
{
item.Images.Remove(key);
}
@@ -117,7 +118,7 @@ namespace MediaBrowser.Controller.Providers
}
// Only validate paths from the same directory - need to copy to a list because we are going to potentially modify the collection below
- var deletedImages = item.BackdropImagePaths.Where(path => IsInMetaLocation(item, path) && !item.ResolveArgs.GetMetaFileByPath(path).HasValue).ToList();
+ var deletedImages = item.BackdropImagePaths.Where(path => IsInMetaLocation(item, path) && item.ResolveArgs.GetMetaFileByPath(path) == null).ToList();
// Now remove them from the dictionary
foreach (var path in deletedImages)
@@ -143,7 +144,7 @@ namespace MediaBrowser.Controller.Providers
/// <param name="item">The item.</param>
/// <param name="filenameWithoutExtension">The filename without extension.</param>
/// <returns>System.Nullable{WIN32_FIND_DATA}.</returns>
- protected virtual WIN32_FIND_DATA? GetImage(BaseItem item, string filenameWithoutExtension)
+ protected virtual FileSystemInfo GetImage(BaseItem item, string filenameWithoutExtension)
{
return item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.ResolveArgs.Path, filenameWithoutExtension + ".png")) ?? item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.ResolveArgs.Path, filenameWithoutExtension + ".jpg"));
}
@@ -160,65 +161,65 @@ namespace MediaBrowser.Controller.Providers
// Primary Image
var image = GetImage(item, "folder");
- if (image.HasValue)
+ if (image != null)
{
- item.SetImage(ImageType.Primary, image.Value.Path);
+ item.SetImage(ImageType.Primary, image.FullName);
}
// Logo Image
image = GetImage(item, "logo");
- if (image.HasValue)
+ if (image != null)
{
- item.SetImage(ImageType.Logo, image.Value.Path);
+ item.SetImage(ImageType.Logo, image.FullName);
}
// Banner Image
image = GetImage(item, "banner");
- if (image.HasValue)
+ if (image != null)
{
- item.SetImage(ImageType.Banner, image.Value.Path);
+ item.SetImage(ImageType.Banner, image.FullName);
}
// Clearart
image = GetImage(item, "clearart");
- if (image.HasValue)
+ if (image != null)
{
- item.SetImage(ImageType.Art, image.Value.Path);
+ item.SetImage(ImageType.Art, image.FullName);
}
// Thumbnail Image
image = GetImage(item, "thumb");
- if (image.HasValue)
+ if (image != null)
{
- item.SetImage(ImageType.Thumb, image.Value.Path);
+ item.SetImage(ImageType.Thumb, image.FullName);
}
// Thumbnail Image
image = GetImage(item, "box");
- if (image.HasValue)
+ if (image != null)
{
- item.SetImage(ImageType.Box, image.Value.Path);
+ item.SetImage(ImageType.Box, image.FullName);
}
// Thumbnail Image
image = GetImage(item, "menu");
- if (image.HasValue)
+ if (image != null)
{
- item.SetImage(ImageType.Menu, image.Value.Path);
+ item.SetImage(ImageType.Menu, image.FullName);
}
// Backdrop Image
image = GetImage(item, "backdrop");
- if (image.HasValue)
+ if (image != null)
{
- backdropFiles.Add(image.Value.Path);
+ backdropFiles.Add(image.FullName);
}
var unfound = 0;
@@ -227,9 +228,9 @@ namespace MediaBrowser.Controller.Providers
// Backdrop Image
image = GetImage(item, "backdrop" + i);
- if (image.HasValue)
+ if (image != null)
{
- backdropFiles.Add(image.Value.Path);
+ backdropFiles.Add(image.FullName);
}
else
{
@@ -250,9 +251,9 @@ namespace MediaBrowser.Controller.Providers
// Screenshot Image
image = GetImage(item, "screenshot");
- if (image.HasValue)
+ if (image != null)
{
- screenshotFiles.Add(image.Value.Path);
+ screenshotFiles.Add(image.FullName);
}
unfound = 0;
@@ -261,9 +262,9 @@ namespace MediaBrowser.Controller.Providers
// Screenshot Image
image = GetImage(item, "screenshot" + i);
- if (image.HasValue)
+ if (image != null)
{
- screenshotFiles.Add(image.Value.Path);
+ screenshotFiles.Add(image.FullName);
}
else
{
diff --git a/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs b/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs
index 26ef98463..f4a807a64 100644
--- a/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs
+++ b/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs
@@ -88,7 +88,7 @@ namespace MediaBrowser.Controller.Providers
return DateTime.MinValue;
}
- var files = new DirectoryInfo(location).EnumerateFiles("*", SearchOption.TopDirectoryOnly).ToList();
+ var files = new DirectoryInfo(location).EnumerateFiles().ToList();
if (files.Count == 0)
{
@@ -97,8 +97,8 @@ namespace MediaBrowser.Controller.Providers
return files.Select(f =>
{
- var lastWriteTime = GetLastWriteTimeUtc(f);
- var creationTime = GetCreationTimeUtc(f);
+ var lastWriteTime = FileSystem.GetLastWriteTimeUtc(f, Logger);
+ var creationTime = FileSystem.GetCreationTimeUtc(f, Logger);
return creationTime > lastWriteTime ? creationTime : lastWriteTime;
@@ -106,46 +106,6 @@ namespace MediaBrowser.Controller.Providers
}
/// <summary>
- /// Gets the creation time UTC.
- /// </summary>
- /// <param name="info">The info.</param>
- /// <returns>DateTime.</returns>
- private DateTime GetLastWriteTimeUtc(FileSystemInfo info)
- {
- // This could throw an error on some file systems that have dates out of range
-
- try
- {
- return info.LastAccessTimeUtc;
- }
- catch (Exception ex)
- {
- Logger.ErrorException("Error determining LastAccessTimeUtc for {0}", ex, info.FullName);
- return DateTime.MinValue;
- }
- }
-
- /// <summary>
- /// Gets the creation time UTC.
- /// </summary>
- /// <param name="info">The info.</param>
- /// <returns>DateTime.</returns>
- private DateTime GetCreationTimeUtc(FileSystemInfo info)
- {
- // This could throw an error on some file systems that have dates out of range
-
- try
- {
- return info.CreationTimeUtc;
- }
- catch (Exception ex)
- {
- Logger.ErrorException("Error determining CreationTimeUtc for {0}", ex, info.FullName);
- return DateTime.MinValue;
- }
- }
-
- /// <summary>
/// Fetches metadata and returns true or false indicating if any work that requires persistence was done
/// </summary>
/// <param name="item">The item.</param>
@@ -184,15 +144,21 @@ namespace MediaBrowser.Controller.Providers
/// <param name="item">The item.</param>
/// <param name="filenameWithoutExtension">The filename without extension.</param>
/// <returns>System.Nullable{WIN32_FIND_DATA}.</returns>
- protected override WIN32_FIND_DATA? GetImage(BaseItem item, string filenameWithoutExtension)
+ protected override FileSystemInfo GetImage(BaseItem item, string filenameWithoutExtension)
{
var location = GetLocation(item);
- var result = FileSystem.GetFileData(Path.Combine(location, filenameWithoutExtension + ".png"));
- if (!result.HasValue)
- result = FileSystem.GetFileData(Path.Combine(location, filenameWithoutExtension + ".jpg"));
+ var result = new FileInfo(Path.Combine(location, filenameWithoutExtension + ".png"));
- return result;
+ if (!result.Exists)
+ result = new FileInfo(Path.Combine(location, filenameWithoutExtension + ".jpg"));
+
+ if (result.Exists)
+ {
+ return result;
+ }
+
+ return null;
}
}
}
diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs
index 1b7266d57..0fb3c853a 100644
--- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs
+++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs
@@ -255,16 +255,17 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
var startIndex = video.MediaStreams == null ? 0 : video.MediaStreams.Count;
var streams = new List<MediaStream>();
- foreach (var file in fileSystemChildren.Where(f => !f.IsDirectory))
+ foreach (var file in fileSystemChildren.Where(f => !f.Attributes.HasFlag(FileAttributes.Directory)))
{
- var extension = Path.GetExtension(file.Path);
+ var fullName = file.FullName;
+ var extension = Path.GetExtension(fullName);
if (string.Equals(extension, ".srt", StringComparison.OrdinalIgnoreCase))
{
if (video.VideoType == VideoType.VideoFile)
{
// For video files the subtitle filename must match video filename
- if (!string.Equals(Path.GetFileNameWithoutExtension(video.Path), Path.GetFileNameWithoutExtension(file.Path)))
+ if (!string.Equals(Path.GetFileNameWithoutExtension(video.Path), Path.GetFileNameWithoutExtension(fullName)))
{
continue;
}
@@ -275,7 +276,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
Index = startIndex++,
Type = MediaStreamType.Subtitle,
IsExternal = true,
- Path = file.Path,
+ Path = fullName,
Codec = "srt"
});
}
diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs
index 4529e4890..a86b7c848 100644
--- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs
+++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs
@@ -47,7 +47,7 @@ namespace MediaBrowser.Controller.Providers.Movies
protected override DateTime CompareDate(BaseItem item)
{
var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, LOCAL_META_FILE_NAME));
- return entry != null ? entry.Value.LastWriteTimeUtc : DateTime.MinValue;
+ return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue;
}
/// <summary>
@@ -84,10 +84,10 @@ namespace MediaBrowser.Controller.Providers.Movies
cancellationToken.ThrowIfCancellationRequested();
var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, LOCAL_META_FILE_NAME));
- if (entry.HasValue)
+ if (entry != null)
{
// read in our saved meta and pass to processing function
- var movieData = JsonSerializer.DeserializeFromFile<CompleteMovieData>(entry.Value.Path);
+ var movieData = JsonSerializer.DeserializeFromFile<CompleteMovieData>(entry.FullName);
cancellationToken.ThrowIfCancellationRequested();
diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs
index 1ed003e87..40c6feb61 100644
--- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs
+++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs
@@ -46,7 +46,7 @@ namespace MediaBrowser.Controller.Providers.Movies
protected override DateTime CompareDate(BaseItem item)
{
var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "movie.xml"));
- return entry != null ? entry.Value.LastWriteTimeUtc : DateTime.MinValue;
+ return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue;
}
/// <summary>
@@ -73,9 +73,9 @@ namespace MediaBrowser.Controller.Providers.Movies
var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "movie.xml"));
- if (metadataFile.HasValue)
+ if (metadataFile != null)
{
- var path = metadataFile.Value.Path;
+ var path = metadataFile.FullName;
var boxset = item as BoxSet;
await XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
diff --git a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs
index 1860f16c2..f1c5d21c5 100644
--- a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs
+++ b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs
@@ -68,7 +68,7 @@ namespace MediaBrowser.Controller.Providers.Movies
protected override DateTime CompareDate(BaseItem item)
{
var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation,MetaFileName));
- return entry != null ? entry.Value.LastWriteTimeUtc : DateTime.MinValue;
+ return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue;
}
/// <summary>
diff --git a/MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs b/MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs
index ce96cd107..fe64c66b3 100644
--- a/MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs
+++ b/MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs
@@ -35,10 +35,10 @@ namespace MediaBrowser.Controller.Providers.Music
cancellationToken.ThrowIfCancellationRequested();
var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, LastfmHelper.LocalArtistMetaFileName));
- if (entry.HasValue)
+ if (entry != null)
{
// read in our saved meta and pass to processing function
- var data = JsonSerializer.DeserializeFromFile<LastfmArtist>(entry.Value.Path);
+ var data = JsonSerializer.DeserializeFromFile<LastfmArtist>(entry.FullName);
cancellationToken.ThrowIfCancellationRequested();
@@ -93,7 +93,7 @@ namespace MediaBrowser.Controller.Providers.Music
protected override DateTime CompareDate(BaseItem item)
{
var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, LastfmHelper.LocalArtistMetaFileName));
- return entry != null ? entry.Value.LastWriteTimeUtc : DateTime.MinValue;
+ return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue;
}
}
diff --git a/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs
index b7798309b..7eaf95a08 100644
--- a/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs
+++ b/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs
@@ -15,7 +15,8 @@ namespace MediaBrowser.Controller.Providers.TV
/// </summary>
public class EpisodeImageFromMediaLocationProvider : BaseMetadataProvider
{
- public EpisodeImageFromMediaLocationProvider(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager)
+ public EpisodeImageFromMediaLocationProvider(ILogManager logManager, IServerConfigurationManager configurationManager)
+ : base(logManager, configurationManager)
{
}
@@ -60,7 +61,7 @@ namespace MediaBrowser.Controller.Providers.TV
public override Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
-
+
var episode = (Episode)item;
var episodeFileName = Path.GetFileName(episode.Path);
@@ -70,7 +71,7 @@ namespace MediaBrowser.Controller.Providers.TV
ValidateImage(episode, item.MetaLocation);
cancellationToken.ThrowIfCancellationRequested();
-
+
SetPrimaryImagePath(episode, parent, item.MetaLocation, episodeFileName);
SetLastRefreshed(item, DateTime.UtcNow);
@@ -98,7 +99,7 @@ namespace MediaBrowser.Controller.Providers.TV
return;
}
- if (!episode.Parent.ResolveArgs.GetMetaFileByPath(path).HasValue)
+ if (episode.Parent.ResolveArgs.GetMetaFileByPath(path) == null)
{
episode.PrimaryImagePath = null;
}
@@ -122,9 +123,9 @@ namespace MediaBrowser.Controller.Providers.TV
var file = parent.ResolveArgs.GetMetaFileByPath(imageFiles[0]) ??
parent.ResolveArgs.GetMetaFileByPath(imageFiles[1]);
- if (file.HasValue)
+ if (file != null)
{
- item.PrimaryImagePath = file.Value.Path;
+ item.PrimaryImagePath = file.FullName;
}
}
}
diff --git a/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs b/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs
index e6fb2eb4f..0e7f1e66e 100644
--- a/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs
+++ b/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs
@@ -71,12 +71,12 @@ namespace MediaBrowser.Controller.Providers.TV
var file = item.ResolveArgs.Parent.ResolveArgs.GetMetaFileByPath(metadataFile);
- if (!file.HasValue)
+ if (file == null)
{
return base.CompareDate(item);
}
- return file.Value.LastWriteTimeUtc;
+ return file.LastWriteTimeUtc;
}
/// <summary>
@@ -93,7 +93,7 @@ namespace MediaBrowser.Controller.Providers.TV
var file = item.ResolveArgs.Parent.ResolveArgs.GetMetaFileByPath(metadataFile);
- if (!file.HasValue)
+ if (file == null)
{
return false;
}
diff --git a/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs b/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs
index 556ef24c9..786793069 100644
--- a/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs
+++ b/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs
@@ -47,7 +47,7 @@ namespace MediaBrowser.Controller.Providers.TV
protected override DateTime CompareDate(BaseItem item)
{
var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "series.xml"));
- return entry != null ? entry.Value.LastWriteTimeUtc : DateTime.MinValue;
+ return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue;
}
/// <summary>
@@ -74,9 +74,9 @@ namespace MediaBrowser.Controller.Providers.TV
var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "series.xml"));
- if (metadataFile.HasValue)
+ if (metadataFile != null)
{
- var path = metadataFile.Value.Path;
+ var path = metadataFile.FullName;
await XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
diff --git a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs
index dda2af0cf..627e1f08d 100644
--- a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs
+++ b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs
@@ -72,19 +72,19 @@ namespace MediaBrowser.Controller.Resolvers
{
var childData = args.IsDirectory ? args.GetFileSystemEntryByPath(item.Path) : null;
- if (childData.HasValue)
+ if (childData != null)
{
- item.DateCreated = childData.Value.CreationTimeUtc;
- item.DateModified = childData.Value.LastWriteTimeUtc;
+ item.DateCreated = childData.CreationTimeUtc;
+ item.DateModified = childData.LastWriteTimeUtc;
}
else
{
- var fileData = FileSystem.GetFileData(item.Path);
+ var fileData = FileSystem.GetFileSystemInfo(item.Path);
- if (fileData.HasValue)
+ if (fileData.Exists)
{
- item.DateCreated = fileData.Value.CreationTimeUtc;
- item.DateModified = fileData.Value.LastWriteTimeUtc;
+ item.DateCreated = fileData.CreationTimeUtc;
+ item.DateModified = fileData.LastWriteTimeUtc;
}
}
}
diff --git a/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs b/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs
index 684b72cc9..150b28b4b 100644
--- a/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs
+++ b/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs
@@ -394,9 +394,9 @@ namespace MediaBrowser.Server.Implementations.IO
{
try
{
- var data = FileSystem.GetFileData(path);
+ var data = FileSystem.GetFileSystemInfo(path);
- if (!data.HasValue || data.Value.IsDirectory)
+ if (!data.Exists || data.Attributes.HasFlag(FileAttributes.Directory))
{
return false;
}
diff --git a/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs b/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs
index 04c247f7e..cb49dd1e6 100644
--- a/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs
+++ b/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs
@@ -47,7 +47,7 @@ namespace MediaBrowser.Server.Implementations.Library
if (args.IsDirectory)
{
- var filename = args.FileInfo.cFileName;
+ var filename = args.FileInfo.Name;
// Ignore any folders in our list
if (IgnoreFolders.Contains(filename, StringComparer.OrdinalIgnoreCase))
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 5f07e0d87..ceb4f90cf 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -403,16 +403,16 @@ namespace MediaBrowser.Server.Implementations.Library
/// <param name="fileInfo">The file info.</param>
/// <returns>BaseItem.</returns>
/// <exception cref="System.ArgumentNullException"></exception>
- public BaseItem ResolvePath(string path, Folder parent = null, WIN32_FIND_DATA? fileInfo = null)
+ public BaseItem ResolvePath(string path, Folder parent = null, FileSystemInfo fileInfo = null)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentNullException();
}
- fileInfo = fileInfo ?? FileSystem.GetFileData(path);
+ fileInfo = fileInfo ?? FileSystem.GetFileSystemInfo(path);
- if (!fileInfo.HasValue)
+ if (!fileInfo.Exists)
{
return null;
}
@@ -421,7 +421,7 @@ namespace MediaBrowser.Server.Implementations.Library
{
Parent = parent,
Path = path,
- FileInfo = fileInfo.Value
+ FileInfo = fileInfo
};
// Return null if ignore rules deem that we should do so
@@ -468,7 +468,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// <param name="files">The files.</param>
/// <param name="parent">The parent.</param>
/// <returns>List{``0}.</returns>
- public List<T> ResolvePaths<T>(IEnumerable<WIN32_FIND_DATA> files, Folder parent)
+ public List<T> ResolvePaths<T>(IEnumerable<FileSystemInfo> files, Folder parent)
where T : BaseItem
{
var list = new List<T>();
@@ -477,7 +477,7 @@ namespace MediaBrowser.Server.Implementations.Library
{
try
{
- var item = ResolvePath(f.Path, parent, f) as T;
+ var item = ResolvePath(f.FullName, parent, f) as T;
if (item != null)
{
@@ -489,7 +489,7 @@ namespace MediaBrowser.Server.Implementations.Library
}
catch (Exception ex)
{
- _logger.ErrorException("Error resolving path {0}", ex, f.Path);
+ _logger.ErrorException("Error resolving path {0}", ex, f.FullName);
}
});
@@ -680,16 +680,16 @@ namespace MediaBrowser.Server.Implementations.Library
path = Path.Combine(path, FileSystem.GetValidFilename(name));
- var fileInfo = FileSystem.GetFileData(path);
+ var fileInfo = new DirectoryInfo(path);
var isNew = false;
- if (!fileInfo.HasValue)
+ if (!fileInfo.Exists)
{
Directory.CreateDirectory(path);
- fileInfo = FileSystem.GetFileData(path);
+ fileInfo = new DirectoryInfo(path);
- if (!fileInfo.HasValue)
+ if (!fileInfo.Exists)
{
throw new IOException("Path not created: " + path);
}
@@ -708,8 +708,8 @@ namespace MediaBrowser.Server.Implementations.Library
{
Name = name,
Id = id,
- DateCreated = fileInfo.Value.CreationTimeUtc,
- DateModified = fileInfo.Value.LastWriteTimeUtc,
+ DateCreated = fileInfo.CreationTimeUtc,
+ DateModified = fileInfo.LastWriteTimeUtc,
Path = path
};
isNew = true;
diff --git a/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs b/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs
index f4e34ba62..18604fa9e 100644
--- a/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs
+++ b/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs
@@ -53,7 +53,7 @@ namespace MediaBrowser.Server.Implementations.Library
if (string.IsNullOrEmpty(item.Name) && !string.IsNullOrEmpty(item.Path))
{
//we use our resolve args name here to get the name of the containg folder, not actual video file
- item.Name = GetMBName(item.ResolveArgs.FileInfo.cFileName, item.ResolveArgs.FileInfo.IsDirectory);
+ item.Name = GetMBName(item.ResolveArgs.FileInfo.Name, item.ResolveArgs.FileInfo.Attributes.HasFlag(FileAttributes.Directory));
}
}
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs
index 7d3dab1b1..f24d23208 100644
--- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs
+++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs
@@ -49,7 +49,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio
// If list contains at least 2 audio files or at least one and no video files consider it to contain music
var foundAudio = 0;
- foreach (var fullName in new DirectoryInfo(path).EnumerateFiles("*", SearchOption.TopDirectoryOnly).Select(file => file.FullName))
+ foreach (var fullName in new DirectoryInfo(path).EnumerateFiles().Select(file => file.FullName))
{
if (AudioResolver.IsAudioFile(fullName)) foundAudio++;
if (foundAudio >= 2)
@@ -86,19 +86,19 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio
/// </summary>
/// <param name="list">The list.</param>
/// <returns><c>true</c> if the specified list contains music; otherwise, <c>false</c>.</returns>
- public static bool ContainsMusic(IEnumerable<WIN32_FIND_DATA> list)
+ public static bool ContainsMusic(IEnumerable<FileSystemInfo> list)
{
// If list contains at least 2 audio files or at least one and no video files consider it to contain music
var foundAudio = 0;
foreach (var file in list)
{
- if (AudioResolver.IsAudioFile(file.Path)) foundAudio++;
+ if (AudioResolver.IsAudioFile(file.FullName)) foundAudio++;
if (foundAudio >= 2)
{
return true;
}
- if (EntityResolutionHelper.IsVideoFile(file.Path)) return false;
+ if (EntityResolutionHelper.IsVideoFile(file.FullName)) return false;
}
// or a single audio file and no video files
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs
index 7ba6df68c..ffb967fc1 100644
--- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs
+++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs
@@ -33,7 +33,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio
if (args.Parent.IsRoot) return null;
// If we contain an album assume we are an artist folder
- return args.FileSystemChildren.Any(i => MusicAlbumResolver.IsMusicAlbum(i.Path)) ? new MusicArtist() : null;
+ return args.FileSystemChildren.Any(i => MusicAlbumResolver.IsMusicAlbum(i.FullName)) ? new MusicArtist() : null;
}
}
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
index 61ca82f95..7e077d4d7 100644
--- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
+++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
@@ -127,9 +127,9 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
// Loop through each child file/folder and see if we find a video
foreach (var child in args.FileSystemChildren)
{
- if (child.IsDirectory)
+ if (child.Attributes.HasFlag(FileAttributes.Directory))
{
- if (IsDvdDirectory(child.cFileName))
+ if (IsDvdDirectory(child.Name))
{
return new Movie
{
@@ -137,7 +137,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
VideoType = VideoType.Dvd
};
}
- if (IsBluRayDirectory(child.cFileName))
+ if (IsBluRayDirectory(child.Name))
{
return new Movie
{
@@ -145,7 +145,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
VideoType = VideoType.BluRay
};
}
- if (IsHdDvdDirectory(child.cFileName))
+ if (IsHdDvdDirectory(child.Name))
{
return new Movie
{
@@ -160,7 +160,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
var childArgs = new ItemResolveArgs(ApplicationPaths)
{
FileInfo = child,
- Path = child.Path
+ Path = child.FullName
};
var item = base.Resolve(childArgs);