diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-28 01:29:27 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-28 01:29:27 -0400 |
| commit | b443d591a29bc18daea36a3871908a4c1c277990 (patch) | |
| tree | 9f671e0484c1b42bd5cecfe58a4d7cc3e7a6ddc7 /MediaBrowser.Controller/Providers | |
| parent | 90bb3d46c416676105d5cf89d12279b3f7ccb944 (diff) | |
fixes #200 - MB3 Locking Folders for a long time
Diffstat (limited to 'MediaBrowser.Controller/Providers')
11 files changed, 75 insertions, 106 deletions
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); |
