private Performance GetPerformance(Composition composition, string orchestras, string conductors, string performers) { Debug.Assert(MusicDb != null); var performance = composition.Performances.SingleOrDefault(p => p.Orchestras.IsEqualIgnoreAccentsAndCase(orchestras) && p.Conductors.IsEqualIgnoreAccentsAndCase(conductors) && p.Performers.IsEqualIgnoreAccentsAndCase(performers)); if (performance != null) { // find a unique name for this performance var index = 1; var found = false; while (!found) { var name = $"{performers} ({++index})"; performance = composition.Performances.SingleOrDefault(p => p.Performers.IsEqualIgnoreAccentsAndCase(name)); found = performance == null; } } performance = new Performance { Composition = composition, Orchestras = orchestras, Conductors = conductors, Performers = performers, AlphamericPerformers = performers.ToAlphaNumerics(), Year = FirstFile.GetYear() ?? 0 }; var movementNumber = 0; foreach (var track in MusicFiles.Select(mf => mf.Track).OrderBy(x => x.Number)) { if (track == null || track.Performance != null) { Debugger.Break(); } track.MovementNumber = ++movementNumber; performance.Movements.Add(track); } Debug.Assert(performance.Movements.Count > 0); composition.Performances.Add(performance); return(performance); }
protected override async Task LoadMusicTags() { var json = await ReadMusicTagJson(); if (json != null) { var teo = json.ToInstance <WesternClassicalAlbumTEO>(); performanceTEO = teo.PerformanceList.Single(x => x.MovementFilenames.All(f => MusicFiles.Select(mf => mf.File).SingleOrDefault(x => x.EndsWith(f, System.Globalization.CompareOptions.IgnoreCase)) != null) ); ComposerName = performanceTEO.ComposerTag.GetValue <string>(); CompositionName = performanceTEO.CompositionTag.GetValue <string>(); orchestras = performanceTEO.OrchestraTag.GetValues <string>(); conductors = performanceTEO.ConductorTag.GetValues <string>(); otherPerformers = performanceTEO.PerformerTag.GetValues <string>(); } }