Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        private bool IsMultiDiscAlbumFolder(string path)
        {
            var parser = new AlbumParser(new NamingOptions());

            return(parser.IsMultiPart(path));
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        public void AlbumParser_MultidiscPath_Identifies(string path, bool result)
        {
            var parser = new AlbumParser(_namingOptions);

            Assert.Equal(result, parser.IsMultiPart(path));
        }