From 37c27a26e90b7eff62cec9e2b6a6c003e79fcbe4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 26 Jul 2014 13:30:15 -0400 Subject: added sync job database --- .../Library/Resolvers/Audio/MusicAlbumResolver.cs | 43 ++++++++++++++++------ .../Library/Resolvers/Audio/MusicArtistResolver.cs | 15 +++++++- 2 files changed, 44 insertions(+), 14 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Library/Resolvers/Audio') diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs index 64d2db2e4..2ee3d49a4 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; @@ -6,6 +7,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; using System.IO; @@ -17,6 +19,15 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio /// public class MusicAlbumResolver : ItemResolver { + private readonly ILogger _logger; + private readonly IFileSystem _fileSystem; + + public MusicAlbumResolver(ILogger logger, IFileSystem fileSystem) + { + _logger = logger; + _fileSystem = fileSystem; + } + /// /// Gets the priority. /// @@ -64,10 +75,12 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio /// /// The path. /// The directory service. + /// The logger. + /// The file system. /// true if [is music album] [the specified data]; otherwise, false. - public static bool IsMusicAlbum(string path, IDirectoryService directoryService) + public static bool IsMusicAlbum(string path, IDirectoryService directoryService, ILogger logger, IFileSystem fileSystem) { - return ContainsMusic(directoryService.GetFileSystemEntries(path), true, directoryService); + return ContainsMusic(directoryService.GetFileSystemEntries(path), true, directoryService, logger, fileSystem); } /// @@ -75,13 +88,13 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio /// /// The args. /// true if [is music album] [the specified args]; otherwise, false. - public static bool IsMusicAlbum(ItemResolveArgs args) + private bool IsMusicAlbum(ItemResolveArgs args) { // Args points to an album if parent is an Artist folder or it directly contains music if (args.IsDirectory) { //if (args.Parent is MusicArtist) return true; //saves us from testing children twice - if (ContainsMusic(args.FileSystemChildren, true, args.DirectoryService)) return true; + if (ContainsMusic(args.FileSystemChildren, true, args.DirectoryService, _logger, _fileSystem)) return true; } return false; @@ -93,19 +106,23 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio /// The list. /// if set to true [allow subfolders]. /// The directory service. + /// The logger. + /// The file system. /// true if the specified list contains music; otherwise, false. - private static bool ContainsMusic(IEnumerable list, bool allowSubfolders, IDirectoryService directoryService) + private static bool ContainsMusic(IEnumerable list, bool allowSubfolders, IDirectoryService directoryService, ILogger logger, IFileSystem fileSystem) { // If list contains at least 2 audio files or at least one and no video files consider it to contain music var foundAudio = 0; + var discSubfolderCount = 0; + foreach (var fileSystemInfo in list) { if ((fileSystemInfo.Attributes & FileAttributes.Directory) == FileAttributes.Directory) { - if (allowSubfolders && IsAlbumSubfolder(fileSystemInfo, directoryService)) + if (allowSubfolders && IsAlbumSubfolder(fileSystemInfo, directoryService, logger, fileSystem)) { - return true; + discSubfolderCount++; } if (!IsAdditionalSubfolderAllowed(fileSystemInfo)) { @@ -118,7 +135,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio if (EntityResolutionHelper.IsAudioFile(fullName)) { // Don't resolve these into audio files - if (string.Equals(Path.GetFileNameWithoutExtension(fullName), BaseItem.ThemeSongFilename) && EntityResolutionHelper.IsAudioFile(fullName)) + if (string.Equals(fileSystem.GetFileNameWithoutExtension(fullName), BaseItem.ThemeSongFilename) && EntityResolutionHelper.IsAudioFile(fullName)) { continue; } @@ -135,16 +152,18 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio } // or a single audio file and no video files - return foundAudio > 0; + return foundAudio > 0 || discSubfolderCount > 0; } - private static bool IsAlbumSubfolder(FileSystemInfo directory, IDirectoryService directoryService) + private static bool IsAlbumSubfolder(FileSystemInfo directory, IDirectoryService directoryService, ILogger logger, IFileSystem fileSystem) { var path = directory.FullName; if (IsMultiDiscFolder(path)) { - return ContainsMusic(directoryService.GetFileSystemEntries(path), false, directoryService); + logger.Debug("Found multi-disc folder: " + path); + + return ContainsMusic(directoryService.GetFileSystemEntries(path), false, directoryService, logger, fileSystem); } return false; diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs index 4fa97fc9d..19a284d15 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs @@ -1,9 +1,11 @@ -using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; using System; using System.IO; using System.Linq; @@ -15,6 +17,15 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio /// public class MusicArtistResolver : ItemResolver { + private readonly ILogger _logger; + private readonly IFileSystem _fileSystem; + + public MusicArtistResolver(ILogger logger, IFileSystem fileSystem) + { + _logger = logger; + _fileSystem = fileSystem; + } + /// /// Gets the priority. /// @@ -61,7 +72,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio var directoryService = args.DirectoryService; // If we contain an album assume we are an artist folder - return args.FileSystemChildren.Where(i => (i.Attributes & FileAttributes.Directory) == FileAttributes.Directory).Any(i => MusicAlbumResolver.IsMusicAlbum(i.FullName, directoryService)) ? new MusicArtist() : null; + return args.FileSystemChildren.Where(i => (i.Attributes & FileAttributes.Directory) == FileAttributes.Directory).Any(i => MusicAlbumResolver.IsMusicAlbum(i.FullName, directoryService, _logger, _fileSystem)) ? new MusicArtist() : null; } } -- cgit v1.2.3