private bool ContainsMusic( IEnumerable <FileSystemMetadata> list, bool allowSubfolders, IDirectoryService directoryService, ILogger <MusicAlbumResolver> logger, IFileSystem fileSystem, ILibraryManager libraryManager) { // check for audio files before digging down into directories var foundAudioFile = list.Any(fileSystemInfo => !fileSystemInfo.IsDirectory && libraryManager.IsAudioFile(fileSystemInfo.FullName)); if (foundAudioFile) { // at least one audio file exists return(true); } if (!allowSubfolders) { // not music since no audio file exists and we're not looking into subfolders return(false); } var discSubfolderCount = 0; var namingOptions = ((LibraryManager)_libraryManager).GetNamingOptions(); var parser = new AlbumParser(namingOptions); var directories = list.Where(fileSystemInfo => fileSystemInfo.IsDirectory); var result = Parallel.ForEach(directories, (fileSystemInfo, state) => { var path = fileSystemInfo.FullName; var hasMusic = ContainsMusic(directoryService.GetFileSystemEntries(path), false, directoryService, logger, fileSystem, libraryManager); if (hasMusic) { if (parser.IsMultiPart(path)) { logger.LogDebug("Found multi-disc folder: " + path); Interlocked.Increment(ref discSubfolderCount); } else { // If there are folders underneath with music that are not multidisc, then this can't be a multi-disc album state.Stop(); } } }); if (!result.IsCompleted) { return(false); } return(discSubfolderCount > 0); }
private bool IsMultiDiscAlbumFolder(string path) { var parser = new AlbumParser(new NamingOptions()); return(parser.IsMultiPart(path)); }
/// <summary> /// Determine if the supplied list contains what we should consider music. /// </summary> private bool ContainsMusic( IEnumerable <FileSystemMetadata> list, bool allowSubfolders, IDirectoryService directoryService, ILogger logger, IFileSystem fileSystem, ILibraryManager libraryManager) { var discSubfolderCount = 0; var notMultiDisc = false; var namingOptions = ((LibraryManager)_libraryManager).GetNamingOptions(); var parser = new AlbumParser(namingOptions); foreach (var fileSystemInfo in list) { if (fileSystemInfo.IsDirectory) { if (allowSubfolders) { if (notMultiDisc) { continue; } var path = fileSystemInfo.FullName; var hasMusic = ContainsMusic(directoryService.GetFileSystemEntries(path), false, directoryService, logger, fileSystem, libraryManager); if (hasMusic) { if (parser.IsMultiPart(path)) { logger.LogDebug("Found multi-disc folder: " + path); discSubfolderCount++; } else { // If there are folders underneath with music that are not multidisc, then this can't be a multi-disc album notMultiDisc = true; } } } } else { var fullName = fileSystemInfo.FullName; if (libraryManager.IsAudioFile(fullName)) { return(true); } } } if (notMultiDisc) { return(false); } return(discSubfolderCount > 0); }
public void AlbumParser_MultidiscPath_Identifies(string path, bool result) { var parser = new AlbumParser(_namingOptions); Assert.Equal(result, parser.IsMultiPart(path)); }