Пример #1
0
        protected (CatalogueStatus status, IEnumerable <Track> tracks) CatalogueTracks(Artist artist, Work album)
        {
            Debug.Assert(MusicDb != null);
            var tracks = new List <Track>();
            var result = CatalogueStatus.Success;

            if (!generated || MusicOptions.AllowOutOfDateGeneratedFiles || album.LastModified < FirstFile.FileLastWriteTimeUtc)
            {
                var filesByPart = MusicFiles.GroupBy(x => x.PartNumber);
                int count       = 0;
                foreach (var group in filesByPart.OrderBy(x => x.Key))
                {
                    var files = group.Select(x => x).ToArray();
                    //foreach(var mf in files)
                    for (int i = 0; i < files.Count(); ++i)
                    {
                        var mf    = files[i];
                        var track = GetTrack(artist, album, mf, i, count);
                        tracks.Add(track);
                    }
                    count += files.Count();
                }
                //foreach (var mf in MusicFiles)
                //{
                //    var track = GetTrack(artist, album, mf);
                //    tracks.Add(track);
                //}
            }
            else
            {
                // generated files are older than the album record
                // and may be out of date
                var path = Path.Combine(FirstFile.DiskRoot, FirstFile.StylePath, FirstFile.OpusPath);
                log.Warning($"{MusicFiles.Count()} files in {path} are generated and possibly out-of-date - files not catalogued");
                result = CatalogueStatus.GeneratedFilesOutOfDate;
                if (album.Tracks.Count() == 0)
                {
                    artist.Works.Remove(album);
                    if (artist.Works.Count() == 0)
                    {
                        MusicDb.Artists.Remove(artist);
                    }
                }
            }
            return(result, tracks);
        }