From b443d591a29bc18daea36a3871908a4c1c277990 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 28 Apr 2013 01:29:27 -0400 Subject: [PATCH] fixes #200 - MB3 Locking Folders for a long time --- MediaBrowser.Api/EnvironmentService.cs | 2 +- .../Playback/Hls/BaseHlsService.cs | 2 +- .../Drawing/ImageManager.cs | 4 +- MediaBrowser.Controller/Dto/DtoBuilder.cs | 2 +- MediaBrowser.Controller/Entities/BaseItem.cs | 31 ++-- MediaBrowser.Controller/Entities/Folder.cs | 2 +- .../Entities/Movies/Movie.cs | 6 +- MediaBrowser.Controller/Entities/TV/Season.cs | 7 +- MediaBrowser.Controller/Entities/TV/Series.cs | 5 +- MediaBrowser.Controller/IO/FileData.cs | 92 +++------ MediaBrowser.Controller/IO/FileSystem.cs | 175 +++++------------- .../Library/ILibraryManager.cs | 7 +- .../Library/ItemResolveArgs.cs | 60 +++--- MediaBrowser.Controller/Library/TVUtils.cs | 15 +- .../Providers/FolderProviderFromXml.cs | 6 +- .../ImageFromMediaLocationProvider.cs | 59 +++--- .../Providers/ImagesByNameProvider.cs | 62 ++----- .../MediaInfo/FFProbeVideoInfoProvider.cs | 9 +- .../Providers/Movies/MovieProviderFromJson.cs | 6 +- .../Providers/Movies/MovieProviderFromXml.cs | 6 +- .../Movies/PersonProviderFromJson.cs | 2 +- .../Music/MusicArtistProviderFromJson.cs | 6 +- .../EpisodeImageFromMediaLocationProvider.cs | 13 +- .../Providers/TV/EpisodeProviderFromXml.cs | 6 +- .../Providers/TV/SeriesProviderFromXml.cs | 6 +- .../Resolvers/EntityResolutionHelper.cs | 14 +- .../IO/DirectoryWatchers.cs | 4 +- .../Library/CoreResolutionIgnoreRule.cs | 2 +- .../Library/LibraryManager.cs | 26 +-- .../Library/ResolverHelper.cs | 2 +- .../Resolvers/Audio/MusicAlbumResolver.cs | 8 +- .../Resolvers/Audio/MusicArtistResolver.cs | 2 +- .../Library/Resolvers/Movies/MovieResolver.cs | 10 +- 33 files changed, 254 insertions(+), 405 deletions(-) diff --git a/MediaBrowser.Api/EnvironmentService.cs b/MediaBrowser.Api/EnvironmentService.cs index 6bcef4d077..9d11178c84 100644 --- a/MediaBrowser.Api/EnvironmentService.cs +++ b/MediaBrowser.Api/EnvironmentService.cs @@ -205,7 +205,7 @@ namespace MediaBrowser.Api /// IEnumerable{FileSystemEntryInfo}. private IEnumerable 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 91552d7e5d..6f4eae58cc 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 d901d4a943..3bcd82d88b 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; } /// diff --git a/MediaBrowser.Controller/Dto/DtoBuilder.cs b/MediaBrowser.Controller/Dto/DtoBuilder.cs index 93f5ba8cc8..7af9cb496c 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 c93923ab95..805cb7bdfa 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. /// /// The path info. - public void ResetResolveArgs(WIN32_FIND_DATA? pathInfo) + public void ResetResolveArgs(FileSystemInfo pathInfo) { ResolveArgs = CreateResolveArgs(pathInfo); } @@ -318,17 +318,14 @@ namespace MediaBrowser.Controller.Entities /// The path info. /// ItemResolveArgs. /// Unable to retrieve file system info for + path - 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(); } - IEnumerable files; + IEnumerable 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(); } - IEnumerable files; + IEnumerable 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 3a8c8eec10..a22daab227 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -768,7 +768,7 @@ namespace MediaBrowser.Controller.Entities /// IEnumerable{BaseItem}. protected virtual IEnumerable GetNonCachedChildren() { - IEnumerable fileSystemChildren; + IEnumerable fileSystemChildren; try { diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs index b70ac2b3b8..893d2d0e08 100644 --- a/MediaBrowser.Controller/Entities/Movies/Movie.cs +++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs @@ -115,7 +115,7 @@ namespace MediaBrowser.Controller.Entities.Movies /// IEnumerable{Video}. private IEnumerable