/// <summary>
        /// Resolves Name, Year and differentiate alternative files and extras from regular audiobook files.
        /// </summary>
        /// <param name="files">List of files related to audiobook.</param>
        /// <returns>Returns IEnumerable of <see cref="AudioBookInfo"/>.</returns>
        public IEnumerable <AudioBookInfo> Resolve(IEnumerable <FileSystemMetadata> files)
        {
            // File with empty fullname will be sorted out here.
            var audiobookFileInfos = files
                                     .Select(i => _audioBookResolver.Resolve(i.FullName))
                                     .OfType <AudioBookFileInfo>()
                                     .ToList();

            var stackResult = StackResolver.ResolveAudioBooks(audiobookFileInfos);

            foreach (var stack in stackResult)
            {
                var stackFiles = stack.Files
                                 .Select(i => _audioBookResolver.Resolve(i))
                                 .OfType <AudioBookFileInfo>()
                                 .ToList();

                stackFiles.Sort();

                var nameParserResult = new AudioBookNameParser(_options).Parse(stack.Name);

                FindExtraAndAlternativeFiles(ref stackFiles, out var extras, out var alternativeVersions, nameParserResult);

                var info = new AudioBookInfo(
                    nameParserResult.Name,
                    nameParserResult.Year,
                    stackFiles,
                    extras,
                    alternativeVersions);

                yield return(info);
            }
        }
        public IEnumerable <AudioBookInfo> Resolve(IEnumerable <FileSystemMetadata> files)
        {
            var audioBookResolver = new AudioBookResolver(_options);

            var audiobookFileInfos = files
                                     .Select(i => audioBookResolver.Resolve(i.FullName, i.IsDirectory))
                                     .Where(i => i != null)
                                     .ToList();

            // Filter out all extras, otherwise they could cause stacks to not be resolved
            // See the unit test TestStackedWithTrailer
            var metadata = audiobookFileInfos
                           .Select(i => new FileSystemMetadata
            {
                FullName    = i.Path,
                IsDirectory = i.IsDirectory
            });

            var stackResult = new StackResolver(_options)
                              .ResolveAudioBooks(metadata);

            foreach (var stack in stackResult)
            {
                var stackFiles = stack.Files.Select(i => audioBookResolver.Resolve(i, stack.IsDirectoryStack)).ToList();
                stackFiles.Sort();
                var info = new AudioBookInfo
                {
                    Files = stackFiles,
                    Name  = stack.Name
                };

                yield return(info);
            }
        }
Beispiel #3
0
        public IEnumerable <AudioBookInfo> Resolve(IEnumerable <FileSystemMetadata> files)
        {
            var audioBookResolver = new AudioBookResolver(_options);

            var audiobookFileInfos = files
                                     .Select(i => audioBookResolver.Resolve(i.FullName, i.IsDirectory))
                                     .Where(i => i != null)
                                     .ToList();

            // Filter out all extras, otherwise they could cause stacks to not be resolved
            // See the unit test TestStackedWithTrailer
            var metadata = audiobookFileInfos
                           .Select(i => new FileSystemMetadata
            {
                FullName    = i.Path,
                IsDirectory = i.IsDirectory
            });

            var stackResult = new StackResolver(_options)
                              .ResolveAudioBooks(metadata);

            var list = new List <AudioBookInfo>();

            foreach (var stack in stackResult.Stacks)
            {
                var stackFiles = stack.Files.Select(i => audioBookResolver.Resolve(i, stack.IsDirectoryStack)).ToList();
                stackFiles.Sort();
                var info = new AudioBookInfo
                {
                    Files = stackFiles,
                    Name  = stack.Name
                };
                list.Add(info);
            }

            // Whatever files are left, just add them

            /*list.AddRange(remainingFiles.Select(i => new AudioBookInfo
             * {
             *  Files = new List<AudioBookFileInfo> { i },
             *  Name = i.,
             *  Year = i.Year
             * }));*/

            var orderedList = list.OrderBy(i => i.Name);

            return(orderedList);
        }