Beispiel #1
0
        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);
        }
Beispiel #2
0
        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");
        }