protected override async Task RunTask() { var pd = MusicMetaDataMethods.GetPathData(musicOptions, taskData, true); if (pd != null) { await this.ExecuteTaskItemAsync(async (db) => { await DeleteAsync(db, pd); }); } }
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); } } } } } }
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); } } } }