diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs index ef4602b8f..341ca2f42 100644 --- a/MediaBrowser.Api/LibraryService.cs +++ b/MediaBrowser.Api/LibraryService.cs @@ -269,12 +269,10 @@ namespace MediaBrowser.Api if (request.EnableInternetProviders ?? true) { item.LockedFields = request.LockedFields; - item.LockedImages = request.LockedImages; } else { item.LockedFields.Clear(); - item.LockedImages.Clear(); } foreach (var pair in request.ProviderIds.ToList()) diff --git a/MediaBrowser.Controller/Drawing/ImageExtensions.cs b/MediaBrowser.Controller/Drawing/ImageExtensions.cs index 847c5dbe0..3d3b947a0 100644 --- a/MediaBrowser.Controller/Drawing/ImageExtensions.cs +++ b/MediaBrowser.Controller/Drawing/ImageExtensions.cs @@ -73,23 +73,23 @@ namespace MediaBrowser.Controller.Drawing { // http://msdn.microsoft.com/en-us/library/system.drawing.graphics.fromimage.aspx - if (format == PixelFormat.Indexed) + if ((format & PixelFormat.Indexed) == PixelFormat.Indexed) { return false; } - if (format == PixelFormat.Undefined) + if ((format & PixelFormat.Undefined) == PixelFormat.Undefined) { return false; } - if (format == PixelFormat.DontCare) + if ((format & PixelFormat.DontCare) == PixelFormat.DontCare) { return false; } - if (format == PixelFormat.Format16bppArgb1555) + if ((format & PixelFormat.Format16bppArgb1555) == PixelFormat.Format16bppArgb1555) { return false; } - if (format == PixelFormat.Format16bppGrayScale) + if ((format & PixelFormat.Format16bppGrayScale) == PixelFormat.Format16bppGrayScale) { return false; } diff --git a/MediaBrowser.Controller/Dto/DtoBuilder.cs b/MediaBrowser.Controller/Dto/DtoBuilder.cs index 11cf5b152..05092ca2d 100644 --- a/MediaBrowser.Controller/Dto/DtoBuilder.cs +++ b/MediaBrowser.Controller/Dto/DtoBuilder.cs @@ -238,7 +238,6 @@ namespace MediaBrowser.Controller.Dto if (fields.Contains(ItemFields.MetadataSettings)) { dto.LockedFields = item.LockedFields; - dto.LockedImages = item.LockedImages; dto.EnableInternetProviders = !item.DontFetchMeta; } diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index bd2f5ef71..cfabbbadb 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -41,7 +41,6 @@ namespace MediaBrowser.Controller.Entities ThemeVideoIds = new List(); LocalTrailerIds = new List(); LockedFields = new List(); - LockedImages = new List(); } /// @@ -166,12 +165,6 @@ namespace MediaBrowser.Controller.Entities /// The locked fields. public List LockedFields { get; set; } - /// - /// Gets or sets the locked images. - /// - /// The locked images. - public List LockedImages { get; set; } - /// /// Determines whether the item has a saved local image of the specified name (jpg or png). /// diff --git a/MediaBrowser.Controller/IO/FileData.cs b/MediaBrowser.Controller/IO/FileData.cs index 8896d4fc1..306de1e3c 100644 --- a/MediaBrowser.Controller/IO/FileData.cs +++ b/MediaBrowser.Controller/IO/FileData.cs @@ -3,6 +3,7 @@ using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; using System.IO; +using System.Linq; namespace MediaBrowser.Controller.IO { @@ -29,22 +30,29 @@ namespace MediaBrowser.Controller.IO throw new ArgumentNullException("path"); } - var dict = new Dictionary(StringComparer.OrdinalIgnoreCase); - var entries = new DirectoryInfo(path).EnumerateFileSystemInfos(searchPattern, SearchOption.TopDirectoryOnly); + if (!resolveShortcuts && flattenFolderDepth == 0) + { + return entries.ToDictionary(i => i.FullName, StringComparer.OrdinalIgnoreCase); + } + + var dict = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var entry in entries) { var isDirectory = (entry.Attributes & FileAttributes.Directory) == FileAttributes.Directory; - if (resolveShortcuts && FileSystem.IsShortcut(entry.FullName)) + var fullName = entry.FullName; + + if (resolveShortcuts && FileSystem.IsShortcut(fullName)) { - var newPath = FileSystem.ResolveShortcut(entry.FullName); + var newPath = FileSystem.ResolveShortcut(fullName); if (string.IsNullOrWhiteSpace(newPath)) { //invalid shortcut - could be old or target could just be unavailable - logger.Warn("Encountered invalid shortcut: " + entry.FullName); + logger.Warn("Encountered invalid shortcut: " + fullName); continue; } @@ -57,18 +65,18 @@ namespace MediaBrowser.Controller.IO args.AddAdditionalLocation(newPath); } - dict[data.FullName] = data; + dict[newPath] = data; } else if (flattenFolderDepth > 0 && isDirectory) { - foreach (var child in GetFilteredFileSystemEntries(entry.FullName, logger, flattenFolderDepth: flattenFolderDepth - 1, resolveShortcuts: resolveShortcuts)) + foreach (var child in GetFilteredFileSystemEntries(fullName, logger, flattenFolderDepth: flattenFolderDepth - 1, resolveShortcuts: resolveShortcuts)) { dict[child.Key] = child.Value; } } else { - dict[entry.FullName] = entry; + dict[fullName] = entry; } } diff --git a/MediaBrowser.Controller/Library/ItemResolveArgs.cs b/MediaBrowser.Controller/Library/ItemResolveArgs.cs index 9ca2b6ad5..109ffe7e7 100644 --- a/MediaBrowser.Controller/Library/ItemResolveArgs.cs +++ b/MediaBrowser.Controller/Library/ItemResolveArgs.cs @@ -112,7 +112,7 @@ namespace MediaBrowser.Controller.Library return false; } - var parentDir = System.IO.Path.GetDirectoryName(FileInfo.FullName) ?? string.Empty; + var parentDir = System.IO.Path.GetDirectoryName(Path) ?? string.Empty; return (parentDir.Length > _appPaths.RootFolderPath.Length && parentDir.StartsWith(_appPaths.RootFolderPath, StringComparison.OrdinalIgnoreCase)); diff --git a/MediaBrowser.Controller/Library/TVUtils.cs b/MediaBrowser.Controller/Library/TVUtils.cs index 921bbb808..03df934cf 100644 --- a/MediaBrowser.Controller/Library/TVUtils.cs +++ b/MediaBrowser.Controller/Library/TVUtils.cs @@ -179,7 +179,7 @@ namespace MediaBrowser.Controller.Library private static bool IsSeasonFolder(string path) { // It's a season folder if it's named as such and does not contain any audio files, apart from theme.mp3 - return GetSeasonNumberFromPath(path) != null && !new DirectoryInfo(path).EnumerateFiles().Any(i => EntityResolutionHelper.IsAudioFile(i.FullName) && !string.Equals(Path.GetFileNameWithoutExtension(i.Name), BaseItem.ThemeSongFilename)); + return GetSeasonNumberFromPath(path) != null && !Directory.EnumerateFiles(path).Any(i => EntityResolutionHelper.IsAudioFile(i) && !string.Equals(Path.GetFileNameWithoutExtension(i), BaseItem.ThemeSongFilename)); } /// @@ -223,7 +223,9 @@ namespace MediaBrowser.Controller.Library } else { - if (EntityResolutionHelper.IsVideoFile(child.FullName) && GetEpisodeNumberFromFile(child.FullName, false).HasValue) + var fullName = child.FullName; + + if (EntityResolutionHelper.IsVideoFile(fullName) && GetEpisodeNumberFromFile(fullName, false).HasValue) { return true; } @@ -275,7 +277,7 @@ namespace MediaBrowser.Controller.Library } private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - + private static int? ParseEpisodeNumber(string val) { int num; diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index 85b286f9c..e6a11e968 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -470,12 +470,6 @@ namespace MediaBrowser.Model.Dto /// The locked fields. public List LockedFields { get; set; } - /// - /// Gets or sets the locked images. - /// - /// The locked images. - public List LockedImages { get; set; } - /// /// Gets or sets a value indicating whether [enable internet providers]. /// diff --git a/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs b/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs index 5245dca5f..b34a692d3 100644 --- a/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs +++ b/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs @@ -310,7 +310,7 @@ namespace MediaBrowser.Providers.Movies string path; var hd = ConfigurationManager.Configuration.DownloadHDFanArt ? "hd" : ""; - if (ConfigurationManager.Configuration.DownloadMovieImages.Logo && !item.HasImage(ImageType.Logo) && !item.LockedImages.Contains(ImageType.Logo)) + if (ConfigurationManager.Configuration.DownloadMovieImages.Logo && !item.HasImage(ImageType.Logo)) { var node = doc.SelectSingleNode("//fanart/movie/movielogos/" + hd + "movielogo[@lang = \"" + language + "\"]/@url") ?? @@ -328,7 +328,7 @@ namespace MediaBrowser.Providers.Movies } cancellationToken.ThrowIfCancellationRequested(); - if (ConfigurationManager.Configuration.DownloadMovieImages.Art && !item.HasImage(ImageType.Art) && !item.LockedImages.Contains(ImageType.Art)) + if (ConfigurationManager.Configuration.DownloadMovieImages.Art && !item.HasImage(ImageType.Art)) { var node = doc.SelectSingleNode("//fanart/movie/moviearts/" + hd + "movieart[@lang = \"" + language + "\"]/@url") ?? @@ -343,7 +343,7 @@ namespace MediaBrowser.Providers.Movies } cancellationToken.ThrowIfCancellationRequested(); - if (ConfigurationManager.Configuration.DownloadMovieImages.Disc && !item.HasImage(ImageType.Disc) && !item.LockedImages.Contains(ImageType.Disc)) + if (ConfigurationManager.Configuration.DownloadMovieImages.Disc && !item.HasImage(ImageType.Disc)) { var node = doc.SelectSingleNode("//fanart/movie/moviediscs/moviedisc[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/movie/moviediscs/moviedisc/@url"); @@ -356,7 +356,7 @@ namespace MediaBrowser.Providers.Movies cancellationToken.ThrowIfCancellationRequested(); - if (ConfigurationManager.Configuration.DownloadMovieImages.Banner && !item.HasImage(ImageType.Banner) && !item.LockedImages.Contains(ImageType.Banner)) + if (ConfigurationManager.Configuration.DownloadMovieImages.Banner && !item.HasImage(ImageType.Banner)) { var node = doc.SelectSingleNode("//fanart/movie/moviebanners/moviebanner[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/movie/moviebanners/moviebanner/@url"); @@ -369,7 +369,7 @@ namespace MediaBrowser.Providers.Movies cancellationToken.ThrowIfCancellationRequested(); - if (ConfigurationManager.Configuration.DownloadMovieImages.Thumb && !item.HasImage(ImageType.Thumb) && !item.LockedImages.Contains(ImageType.Thumb)) + if (ConfigurationManager.Configuration.DownloadMovieImages.Thumb && !item.HasImage(ImageType.Thumb)) { var node = doc.SelectSingleNode("//fanart/movie/moviethumbs/moviethumb[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/movie/moviethumbs/moviethumb/@url"); diff --git a/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs b/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs index 6b2d5b48b..f092decdf 100644 --- a/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs @@ -134,12 +134,6 @@ namespace MediaBrowser.Providers.Movies return false; } - // Refresh if tmdb id has changed - if (providerInfo.Data != GetComparisonData(item.GetProviderId(MetadataProviders.Tmdb))) - { - return true; - } - // Don't refresh if we already have both poster and backdrop and we're not refreshing images if (item.HasImage(ImageType.Primary) && item.BackdropImagePaths.Count > 0) { @@ -170,21 +164,10 @@ namespace MediaBrowser.Providers.Movies var status = await ProcessImages(item, images, cancellationToken).ConfigureAwait(false); - data.Data = GetComparisonData(item.GetProviderId(MetadataProviders.Tmdb)); - SetLastRefreshed(item, DateTime.UtcNow, status); return true; } - /// - /// Gets the comparison data. - /// - /// Guid. - private Guid GetComparisonData(string id) - { - return string.IsNullOrEmpty(id) ? Guid.Empty : id.GetMD5(); - } - /// /// Fetches the images. /// @@ -220,7 +203,7 @@ namespace MediaBrowser.Providers.Movies var status = ProviderRefreshStatus.Success; // poster - if (images.posters != null && images.posters.Count > 0 && !item.HasImage(ImageType.Primary) && !item.LockedImages.Contains(ImageType.Primary)) + if (images.posters != null && images.posters.Count > 0 && !item.HasImage(ImageType.Primary)) { var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); @@ -261,7 +244,7 @@ namespace MediaBrowser.Providers.Movies cancellationToken.ThrowIfCancellationRequested(); // backdrops - only download if earlier providers didn't find any (fanart) - if (images.backdrops != null && images.backdrops.Count > 0 && ConfigurationManager.Configuration.DownloadMovieImages.Backdrops && item.BackdropImagePaths.Count == 0 && !item.LockedImages.Contains(ImageType.Backdrop)) + if (images.backdrops != null && images.backdrops.Count > 0 && ConfigurationManager.Configuration.DownloadMovieImages.Backdrops && item.BackdropImagePaths.Count == 0) { var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); diff --git a/MediaBrowser.Providers/Movies/OpenMovieDatabaseProvider.cs b/MediaBrowser.Providers/Movies/OpenMovieDatabaseProvider.cs index 1507cf427..c88169c80 100644 --- a/MediaBrowser.Providers/Movies/OpenMovieDatabaseProvider.cs +++ b/MediaBrowser.Providers/Movies/OpenMovieDatabaseProvider.cs @@ -91,16 +91,6 @@ namespace MediaBrowser.Providers.Movies return item is Movie || item is MusicVideo; } - /// - /// Gets the comparison data. - /// - /// The imdb id. - /// Guid. - private Guid GetComparisonData(string imdbId) - { - return string.IsNullOrEmpty(imdbId) ? Guid.Empty : imdbId.GetMD5(); - } - /// /// Gets the priority. /// @@ -114,23 +104,6 @@ namespace MediaBrowser.Providers.Movies } } - /// - /// Needses the refresh internal. - /// - /// The item. - /// The provider info. - /// true if XXXX, false otherwise - protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo) - { - // Refresh if imdb id has changed - if (providerInfo.Data != GetComparisonData(item.GetProviderId(MetadataProviders.Imdb))) - { - return true; - } - - return base.NeedsRefreshInternal(item, providerInfo); - } - protected readonly CultureInfo UsCulture = new CultureInfo("en-US"); public override async Task FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken) @@ -147,7 +120,6 @@ namespace MediaBrowser.Providers.Movies if (string.IsNullOrEmpty(imdbId)) { - data.Data = GetComparisonData(imdbId); data.LastRefreshStatus = ProviderRefreshStatus.Success; return true; } @@ -181,7 +153,6 @@ namespace MediaBrowser.Providers.Movies } } - data.Data = GetComparisonData(item.GetProviderId(MetadataProviders.Imdb)); data.LastRefreshStatus = ProviderRefreshStatus.Success; SetLastRefreshed(item, DateTime.UtcNow); diff --git a/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs b/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs index 6fe4d3c7c..1b02aec3d 100644 --- a/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs +++ b/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs @@ -265,7 +265,7 @@ namespace MediaBrowser.Providers.Movies //still nothing - just get first one profile = searchResult.profiles[0]; } - if (profile != null && !person.HasImage(ImageType.Primary) && !person.LockedImages.Contains(ImageType.Primary)) + if (profile != null && !person.HasImage(ImageType.Primary)) { var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); diff --git a/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs b/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs index 4c7251d04..299ae2d06 100644 --- a/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs @@ -107,34 +107,27 @@ namespace MediaBrowser.Providers.Music return false; } - var comparisonData = Guid.Empty; + return base.NeedsRefreshInternal(item, providerInfo); + } + protected override DateTime CompareDate(BaseItem item) + { var artistMusicBrainzId = item.Parent.GetProviderId(MetadataProviders.Musicbrainz); - + if (!string.IsNullOrEmpty(artistMusicBrainzId)) { var artistXmlPath = FanArtArtistProvider.GetArtistDataPath(ConfigurationManager.CommonApplicationPaths, artistMusicBrainzId); artistXmlPath = Path.Combine(artistXmlPath, "fanart.xml"); - comparisonData = GetComparisonData(new FileInfo(artistXmlPath)); - } + var file = new FileInfo(artistXmlPath); + + if (file.Exists) + { + return file.LastWriteTimeUtc; + } + } - // Refresh anytime the parent mbz id changes - if (providerInfo.Data != comparisonData) - { - return true; - } - - return base.NeedsRefreshInternal(item, providerInfo); - } - - /// - /// Gets the comparison data. - /// - /// Guid. - private Guid GetComparisonData(FileInfo artistXmlFileInfo) - { - return artistXmlFileInfo.Exists ? (artistXmlFileInfo.FullName + artistXmlFileInfo.LastWriteTimeUtc.Ticks).GetMD5() : Guid.Empty; + return base.CompareDate(item); } /// @@ -158,8 +151,6 @@ namespace MediaBrowser.Providers.Music item.ProviderData[Id] = data; } - var comparisonData = Guid.Empty; - if (!string.IsNullOrEmpty(artistMusicBrainzId)) { var artistXmlPath = FanArtArtistProvider.GetArtistDataPath(ConfigurationManager.CommonApplicationPaths, artistMusicBrainzId); @@ -167,8 +158,6 @@ namespace MediaBrowser.Providers.Music var artistXmlFileInfo = new FileInfo(artistXmlPath); - comparisonData = GetComparisonData(artistXmlFileInfo); - if (artistXmlFileInfo.Exists) { var album = (MusicAlbum)item; @@ -187,7 +176,7 @@ namespace MediaBrowser.Providers.Music cancellationToken.ThrowIfCancellationRequested(); - if (ConfigurationManager.Configuration.DownloadMusicAlbumImages.Disc && !item.HasImage(ImageType.Disc) && !item.LockedImages.Contains(ImageType.Disc)) + if (ConfigurationManager.Configuration.DownloadMusicAlbumImages.Disc && !item.HasImage(ImageType.Disc)) { // Try try with the release entry Id, if that doesn't produce anything try the release group id var node = doc.SelectSingleNode("//fanart/music/albums/album[@id=\"" + releaseEntryId + "\"]/cdart/@url"); @@ -205,7 +194,7 @@ namespace MediaBrowser.Providers.Music } } - if (ConfigurationManager.Configuration.DownloadMusicAlbumImages.Primary && !item.HasImage(ImageType.Primary) && !item.LockedImages.Contains(ImageType.Primary)) + if (ConfigurationManager.Configuration.DownloadMusicAlbumImages.Primary && !item.HasImage(ImageType.Primary)) { // Try try with the release entry Id, if that doesn't produce anything try the release group id var node = doc.SelectSingleNode("//fanart/music/albums/album[@id=\"" + releaseEntryId + "\"]/albumcover/@url"); @@ -226,7 +215,6 @@ namespace MediaBrowser.Providers.Music } - data.Data = comparisonData; SetLastRefreshed(item, DateTime.UtcNow); return true; diff --git a/MediaBrowser.Providers/Music/FanArtArtistProvider.cs b/MediaBrowser.Providers/Music/FanArtArtistProvider.cs index 89bcd6164..b92d4ad0e 100644 --- a/MediaBrowser.Providers/Music/FanArtArtistProvider.cs +++ b/MediaBrowser.Providers/Music/FanArtArtistProvider.cs @@ -250,7 +250,7 @@ namespace MediaBrowser.Providers.Music } data.Data = GetComparisonData(item); - + SetLastRefreshed(item, DateTime.UtcNow); return true; } @@ -284,7 +284,7 @@ namespace MediaBrowser.Providers.Music } } } - + /// /// Fetches from XML. /// @@ -301,7 +301,7 @@ namespace MediaBrowser.Providers.Music string path; var hd = ConfigurationManager.Configuration.DownloadHDFanArt ? "hd" : ""; - if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Logo && !item.HasImage(ImageType.Logo) && !item.LockedImages.Contains(ImageType.Logo)) + if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Logo && !item.HasImage(ImageType.Logo)) { var node = doc.SelectSingleNode("//fanart/music/musiclogos/" + hd + "musiclogo/@url") ?? @@ -314,7 +314,7 @@ namespace MediaBrowser.Providers.Music } cancellationToken.ThrowIfCancellationRequested(); - if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Backdrops && item.BackdropImagePaths.Count == 0 && !item.LockedImages.Contains(ImageType.Backdrop)) + if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Backdrops && item.BackdropImagePaths.Count == 0) { var nodes = doc.SelectNodes("//fanart/music/artistbackgrounds//@url"); if (nodes != null) @@ -338,7 +338,7 @@ namespace MediaBrowser.Providers.Music cancellationToken.ThrowIfCancellationRequested(); - if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Art && !item.HasImage(ImageType.Art) && !item.LockedImages.Contains(ImageType.Art)) + if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Art && !item.HasImage(ImageType.Art)) { var node = doc.SelectSingleNode("//fanart/music/musicarts/" + hd + "musicart/@url") ?? @@ -351,7 +351,7 @@ namespace MediaBrowser.Providers.Music } cancellationToken.ThrowIfCancellationRequested(); - if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Banner && !item.HasImage(ImageType.Banner) && !item.LockedImages.Contains(ImageType.Banner)) + if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Banner && !item.HasImage(ImageType.Banner)) { var node = doc.SelectSingleNode("//fanart/music/musicbanners/" + hd + "musicbanner/@url") ?? doc.SelectSingleNode("//fanart/music/musicbanners/musicbanner/@url"); @@ -365,7 +365,7 @@ namespace MediaBrowser.Providers.Music cancellationToken.ThrowIfCancellationRequested(); // Artist thumbs are actually primary images (they are square/portrait) - if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Primary && !item.HasImage(ImageType.Primary) && !item.LockedImages.Contains(ImageType.Primary)) + if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Primary && !item.HasImage(ImageType.Primary)) { var node = doc.SelectSingleNode("//fanart/music/artistthumbs/artistthumb/@url"); path = node != null ? node.Value : null; diff --git a/MediaBrowser.Providers/TV/FanArtSeasonProvider.cs b/MediaBrowser.Providers/TV/FanArtSeasonProvider.cs index ee9066773..ccdfc2a81 100644 --- a/MediaBrowser.Providers/TV/FanArtSeasonProvider.cs +++ b/MediaBrowser.Providers/TV/FanArtSeasonProvider.cs @@ -45,28 +45,7 @@ namespace MediaBrowser.Providers.TV return item is Season; } - /// - /// Needses the refresh internal. - /// - /// The item. - /// The provider info. - /// true if XXXX, false otherwise - protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo) - { - if (GetComparisonData(item) != providerInfo.Data) - { - return true; - } - - return base.NeedsRefreshInternal(item, providerInfo); - } - - /// - /// Gets the comparison data. - /// - /// The item. - /// Guid. - private Guid GetComparisonData(BaseItem item) + protected override DateTime CompareDate(BaseItem item) { var season = (Season)item; var seriesId = season.Series != null ? season.Series.GetProviderId(MetadataProviders.Tvdb) : null; @@ -78,24 +57,13 @@ namespace MediaBrowser.Providers.TV var imagesFileInfo = new FileInfo(imagesXmlPath); - return GetComparisonData(imagesFileInfo); + if (imagesFileInfo.Exists) + { + return imagesFileInfo.LastWriteTimeUtc; + } } - return Guid.Empty; - } - - /// - /// Gets the comparison data. - /// - /// The images file info. - /// Guid. - private Guid GetComparisonData(FileInfo imagesFileInfo) - { - var date = imagesFileInfo.Exists ? imagesFileInfo.LastWriteTimeUtc : DateTime.MinValue; - - var key = date.Ticks + imagesFileInfo.FullName; - - return key.GetMD5(); + return base.CompareDate(item); } /// @@ -138,8 +106,6 @@ namespace MediaBrowser.Providers.TV item.ProviderData[Id] = data; } - data.Data = GetComparisonData(imagesFileInfo); - SetLastRefreshed(item, DateTime.UtcNow); return true; } @@ -165,7 +131,7 @@ namespace MediaBrowser.Providers.TV var language = ConfigurationManager.Configuration.PreferredMetadataLanguage.ToLower(); - if (ConfigurationManager.Configuration.DownloadSeasonImages.Thumb && !season.HasImage(ImageType.Thumb) && !season.LockedImages.Contains(ImageType.Thumb)) + if (ConfigurationManager.Configuration.DownloadSeasonImages.Thumb && !season.HasImage(ImageType.Thumb)) { var node = doc.SelectSingleNode("//fanart/series/seasonthumbs/seasonthumb[@lang = \"" + language + "\"][@season = \"" + seasonNumber + "\"]/@url") ?? doc.SelectSingleNode("//fanart/series/seasonthumbs/seasonthumb[@season = \"" + seasonNumber + "\"]/@url"); diff --git a/MediaBrowser.Providers/TV/FanArtTVProvider.cs b/MediaBrowser.Providers/TV/FanArtTVProvider.cs index bc36d50ee..ea0a1c128 100644 --- a/MediaBrowser.Providers/TV/FanArtTVProvider.cs +++ b/MediaBrowser.Providers/TV/FanArtTVProvider.cs @@ -225,7 +225,7 @@ namespace MediaBrowser.Providers.TV var language = ConfigurationManager.Configuration.PreferredMetadataLanguage.ToLower(); var hd = ConfigurationManager.Configuration.DownloadHDFanArt ? "hdtv" : "clear"; - if (ConfigurationManager.Configuration.DownloadSeriesImages.Logo && !item.HasImage(ImageType.Logo) && !item.LockedImages.Contains(ImageType.Logo)) + if (ConfigurationManager.Configuration.DownloadSeriesImages.Logo && !item.HasImage(ImageType.Logo)) { var node = doc.SelectSingleNode("//fanart/series/" + hd + "logos/" + hd + "logo[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/series/clearlogos/clearlogo[@lang = \"" + language + "\"]/@url") ?? @@ -241,7 +241,7 @@ namespace MediaBrowser.Providers.TV cancellationToken.ThrowIfCancellationRequested(); hd = ConfigurationManager.Configuration.DownloadHDFanArt ? "hd" : ""; - if (ConfigurationManager.Configuration.DownloadSeriesImages.Art && !item.HasImage(ImageType.Art) && !item.LockedImages.Contains(ImageType.Art)) + if (ConfigurationManager.Configuration.DownloadSeriesImages.Art && !item.HasImage(ImageType.Art)) { var node = doc.SelectSingleNode("//fanart/series/" + hd + "cleararts/" + hd + "clearart[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/series/cleararts/clearart[@lang = \"" + language + "\"]/@url") ?? @@ -256,7 +256,7 @@ namespace MediaBrowser.Providers.TV cancellationToken.ThrowIfCancellationRequested(); - if (ConfigurationManager.Configuration.DownloadSeriesImages.Thumb && !item.HasImage(ImageType.Thumb) && !item.LockedImages.Contains(ImageType.Thumb)) + if (ConfigurationManager.Configuration.DownloadSeriesImages.Thumb && !item.HasImage(ImageType.Thumb)) { var node = doc.SelectSingleNode("//fanart/series/tvthumbs/tvthumb[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/series/tvthumbs/tvthumb/@url"); @@ -267,7 +267,7 @@ namespace MediaBrowser.Providers.TV } } - if (ConfigurationManager.Configuration.DownloadSeriesImages.Banner && !item.HasImage(ImageType.Banner) && !item.LockedImages.Contains(ImageType.Banner)) + if (ConfigurationManager.Configuration.DownloadSeriesImages.Banner && !item.HasImage(ImageType.Banner)) { var node = doc.SelectSingleNode("//fanart/series/tbbanners/tvbanner[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/series/tbbanners/tvbanner/@url"); @@ -278,7 +278,7 @@ namespace MediaBrowser.Providers.TV } } - if (ConfigurationManager.Configuration.DownloadMovieImages.Backdrops && item.BackdropImagePaths.Count == 0 && !item.LockedImages.Contains(ImageType.Backdrop)) + if (ConfigurationManager.Configuration.DownloadMovieImages.Backdrops && item.BackdropImagePaths.Count == 0) { var nodes = doc.SelectNodes("//fanart/series/showbackgrounds//@url"); diff --git a/MediaBrowser.Providers/TV/RemoteEpisodeProvider.cs b/MediaBrowser.Providers/TV/RemoteEpisodeProvider.cs index e67dd254b..6e8531b07 100644 --- a/MediaBrowser.Providers/TV/RemoteEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/RemoteEpisodeProvider.cs @@ -117,20 +117,10 @@ namespace MediaBrowser.Providers.TV return false; } - if (GetComparisonData(item) != providerInfo.Data) - { - return true; - } - return base.NeedsRefreshInternal(item, providerInfo); } - /// - /// Gets the comparison data. - /// - /// The item. - /// Guid. - private Guid GetComparisonData(BaseItem item) + protected override DateTime CompareDate(BaseItem item) { var episode = (Episode)item; @@ -143,24 +133,13 @@ namespace MediaBrowser.Providers.TV var seriesXmlFileInfo = new FileInfo(seriesXmlPath); - return GetComparisonData(seriesXmlFileInfo); + if (seriesXmlFileInfo.Exists) + { + return seriesXmlFileInfo.LastWriteTimeUtc; + } } - - return Guid.Empty; - } - - /// - /// Gets the comparison data. - /// - /// The series XML file info. - /// Guid. - private Guid GetComparisonData(FileInfo seriesXmlFileInfo) - { - var date = seriesXmlFileInfo.Exists ? seriesXmlFileInfo.LastWriteTimeUtc : DateTime.MinValue; - - var key = date.Ticks + seriesXmlFileInfo.FullName; - - return key.GetMD5(); + + return base.CompareDate(item); } /// @@ -207,8 +186,6 @@ namespace MediaBrowser.Providers.TV item.ProviderData[Id] = data; } - data.Data = GetComparisonData(seriesXmlFileInfo); - SetLastRefreshed(item, DateTime.UtcNow, status); return true; } @@ -287,7 +264,7 @@ namespace MediaBrowser.Providers.TV var doc = new XmlDocument(); doc.LoadXml(episodeNode.OuterXml); - if (!episode.HasImage(ImageType.Primary) && !episode.LockedImages.Contains(ImageType.Primary)) + if (!episode.HasImage(ImageType.Primary)) { var p = doc.SafeGetString("//filename"); if (p != null) diff --git a/MediaBrowser.Providers/TV/RemoteSeasonProvider.cs b/MediaBrowser.Providers/TV/RemoteSeasonProvider.cs index 3e36d9289..179354c08 100644 --- a/MediaBrowser.Providers/TV/RemoteSeasonProvider.cs +++ b/MediaBrowser.Providers/TV/RemoteSeasonProvider.cs @@ -1,18 +1,17 @@ -using System.Net; -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Net; using System; using System.IO; +using System.Net; using System.Threading; using System.Threading.Tasks; using System.Xml; -using MediaBrowser.Model.Net; namespace MediaBrowser.Providers.TV { @@ -95,28 +94,7 @@ namespace MediaBrowser.Providers.TV } } - /// - /// Needses the refresh internal. - /// - /// The item. - /// The provider info. - /// true if XXXX, false otherwise - protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo) - { - if (GetComparisonData(item) != providerInfo.Data) - { - return true; - } - - return base.NeedsRefreshInternal(item, providerInfo); - } - - /// - /// Gets the comparison data. - /// - /// The item. - /// Guid. - private Guid GetComparisonData(BaseItem item) + protected override DateTime CompareDate(BaseItem item) { var season = (Season)item; var seriesId = season.Series != null ? season.Series.GetProviderId(MetadataProviders.Tvdb) : null; @@ -128,24 +106,13 @@ namespace MediaBrowser.Providers.TV var imagesFileInfo = new FileInfo(imagesXmlPath); - return GetComparisonData(imagesFileInfo); + if (imagesFileInfo.Exists) + { + return imagesFileInfo.LastWriteTimeUtc; + } } - - return Guid.Empty; - } - - /// - /// Gets the comparison data. - /// - /// The images file info. - /// Guid. - private Guid GetComparisonData(FileInfo imagesFileInfo) - { - var date = imagesFileInfo.Exists ? imagesFileInfo.LastWriteTimeUtc : DateTime.MinValue; - - var key = date.Ticks + imagesFileInfo.FullName; - - return key.GetMD5(); + + return base.CompareDate(item); } /// @@ -181,15 +148,6 @@ namespace MediaBrowser.Providers.TV } } - BaseProviderInfo data; - if (!item.ProviderData.TryGetValue(Id, out data)) - { - data = new BaseProviderInfo(); - item.ProviderData[Id] = data; - } - - data.Data = GetComparisonData(imagesFileInfo); - SetLastRefreshed(item, DateTime.UtcNow); return true; } @@ -213,7 +171,7 @@ namespace MediaBrowser.Providers.TV return; } - if (!season.HasImage(ImageType.Primary) && !season.LockedImages.Contains(ImageType.Primary)) + if (!season.HasImage(ImageType.Primary)) { var n = images.SelectSingleNode("//Banner[BannerType='season'][BannerType2='season'][Season='" + seasonNumber + "'][Language='" + ConfigurationManager.Configuration.PreferredMetadataLanguage + "']") ?? images.SelectSingleNode("//Banner[BannerType='season'][BannerType2='season'][Season='" + seasonNumber + "'][Language='en']"); @@ -226,7 +184,7 @@ namespace MediaBrowser.Providers.TV } } - if (ConfigurationManager.Configuration.DownloadSeasonImages.Banner && !season.HasImage(ImageType.Banner) && !season.LockedImages.Contains(ImageType.Banner)) + if (ConfigurationManager.Configuration.DownloadSeasonImages.Banner && !season.HasImage(ImageType.Banner)) { var n = images.SelectSingleNode("//Banner[BannerType='season'][BannerType2='seasonwide'][Season='" + seasonNumber + "'][Language='" + ConfigurationManager.Configuration.PreferredMetadataLanguage + "']") ?? images.SelectSingleNode("//Banner[BannerType='season'][BannerType2='seasonwide'][Season='" + seasonNumber + "'][Language='en']"); @@ -261,7 +219,7 @@ namespace MediaBrowser.Providers.TV } } - if (ConfigurationManager.Configuration.DownloadSeasonImages.Backdrops && season.BackdropImagePaths.Count == 0 && !season.LockedImages.Contains(ImageType.Backdrop)) + if (ConfigurationManager.Configuration.DownloadSeasonImages.Backdrops && season.BackdropImagePaths.Count == 0) { var n = images.SelectSingleNode("//Banner[BannerType='fanart'][Season='" + seasonNumber + "']"); if (n != null) diff --git a/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs b/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs index 3a54c784e..bf57d3c8c 100644 --- a/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs +++ b/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs @@ -104,28 +104,7 @@ namespace MediaBrowser.Providers.TV } } - /// - /// Needses the refresh internal. - /// - /// The item. - /// The provider info. - /// true if XXXX, false otherwise - protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo) - { - if (GetComparisonData(item) != providerInfo.Data) - { - return true; - } - - return base.NeedsRefreshInternal(item, providerInfo); - } - - /// - /// Gets the comparison data. - /// - /// The item. - /// Guid. - private Guid GetComparisonData(BaseItem item) + protected override DateTime CompareDate(BaseItem item) { var seriesId = item.GetProviderId(MetadataProviders.Tvdb); @@ -136,24 +115,13 @@ namespace MediaBrowser.Providers.TV var imagesFileInfo = new FileInfo(imagesXmlPath); - return GetComparisonData(imagesFileInfo); + if (imagesFileInfo.Exists) + { + return imagesFileInfo.LastWriteTimeUtc; + } } - - return Guid.Empty; - } - - /// - /// Gets the comparison data. - /// - /// The images file info. - /// Guid. - private Guid GetComparisonData(FileInfo imagesFileInfo) - { - var date = imagesFileInfo.Exists ? imagesFileInfo.LastWriteTimeUtc : DateTime.MinValue; - - var key = date.Ticks + imagesFileInfo.FullName; - - return key.GetMD5(); + + return base.CompareDate(item); } /// @@ -195,8 +163,6 @@ namespace MediaBrowser.Providers.TV item.ProviderData[Id] = data; } - data.Data = GetComparisonData(imagesFileInfo); - SetLastRefreshed(item, DateTime.UtcNow); return true; } @@ -215,7 +181,7 @@ namespace MediaBrowser.Providers.TV /// Task. private async Task FetchImages(Series series, XmlDocument images, CancellationToken cancellationToken) { - if (!series.HasImage(ImageType.Primary) && !series.LockedImages.Contains(ImageType.Primary)) + if (!series.HasImage(ImageType.Primary)) { var n = images.SelectSingleNode("//Banner[BannerType='poster']"); if (n != null) @@ -230,7 +196,7 @@ namespace MediaBrowser.Providers.TV } } - if (ConfigurationManager.Configuration.DownloadSeriesImages.Banner && !series.HasImage(ImageType.Banner) && !series.LockedImages.Contains(ImageType.Banner)) + if (ConfigurationManager.Configuration.DownloadSeriesImages.Banner && !series.HasImage(ImageType.Banner)) { var n = images.SelectSingleNode("//Banner[BannerType='series']"); if (n != null) @@ -245,7 +211,7 @@ namespace MediaBrowser.Providers.TV } } - if (series.BackdropImagePaths.Count == 0 && !series.LockedImages.Contains(ImageType.Backdrop)) + if (series.BackdropImagePaths.Count == 0) { var bdNo = series.BackdropImagePaths.Count; diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs index 4ee62b206..209ae0e45 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs @@ -53,7 +53,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().Select(file => file.FullName)) + foreach (var fullName in Directory.EnumerateFiles(path)) { if (EntityResolutionHelper.IsAudioFile(fullName)) foundAudio++; if (foundAudio >= 2) @@ -95,14 +95,14 @@ 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 file in list) + foreach (var fullName in list.Select(file => file.FullName)) { - if (EntityResolutionHelper.IsAudioFile(file.FullName)) foundAudio++; + if (EntityResolutionHelper.IsAudioFile(fullName)) foundAudio++; if (foundAudio >= 2) { return true; } - if (EntityResolutionHelper.IsVideoFile(file.FullName)) return false; + if (EntityResolutionHelper.IsVideoFile(fullName)) return false; } // or a single audio file and no video files diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index 30d14c44b..2c856fb1a 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -139,9 +139,11 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies // Loop through each child file/folder and see if we find a video foreach (var child in fileSystemEntries) { + var filename = child.Name; + if ((child.Attributes & FileAttributes.Directory) == FileAttributes.Directory) { - if (IsDvdDirectory(child.Name)) + if (IsDvdDirectory(filename)) { return new T { @@ -149,7 +151,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies VideoType = VideoType.Dvd }; } - if (IsBluRayDirectory(child.Name)) + if (IsBluRayDirectory(filename)) { return new T { @@ -158,7 +160,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies }; } - if (EntityResolutionHelper.IsMultiPartFile(child.Name)) + if (EntityResolutionHelper.IsMultiPartFile(filename)) { multiDiscFolders.Add(child); } @@ -167,7 +169,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies } // Don't misidentify xbmc trailers as a movie - if (child.Name.IndexOf(BaseItem.XbmcTrailerFileSuffix, StringComparison.OrdinalIgnoreCase) != -1) + if (filename.IndexOf(BaseItem.XbmcTrailerFileSuffix, StringComparison.OrdinalIgnoreCase) != -1) { continue; } @@ -215,9 +217,9 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies { var videoType = VideoType.BluRay; - folders = folders.Where(i => + var folderPaths = folders.Select(i => i.FullName).Where(i => { - var subfolders = Directory.GetDirectories(i.FullName).Select(Path.GetFileName).ToList(); + var subfolders = Directory.GetDirectories(i).Select(Path.GetFileName).ToList(); if (subfolders.Any(IsDvdDirectory)) { @@ -232,16 +234,16 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies return false; - }).OrderBy(i => i.FullName).ToList(); + }).OrderBy(i => i).ToList(); - if (folders.Count == 0) + if (folderPaths.Count == 0) { return null; } return new T { - Path = folders[0].FullName, + Path = folderPaths[0], IsMultiPart = true,