public void LoadTags(IEnumerable <string> movementFilenames, IEnumerable <WesternClassicalMusicFileTEO> trackTeos) { MovementFilenames = movementFilenames;// fileTeoList.Select(x => x.File); SetMovementTEOList(trackTeos); var performanceIdList = MovementList.Select(t => t.PerformanceId).Distinct(); Debug.Assert(performanceIdList.Count() == 1); PerformanceId = performanceIdList.First();// ?? 0; ComposerTag = new TagValueStatus(TagNames.Composer, MovementList.Where(x => x.ComposerTag != null).SelectMany(x => x.ComposerTag.Values)); CompositionTag = new TagValueStatus(TagNames.Composition, MovementList.Where(x => x.CompositionTag != null).SelectMany(x => x.CompositionTag.Values)); OrchestraTag = new TagValueStatus(TagNames.Orchestra, MovementList.Where(x => x.OrchestraTag != null).SelectMany(x => x.OrchestraTag.Values)); ConductorTag = new TagValueStatus(TagNames.Conductor, MovementList.Where(x => x.ConductorTag != null).SelectMany(x => x.ConductorTag.Values)); var allPerformers = MovementList .Where(x => x.PerformerTag != null) .SelectMany(x => x.PerformerTag.Values) .Select(x => x.Value) .ToList(); for (int i = 0; i < allPerformers.Count(); ++i) { var performer = allPerformers[i]; var p = Regex.Replace(performer, @"\(.*?\)", "").Trim(); allPerformers[i] = p; } allPerformers = allPerformers .Select(x => musicOptions.ReplaceAlias(x)) .Distinct(accentsAndCaseInsensitiveComparer) .OrderBy(x => x.GetLastName()) .ToList(); // now remove any performers that are already defined as orchestras foreach (var name in OrchestraTag.Values.Select(x => x.Value)) { var matched = allPerformers.FirstOrDefault(x => x.IsEqualIgnoreAccentsAndCase(name)); if (matched != null) { allPerformers.Remove(matched); } } // now remove any performers that are already defined as conductors foreach (var name in ConductorTag.Values.Select(x => x.Value)) { var matched = allPerformers.FirstOrDefault(x => x.IsEqualIgnoreAccentsAndCase(name)); if (matched != null) { allPerformers.Remove(matched); } } PerformerTag = new TagValueStatus(TagNames.Performer, allPerformers, true); }
protected override void LoadTags() { //base.LoadTags(); var mf = MusicFile; PerformanceId = mf.Track.Performance.Id; MovementNumberTag = new TagValueStatus(TagNames.MovementNumber, mf.Track.MovementNumber); var tags = mf.IdTags; TagValueStatus mergeTags(TagNames outputTag, params string[] keys) { var tvs = FindTag(outputTag, tags); if (tvs != null) { var values = new List <string>(tvs.Values.Select(x => x.Value)); foreach (var key in keys) { values.AddRange(findValues(key, tags)); } IEnumerable <string> excludeList = new string[0]; if (OrchestraTag != null) { excludeList = OrchestraTag.Values.Select(x => x.Value); } if (ConductorTag != null) { excludeList = excludeList.Union(ConductorTag.Values.Select(x => x.Value)); } //var excludeList = OrchestraTag?.Values.Select(x => x.Value) // .Union(ConductorTag?.Values.Select(x => x.Value)); tvs = new TagValueStatus(outputTag, values .Except(excludeList, new LastnameComparer()) .OrderBy(x => x.GetLastName())); } return(tvs); } ComposerTag = FindTag(TagNames.Composer, tags) ?? FindTag(TagNames.Artist, tags); CompositionTag = FindTag(TagNames.Composition, tags) ?? FindTag(TagNames.Work, tags); ConductorTag = FindTag(TagNames.Conductor, tags); OrchestraTag = FindTag(TagNames.Orchestra, tags); PerformerTag = mergeTags(TagNames.Performer, "PERFORMER", "PERFORMERS", "SOLOISTS"); }