Пример #1
0
        protected override async Task RunTask()
        {
            var pd = MusicMetaDataMethods.GetPathData(musicOptions, taskData, true);

            if (pd != null)
            {
                await this.ExecuteTaskItemAsync(async (db) =>
                {
                    await DeleteAsync(db, pd);
                });
            }
        }
Пример #2
0
        protected override async Task RunTask()
        {
            var pd = MusicMetaDataMethods.GetPathData(musicOptions, taskData);

            if (pd != null)
            {
                Debug.Assert(pd.MusicStyle == musicStyle);
                var results = await this.ExecuteTaskItemWithRetryAsync(async (db) => await CatalogueAsync(db, pd));

                if (results != null)
                {
                    foreach (var item in results)
                    {
                        var cr = item;//.result;
                        if (cr.Status == CatalogueStatus.Success && item.MusicSet != null)
                        {
                            if (cr.TaskItem != null && cr.TaskItem.Id > 0)
                            {
                                // possibly do not queue resampling tasks
                                if (cr.TaskItem.Type != TaskType.ResampleWork)
                                {
                                    QueueTask(cr.TaskItem);
                                }
                            }
                            switch (cr.MusicSetType)
                            {
                            case Type T when T == typeof(PopularMusicAlbumSet) || T == typeof(WesternClassicalAlbumSet):
                                log.Information($"{taskItem} {T.Name} {cr.Artist.Name} [A-{cr.Artist.Id}], {cr.Work.Name} [W-{cr.Work.Id}], {cr.Work.Tracks.Count()} tracks {GetTrackContentString(cr.Work)}");
                                break;

                            case Type T when T == typeof(WesternClassicalCompositionSet):
                                if (cr.Performance.Movements.Count() == 0)
                                {
                                    log.Warning($"{cr.Composition.Name} [C-{cr.Composition.Id}], \"{cr.Performance.Performers}\" [P-{cr.Performance.Id}] has no movements");
                                }
                                var work = cr.Performance.Movements.Select(m => m.Work).First();
                                log.Information($"{taskItem} {T.Name} {cr.Artist.Name} [A-{cr.Artist.Id}], {cr.Composition.Name} [C-{cr.Composition.Id}], {cr.Performance.Movements.Count()} movements, \"{cr.Performance.Performers}\" [P-{cr.Performance.Id}] (from {work.Name} [W-{work.Id}])");
                                break;
                            }
                            // send hub message that artist is new/modified
                            if (cr.Artist.Type != ArtistType.Various)
                            {
                                await this.playManager.SendArtistNewOrModified(cr.Artist.Id);
                            }
                        }
                    }
                }
            }
        }
Пример #3
0
        private void Catalogue()
        {
            void ListFiles(OpusFolder folder)
            {
                var files     = folder.GetFilesOnDisk();
                var partCount = files.Where(x => x.part != null).Select(x => x.part.Number).Distinct().Count();

                log.Information($"{(folder.IsCollection ? "Collection" : folder.ArtistName)}, {folder.OpusName}, {folder.Source}, {files.Count()} files in {partCount} parts {(folder.IsGenerated ? ", (generated)" : "")}");
            }

            var names = new string[]
            {
                @"D:\Music\flac\Western\Popular\Bruce Springsteen",
                @"D:\Music\flac\Western\Popular\Elton John",
                @"D:\Music\flac\Western\Popular\Bruce Springsteen\Born In The USA",
                @"D:\Music\flac\Western\Popular\Bruce Springsteen\The River",
                @"D:\Music\flac\Western\Popular\Collections",
                @"D:\Music\flac\Western\Opera\Collections\The Essential Maria Callas",
                @"D:\Music\flac\Western\Classical"
            };

            foreach (var name in names)
            {
                var pd = MusicMetaDataMethods.GetPathData(musicOptions, name);
                if (pd?.OpusPath != null)
                {
                    // single opus folder
                    var folder = new OpusFolder(musicOptions, pd);
                    ListFiles(folder);
                }
                else if (pd?.OpusPath == null && (pd?.IsCollections ?? false))
                {
                    var cf = new CollectionsFolder(musicOptions, pd.MusicStyle);
                    foreach (var folder in cf.GetOpusFolders())
                    {
                        ListFiles(folder);
                    }
                }
                else if (pd?.OpusPath == null && pd?.ArtistPath != null)
                {
                    // artist folder
                    var af = new ArtistFolder(musicOptions, pd.MusicStyle, pd.ArtistPath);
                    foreach (var folder in af.GetOpusFolders(name))
                    {
                        ListFiles(folder);
                    }
                }
                else if (pd != null)
                {
                    //style folder
                    foreach (var af in pd.MusicStyle.GetArtistFolders(musicOptions))
                    {
                        foreach (var folder in af.GetOpusFolders(name))
                        {
                            ListFiles(folder);
                        }
                    }
                    foreach (var folder in pd.MusicStyle.GetCollectionsFolder(musicOptions).GetOpusFolders(name))
                    {
                        ListFiles(folder);
                    }
                }
            }
        }