diff options
Diffstat (limited to 'MediaBrowser.Providers')
26 files changed, 243 insertions, 255 deletions
diff --git a/MediaBrowser.Providers/FolderProviderFromXml.cs b/MediaBrowser.Providers/FolderProviderFromXml.cs index 5f36fee28..2a22d0448 100644 --- a/MediaBrowser.Providers/FolderProviderFromXml.cs +++ b/MediaBrowser.Providers/FolderProviderFromXml.cs @@ -1,5 +1,6 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -42,16 +43,17 @@ namespace MediaBrowser.Providers get { return MetadataProviderPriority.First; } } - /// <summary> - /// Override this to return the date that should be compared to the last refresh date - /// to determine if this provider should be re-fetched. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>DateTime.</returns> - protected override DateTime CompareDate(BaseItem item) + private const string XmlFileName = "folder.xml"; + protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo) { - var entry = item.MetaLocation != null ? item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "folder.xml")) : null; - return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue; + var xml = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); + + if (xml == null) + { + return false; + } + + return FileSystem.GetLastWriteTimeUtc(xml, Logger) > providerInfo.LastRefreshed; } /// <summary> @@ -76,7 +78,7 @@ namespace MediaBrowser.Providers { cancellationToken.ThrowIfCancellationRequested(); - var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "folder.xml")); + var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); if (metadataFile != null) { diff --git a/MediaBrowser.Providers/Games/GameProviderFromXml.cs b/MediaBrowser.Providers/Games/GameProviderFromXml.cs index 4c6b9fc66..5e498c578 100644 --- a/MediaBrowser.Providers/Games/GameProviderFromXml.cs +++ b/MediaBrowser.Providers/Games/GameProviderFromXml.cs @@ -7,6 +7,7 @@ using System; using System.IO; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Providers.Savers; namespace MediaBrowser.Providers.Games { @@ -33,10 +34,18 @@ namespace MediaBrowser.Providers.Games return item is Game; } - protected override DateTime CompareDate(BaseItem item) + protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo) { - var xml = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "game.xml")); - return xml != null ? FileSystem.GetLastWriteTimeUtc(xml, Logger) : DateTime.MinValue; + var savePath = GameXmlSaver.GetGameSavePath(item); + + var xml = item.ResolveArgs.GetMetaFileByPath(savePath) ?? new FileInfo(savePath); + + if (!xml.Exists) + { + return false; + } + + return FileSystem.GetLastWriteTimeUtc(xml, Logger) > providerInfo.LastRefreshed; } /// <summary> @@ -61,21 +70,17 @@ namespace MediaBrowser.Providers.Games { cancellationToken.ThrowIfCancellationRequested(); - var metaFile = Path.Combine(game.MetaLocation, "game.xml"); + var metaFile = GameXmlSaver.GetGameSavePath(game); - if (File.Exists(metaFile)) - { - await XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); - - try - { - new BaseItemXmlParser<Game>(Logger).Fetch(game, metaFile, cancellationToken); - } - finally - { - XmlParsingResourcePool.Release(); - } + await XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); + try + { + new BaseItemXmlParser<Game>(Logger).Fetch(game, metaFile, cancellationToken); + } + finally + { + XmlParsingResourcePool.Release(); } SetLastRefreshed(game, DateTime.UtcNow); diff --git a/MediaBrowser.Providers/Games/GameSystemProviderFromXml.cs b/MediaBrowser.Providers/Games/GameSystemProviderFromXml.cs index e01bed88e..ed76d0842 100644 --- a/MediaBrowser.Providers/Games/GameSystemProviderFromXml.cs +++ b/MediaBrowser.Providers/Games/GameSystemProviderFromXml.cs @@ -1,5 +1,6 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -39,16 +40,17 @@ namespace MediaBrowser.Providers.Games get { return MetadataProviderPriority.First; } } - /// <summary> - /// Override this to return the date that should be compared to the last refresh date - /// to determine if this provider should be re-fetched. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>DateTime.</returns> - protected override DateTime CompareDate(BaseItem item) + private const string XmlFileName = "gamesystem.xml"; + protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo) { - var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "gamesystem.xml")); - return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue; + var xml = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); + + if (xml == null) + { + return false; + } + + return FileSystem.GetLastWriteTimeUtc(xml, Logger) > providerInfo.LastRefreshed; } /// <summary> @@ -73,7 +75,7 @@ namespace MediaBrowser.Providers.Games { cancellationToken.ThrowIfCancellationRequested(); - var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "gamesystem.xml")); + var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); if (metadataFile != null) { diff --git a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs index 26c850717..f61057fe6 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs @@ -174,10 +174,7 @@ namespace MediaBrowser.Providers.MediaInfo { var parentPath = Path.GetDirectoryName(path); - if (!Directory.Exists(parentPath)) - { - Directory.CreateDirectory(parentPath); - } + Directory.CreateDirectory(parentPath); await _mediaEncoder.ExtractImage(new[] { item.Path }, InputType.AudioFile, null, null, path, cancellationToken).ConfigureAwait(false); } diff --git a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs index b202e4866..14085635a 100644 --- a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs @@ -222,10 +222,7 @@ namespace MediaBrowser.Providers.MediaInfo { var parentPath = Path.GetDirectoryName(path); - if (!Directory.Exists(parentPath)) - { - Directory.CreateDirectory(parentPath); - } + Directory.CreateDirectory(parentPath); await ExtractImageInternal(item, path, cancellationToken).ConfigureAwait(false); } diff --git a/MediaBrowser.Providers/Movies/BoxSetProviderFromXml.cs b/MediaBrowser.Providers/Movies/BoxSetProviderFromXml.cs index 1a9384e3a..e697738fe 100644 --- a/MediaBrowser.Providers/Movies/BoxSetProviderFromXml.cs +++ b/MediaBrowser.Providers/Movies/BoxSetProviderFromXml.cs @@ -1,6 +1,7 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -43,16 +44,17 @@ namespace MediaBrowser.Providers.Movies get { return MetadataProviderPriority.First; } } - /// <summary> - /// Override this to return the date that should be compared to the last refresh date - /// to determine if this provider should be re-fetched. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>DateTime.</returns> - protected override DateTime CompareDate(BaseItem item) + private const string XmlFileName = "collection.xml"; + protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo) { - var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "collection.xml")); - return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue; + var xml = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); + + if (xml == null) + { + return false; + } + + return FileSystem.GetLastWriteTimeUtc(xml, Logger) > providerInfo.LastRefreshed; } /// <summary> @@ -77,7 +79,7 @@ namespace MediaBrowser.Providers.Movies { cancellationToken.ThrowIfCancellationRequested(); - var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "collection.xml")); + var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); if (metadataFile != null) { diff --git a/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs b/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs index adc013699..753812293 100644 --- a/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs +++ b/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs @@ -168,14 +168,21 @@ namespace MediaBrowser.Providers.Movies // Process images var path = GetMovieDataPath(ConfigurationManager.ApplicationPaths, id); - var files = new DirectoryInfo(path) - .EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly) - .Select(i => i.LastWriteTimeUtc) - .ToList(); + try + { + var files = new DirectoryInfo(path) + .EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly) + .Select(i => i.LastWriteTimeUtc) + .ToList(); - if (files.Count > 0) + if (files.Count > 0) + { + return files.Max(); + } + } + catch (DirectoryNotFoundException) { - return files.Max(); + // Don't blow up } } @@ -192,11 +199,6 @@ namespace MediaBrowser.Providers.Movies { var dataPath = Path.Combine(GetMoviesDataPath(appPaths), tmdbId); - if (!Directory.Exists(dataPath)) - { - Directory.CreateDirectory(dataPath); - } - return dataPath; } @@ -209,11 +211,6 @@ namespace MediaBrowser.Providers.Movies { var dataPath = Path.Combine(appPaths.DataPath, "fanart-movies"); - if (!Directory.Exists(dataPath)) - { - Directory.CreateDirectory(dataPath); - } - return dataPath; } diff --git a/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs b/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs index f06009f4b..51b77599e 100644 --- a/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs +++ b/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs @@ -59,6 +59,8 @@ namespace MediaBrowser.Providers.Movies var path = FanArtMovieProvider.GetMoviesDataPath(_config.CommonApplicationPaths); + Directory.CreateDirectory(path); + var timestampFile = Path.Combine(path, "time.txt"); var timestampFileInfo = new FileInfo(timestampFile); @@ -146,10 +148,7 @@ namespace MediaBrowser.Providers.Movies movieDataPath = Path.Combine(movieDataPath, tmdbId); - if (!Directory.Exists(movieDataPath)) - { - Directory.CreateDirectory(movieDataPath); - } + Directory.CreateDirectory(movieDataPath); return FanArtMovieProvider.Current.DownloadMovieXml(movieDataPath, tmdbId, cancellationToken); } diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Movies/MovieDbProvider.cs index 474100855..1b25dc58f 100644 --- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbProvider.cs @@ -15,6 +15,7 @@ using System.Net; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Providers.Savers; namespace MediaBrowser.Providers.Movies { @@ -233,9 +234,15 @@ namespace MediaBrowser.Providers.Movies return item.LocationType == LocationType.FileSystem && item.ResolveArgs.ContainsMetaFileByName("collection.xml"); } - var xmlFileName = MovieProviderFromXml.GetXmlFilename(item); + var path = MovieXmlSaver.GetMovieSavePath(item); - return item.LocationType == LocationType.FileSystem && item.ResolveArgs.ContainsMetaFileByName(xmlFileName); + if (item.LocationType == LocationType.FileSystem) + { + // If mixed with multiple movies in one folder, resolve args won't have the file system children + return item.ResolveArgs.ContainsMetaFileByName(Path.GetFileName(path)) || File.Exists(path); + } + + return false; } /// <summary> diff --git a/MediaBrowser.Providers/Movies/MovieProviderFromXml.cs b/MediaBrowser.Providers/Movies/MovieProviderFromXml.cs index 256b74692..9ae6cfa43 100644 --- a/MediaBrowser.Providers/Movies/MovieProviderFromXml.cs +++ b/MediaBrowser.Providers/Movies/MovieProviderFromXml.cs @@ -1,9 +1,11 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Logging; +using MediaBrowser.Providers.Savers; using System; using System.IO; using System.Threading; @@ -52,23 +54,18 @@ namespace MediaBrowser.Providers.Movies get { return MetadataProviderPriority.First; } } - internal static string GetXmlFilename(BaseItem item) + protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo) { - const string filename = "movie.xml"; + var savePath = MovieXmlSaver.GetMovieSavePath(item); - return Path.Combine(item.MetaLocation, filename); - } + var xml = item.ResolveArgs.GetMetaFileByPath(savePath) ?? new FileInfo(savePath); - /// <summary> - /// Override this to return the date that should be compared to the last refresh date - /// to determine if this provider should be re-fetched. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>DateTime.</returns> - protected override DateTime CompareDate(BaseItem item) - { - var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, GetXmlFilename(item))); - return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue; + if (!xml.Exists) + { + return false; + } + + return FileSystem.GetLastWriteTimeUtc(xml, Logger) > providerInfo.LastRefreshed; } /// <summary> @@ -93,30 +90,24 @@ namespace MediaBrowser.Providers.Movies { cancellationToken.ThrowIfCancellationRequested(); - var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, GetXmlFilename(item))); + var path = MovieXmlSaver.GetMovieSavePath(item); - if (metadataFile != null) - { - var path = metadataFile.FullName; - - await XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); + await XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); - try - { - var video = (Video) item; - - await new MovieXmlParser(Logger, _itemRepo).FetchAsync(video, path, cancellationToken).ConfigureAwait(false); - } - finally - { - XmlParsingResourcePool.Release(); - } + try + { + var video = (Video)item; - SetLastRefreshed(item, DateTime.UtcNow); - return true; + await new MovieXmlParser(Logger, _itemRepo).FetchAsync(video, path, cancellationToken).ConfigureAwait(false); } + finally + { + XmlParsingResourcePool.Release(); + } + + SetLastRefreshed(item, DateTime.UtcNow); - return false; + return true; } } } diff --git a/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs b/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs index 7fe646c78..ab90675fd 100644 --- a/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs +++ b/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs @@ -1,5 +1,6 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Logging; using System; @@ -38,16 +39,17 @@ namespace MediaBrowser.Providers.Movies get { return MetadataProviderPriority.Second; } } - /// <summary> - /// Override this to return the date that should be compared to the last refresh date - /// to determine if this provider should be re-fetched. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>DateTime.</returns> - protected override DateTime CompareDate(BaseItem item) + private const string XmlFileName = "person.xml"; + protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo) { - var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "person.xml")); - return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue; + var xml = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); + + if (xml == null) + { + return false; + } + + return FileSystem.GetLastWriteTimeUtc(xml, Logger) > providerInfo.LastRefreshed; } /// <summary> @@ -72,7 +74,7 @@ namespace MediaBrowser.Providers.Movies { cancellationToken.ThrowIfCancellationRequested(); - var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "person.xml")); + var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); if (metadataFile != null) { diff --git a/MediaBrowser.Providers/Music/ArtistProviderFromXml.cs b/MediaBrowser.Providers/Music/ArtistProviderFromXml.cs index 061ebd648..9353d4565 100644 --- a/MediaBrowser.Providers/Music/ArtistProviderFromXml.cs +++ b/MediaBrowser.Providers/Music/ArtistProviderFromXml.cs @@ -1,6 +1,7 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -40,16 +41,17 @@ namespace MediaBrowser.Providers.Music get { return MetadataProviderPriority.First; } } - /// <summary> - /// Override this to return the date that should be compared to the last refresh date - /// to determine if this provider should be re-fetched. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>DateTime.</returns> - protected override DateTime CompareDate(BaseItem item) + private const string XmlFileName = "artist.xml"; + protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo) { - var entry = item.MetaLocation != null ? item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "artist.xml")) : null; - return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue; + var xml = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); + + if (xml == null) + { + return false; + } + + return FileSystem.GetLastWriteTimeUtc(xml, Logger) > providerInfo.LastRefreshed; } /// <summary> @@ -74,7 +76,7 @@ namespace MediaBrowser.Providers.Music { cancellationToken.ThrowIfCancellationRequested(); - var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "artist.xml")); + var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); if (metadataFile != null) { diff --git a/MediaBrowser.Providers/Music/FanArtArtistProvider.cs b/MediaBrowser.Providers/Music/FanArtArtistProvider.cs index 66efd58e6..131c73f38 100644 --- a/MediaBrowser.Providers/Music/FanArtArtistProvider.cs +++ b/MediaBrowser.Providers/Music/FanArtArtistProvider.cs @@ -163,14 +163,21 @@ namespace MediaBrowser.Providers.Music // Process images var path = GetArtistDataPath(ConfigurationManager.ApplicationPaths, musicBrainzId); - var files = new DirectoryInfo(path) - .EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly) - .Select(i => i.LastWriteTimeUtc) - .ToList(); + try + { + var files = new DirectoryInfo(path) + .EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly) + .Select(i => i.LastWriteTimeUtc) + .ToList(); - if (files.Count > 0) + if (files.Count > 0) + { + return files.Max(); + } + } + catch (DirectoryNotFoundException) { - return files.Max(); + } } @@ -192,11 +199,6 @@ namespace MediaBrowser.Providers.Music { var seriesDataPath = Path.Combine(GetArtistDataPath(appPaths), musicBrainzArtistId); - if (!Directory.Exists(seriesDataPath)) - { - Directory.CreateDirectory(seriesDataPath); - } - return seriesDataPath; } @@ -209,11 +211,6 @@ namespace MediaBrowser.Providers.Music { var dataPath = Path.Combine(appPaths.DataPath, "fanart-music"); - if (!Directory.Exists(dataPath)) - { - Directory.CreateDirectory(dataPath); - } - return dataPath; } diff --git a/MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs b/MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs index f7c3374d1..379866945 100644 --- a/MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs +++ b/MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs @@ -58,6 +58,8 @@ namespace MediaBrowser.Providers.Music var path = FanArtArtistProvider.GetArtistDataPath(_config.CommonApplicationPaths); + Directory.CreateDirectory(path); + var timestampFile = Path.Combine(path, "time.txt"); var timestampFileInfo = new FileInfo(timestampFile); @@ -167,10 +169,7 @@ namespace MediaBrowser.Providers.Music artistsDataPath = Path.Combine(artistsDataPath, musicBrainzId); - if (!Directory.Exists(artistsDataPath)) - { - Directory.CreateDirectory(artistsDataPath); - } + Directory.CreateDirectory(artistsDataPath); return FanArtArtistProvider.Current.DownloadArtistXml(artistsDataPath, musicBrainzId, cancellationToken); } diff --git a/MediaBrowser.Providers/Music/LastfmArtistByNameProvider.cs b/MediaBrowser.Providers/Music/LastfmArtistByNameProvider.cs index 5bc9debd3..26ac68c3d 100644 --- a/MediaBrowser.Providers/Music/LastfmArtistByNameProvider.cs +++ b/MediaBrowser.Providers/Music/LastfmArtistByNameProvider.cs @@ -3,11 +3,8 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; -using System; -using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -77,7 +74,7 @@ namespace MediaBrowser.Providers.Music var artist = (Artist)item; // See if we can avoid an http request by finding the matching MusicArtist entity - var musicArtist = FindMusicArtist(artist, LibraryManager); + var musicArtist = Artist.FindMusicArtist(artist, LibraryManager); if (musicArtist != null && !force) { @@ -88,29 +85,5 @@ namespace MediaBrowser.Providers.Music await base.FetchLastfmData(item, musicBrainzId, force, cancellationToken).ConfigureAwait(false); } } - - - /// <summary> - /// Finds the music artist. - /// </summary> - /// <param name="artist">The artist.</param> - /// <param name="libraryManager">The library manager.</param> - /// <returns>MusicArtist.</returns> - private static MusicArtist FindMusicArtist(Artist artist, ILibraryManager libraryManager) - { - var musicBrainzId = artist.GetProviderId(MetadataProviders.Musicbrainz); - - return libraryManager.RootFolder.RecursiveChildren - .OfType<MusicArtist>() - .FirstOrDefault(i => - { - if (!string.IsNullOrWhiteSpace(musicBrainzId) && string.Equals(musicBrainzId, i.GetProviderId(MetadataProviders.Musicbrainz), StringComparison.OrdinalIgnoreCase)) - { - return true; - } - - return false; - }); - } } } diff --git a/MediaBrowser.Providers/Savers/GameXmlSaver.cs b/MediaBrowser.Providers/Savers/GameXmlSaver.cs index 1e654f72f..eae811d6d 100644 --- a/MediaBrowser.Providers/Savers/GameXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/GameXmlSaver.cs @@ -1,9 +1,9 @@ -using System.Collections.Generic; -using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Providers.Movies; using System; +using System.Collections.Generic; using System.Globalization; using System.IO; using System.Security; @@ -88,6 +88,16 @@ namespace MediaBrowser.Providers.Savers public string GetSavePath(BaseItem item) { + return GetGameSavePath(item); + } + + public static string GetGameSavePath(BaseItem item) + { + if (item.IsInMixedFolder) + { + return Path.ChangeExtension(item.Path, ".xml"); + } + return Path.Combine(item.MetaLocation, "game.xml"); } } diff --git a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs index 761bcefd1..9b34a4ebe 100644 --- a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs @@ -1,11 +1,11 @@ -using System.Collections.Generic; -using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Providers.Movies; using System; +using System.Collections.Generic; using System.Globalization; using System.IO; using System.Security; @@ -118,12 +118,24 @@ namespace MediaBrowser.Providers.Savers public string GetSavePath(BaseItem item) { + return GetMovieSavePath(item); + } + + public static string GetMovieSavePath(BaseItem item) + { if (item.IsInMixedFolder) { return Path.ChangeExtension(item.Path, ".xml"); } - var filename = MovieProviderFromXml.GetXmlFilename(item); + var filename = GetXmlFilename(item); + + return Path.Combine(item.MetaLocation, filename); + } + + private static string GetXmlFilename(BaseItem item) + { + const string filename = "movie.xml"; return Path.Combine(item.MetaLocation, filename); } diff --git a/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs b/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs index 900e8059f..a37d78c90 100644 --- a/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs +++ b/MediaBrowser.Providers/Savers/XmlSaverHelpers.cs @@ -98,10 +98,7 @@ namespace MediaBrowser.Providers.Savers var parentPath = Path.GetDirectoryName(path); - if (!Directory.Exists(parentPath)) - { - Directory.CreateDirectory(parentPath); - } + Directory.CreateDirectory(parentPath); var wasHidden = false; diff --git a/MediaBrowser.Providers/TV/EpisodeImageFromMediaLocationProvider.cs b/MediaBrowser.Providers/TV/EpisodeImageFromMediaLocationProvider.cs index 896b32f6f..32dd0cf38 100644 --- a/MediaBrowser.Providers/TV/EpisodeImageFromMediaLocationProvider.cs +++ b/MediaBrowser.Providers/TV/EpisodeImageFromMediaLocationProvider.cs @@ -90,7 +90,7 @@ namespace MediaBrowser.Providers.TV var parent = item.ResolveArgs.Parent; - ValidateImage(episode, item.MetaLocation); + ValidateImage(episode); cancellationToken.ThrowIfCancellationRequested(); @@ -106,7 +106,7 @@ namespace MediaBrowser.Providers.TV /// <param name="episode">The episode.</param> /// <param name="metadataFolderPath">The metadata folder path.</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> - private void ValidateImage(Episode episode, string metadataFolderPath) + private void ValidateImage(Episode episode) { var path = episode.PrimaryImagePath; diff --git a/MediaBrowser.Providers/TV/EpisodeProviderFromXml.cs b/MediaBrowser.Providers/TV/EpisodeProviderFromXml.cs index e91d7ead7..c7f85358c 100644 --- a/MediaBrowser.Providers/TV/EpisodeProviderFromXml.cs +++ b/MediaBrowser.Providers/TV/EpisodeProviderFromXml.cs @@ -1,6 +1,7 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; @@ -59,12 +60,12 @@ namespace MediaBrowser.Providers.TV } /// <summary> - /// Override this to return the date that should be compared to the last refresh date - /// to determine if this provider should be re-fetched. + /// Needses the refresh based on compare date. /// </summary> /// <param name="item">The item.</param> - /// <returns>DateTime.</returns> - protected override DateTime CompareDate(BaseItem item) + /// <param name="providerInfo">The provider info.</param> + /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> + protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo) { var metadataFile = Path.Combine(item.MetaLocation, Path.ChangeExtension(Path.GetFileName(item.Path), ".xml")); @@ -72,10 +73,10 @@ namespace MediaBrowser.Providers.TV if (file == null) { - return base.CompareDate(item); + return false; } - return file.LastWriteTimeUtc; + return FileSystem.GetLastWriteTimeUtc(file, Logger) > providerInfo.LastRefreshed; } /// <summary> diff --git a/MediaBrowser.Providers/TV/FanArtTVProvider.cs b/MediaBrowser.Providers/TV/FanArtTVProvider.cs index bc2b28f1c..972665af7 100644 --- a/MediaBrowser.Providers/TV/FanArtTVProvider.cs +++ b/MediaBrowser.Providers/TV/FanArtTVProvider.cs @@ -100,14 +100,21 @@ namespace MediaBrowser.Providers.TV // Process images var path = GetSeriesDataPath(ConfigurationManager.ApplicationPaths, id); - var files = new DirectoryInfo(path) - .EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly) - .Select(i => i.LastWriteTimeUtc) - .ToList(); + try + { + var files = new DirectoryInfo(path) + .EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly) + .Select(i => i.LastWriteTimeUtc) + .ToList(); - if (files.Count > 0) + if (files.Count > 0) + { + return files.Max(); + } + } + catch (DirectoryNotFoundException) { - return files.Max(); + // Don't blow up } } @@ -148,11 +155,6 @@ namespace MediaBrowser.Providers.TV { var seriesDataPath = Path.Combine(GetSeriesDataPath(appPaths), seriesId); - if (!Directory.Exists(seriesDataPath)) - { - Directory.CreateDirectory(seriesDataPath); - } - return seriesDataPath; } @@ -165,11 +167,6 @@ namespace MediaBrowser.Providers.TV { var dataPath = Path.Combine(appPaths.DataPath, "fanart-tv"); - if (!Directory.Exists(dataPath)) - { - Directory.CreateDirectory(dataPath); - } - return dataPath; } diff --git a/MediaBrowser.Providers/TV/FanArtTvUpdatesPrescanTask.cs b/MediaBrowser.Providers/TV/FanArtTvUpdatesPrescanTask.cs index 047741055..2a8e01974 100644 --- a/MediaBrowser.Providers/TV/FanArtTvUpdatesPrescanTask.cs +++ b/MediaBrowser.Providers/TV/FanArtTvUpdatesPrescanTask.cs @@ -59,6 +59,8 @@ namespace MediaBrowser.Providers.TV var path = FanArtTvProvider.GetSeriesDataPath(_config.CommonApplicationPaths); + Directory.CreateDirectory(path); + var timestampFile = Path.Combine(path, "time.txt"); var timestampFileInfo = new FileInfo(timestampFile); @@ -161,10 +163,7 @@ namespace MediaBrowser.Providers.TV seriesDataPath = Path.Combine(seriesDataPath, tvdbId); - if (!Directory.Exists(seriesDataPath)) - { - Directory.CreateDirectory(seriesDataPath); - } + Directory.CreateDirectory(seriesDataPath); return FanArtTvProvider.Current.DownloadSeriesXml(seriesDataPath, tvdbId, cancellationToken); } diff --git a/MediaBrowser.Providers/TV/RemoteSeriesProvider.cs b/MediaBrowser.Providers/TV/RemoteSeriesProvider.cs index a250c9060..ef315f5cb 100644 --- a/MediaBrowser.Providers/TV/RemoteSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/RemoteSeriesProvider.cs @@ -171,14 +171,21 @@ namespace MediaBrowser.Providers.TV // Process images var path = GetSeriesDataPath(ConfigurationManager.ApplicationPaths, seriesId); - var files = new DirectoryInfo(path) - .EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly) - .Select(i => i.LastWriteTimeUtc) - .ToList(); + try + { + var files = new DirectoryInfo(path) + .EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly) + .Select(i => i.LastWriteTimeUtc) + .ToList(); - if (files.Count > 0) + if (files.Count > 0) + { + return files.Max(); + } + } + catch (DirectoryNotFoundException) { - return files.Max(); + // Don't blow up } } @@ -299,11 +306,6 @@ namespace MediaBrowser.Providers.TV { var seriesDataPath = Path.Combine(GetSeriesDataPath(appPaths), seriesId); - if (!Directory.Exists(seriesDataPath)) - { - Directory.CreateDirectory(seriesDataPath); - } - return seriesDataPath; } @@ -316,11 +318,6 @@ namespace MediaBrowser.Providers.TV { var dataPath = Path.Combine(appPaths.DataPath, "tvdb"); - if (!Directory.Exists(dataPath)) - { - Directory.CreateDirectory(dataPath); - } - return dataPath; } diff --git a/MediaBrowser.Providers/TV/SeasonProviderFromXml.cs b/MediaBrowser.Providers/TV/SeasonProviderFromXml.cs index 147e4d59b..0c8fcf066 100644 --- a/MediaBrowser.Providers/TV/SeasonProviderFromXml.cs +++ b/MediaBrowser.Providers/TV/SeasonProviderFromXml.cs @@ -1,6 +1,7 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -43,16 +44,17 @@ namespace MediaBrowser.Providers.TV get { return MetadataProviderPriority.First; } } - /// <summary> - /// Override this to return the date that should be compared to the last refresh date - /// to determine if this provider should be re-fetched. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>DateTime.</returns> - protected override DateTime CompareDate(BaseItem item) + private const string XmlFileName = "season.xml"; + protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo) { - var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "season.xml")); - return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue; + var xml = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); + + if (xml == null) + { + return false; + } + + return FileSystem.GetLastWriteTimeUtc(xml, Logger) > providerInfo.LastRefreshed; } /// <summary> @@ -77,7 +79,7 @@ namespace MediaBrowser.Providers.TV { cancellationToken.ThrowIfCancellationRequested(); - var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "season.xml")); + var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); if (metadataFile != null) { diff --git a/MediaBrowser.Providers/TV/SeriesProviderFromXml.cs b/MediaBrowser.Providers/TV/SeriesProviderFromXml.cs index 3aec76ad4..67d6e423c 100644 --- a/MediaBrowser.Providers/TV/SeriesProviderFromXml.cs +++ b/MediaBrowser.Providers/TV/SeriesProviderFromXml.cs @@ -1,13 +1,14 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; using System; using System.IO; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Model.Logging; namespace MediaBrowser.Providers.TV { @@ -43,16 +44,17 @@ namespace MediaBrowser.Providers.TV get { return MetadataProviderPriority.First; } } - /// <summary> - /// Override this to return the date that should be compared to the last refresh date - /// to determine if this provider should be re-fetched. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>DateTime.</returns> - protected override DateTime CompareDate(BaseItem item) + private const string XmlFileName = "series.xml"; + protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo) { - var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "series.xml")); - return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue; + var xml = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); + + if (xml == null) + { + return false; + } + + return FileSystem.GetLastWriteTimeUtc(xml, Logger) > providerInfo.LastRefreshed; } /// <summary> @@ -77,7 +79,7 @@ namespace MediaBrowser.Providers.TV { cancellationToken.ThrowIfCancellationRequested(); - var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "series.xml")); + var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, XmlFileName)); if (metadataFile != null) { diff --git a/MediaBrowser.Providers/TV/TvdbPrescanTask.cs b/MediaBrowser.Providers/TV/TvdbPrescanTask.cs index e6aa07be0..0bc7cc3e7 100644 --- a/MediaBrowser.Providers/TV/TvdbPrescanTask.cs +++ b/MediaBrowser.Providers/TV/TvdbPrescanTask.cs @@ -71,6 +71,8 @@ namespace MediaBrowser.Providers.TV var path = RemoteSeriesProvider.GetSeriesDataPath(_config.CommonApplicationPaths); + Directory.CreateDirectory(path); + var timestampFile = Path.Combine(path, "time.txt"); var timestampFileInfo = new FileInfo(timestampFile); @@ -295,10 +297,7 @@ namespace MediaBrowser.Providers.TV seriesDataPath = Path.Combine(seriesDataPath, id); - if (!Directory.Exists(seriesDataPath)) - { - Directory.CreateDirectory(seriesDataPath); - } + Directory.CreateDirectory(seriesDataPath); return RemoteSeriesProvider.Current.DownloadSeriesZip(id, seriesDataPath, cancellationToken); } |
