public void SetValues(List<string> fileInfoList) { _isMulti = true; _id3MultiEditHelp = Id3Handler.GetTagsAndIntersectionFields(fileInfoList); SetValues(); }
/// <summary> /// Returns the tags and the intersection of multiple files /// </summary> /// <param name="fileInfos">List of the fileinfos</param> /// <returns>The multi edit help tags</returns> public static Id3MultiEditHelp GetTagsAndIntersectionFields(List<string> fileInfos) { var id3MultiEditHelp = new Id3MultiEditHelp(); const string multiValues = "(multiple Values)"; foreach (var fileInfo in fileInfos) { var file = File.Create(fileInfo); var tag = file.TagTypes != TagTypes.Id3v2 ? file.Tag : file.GetTag(TagTypes.Id3v2); id3MultiEditHelp.TagList.Add(fileInfo, tag); } var performers = id3MultiEditHelp.TagList.Values.SelectMany(tag => tag.Performers) .ToList() .GroupBy(x => x) .Select(g => new KeyValuePair<int, string>(g.Count(), g.Key)) .ToList(); var albums = id3MultiEditHelp.TagList.Values.GroupBy(i => i.Album) .Select(g => new KeyValuePair<int, string>(g.Count(), g.First().Album)) .ToList(); var years = id3MultiEditHelp.TagList.Values.GroupBy(i => i.Year) .Select(g => new KeyValuePair<int, uint?>(g.Count(), g.First().Year)) .ToList(); var genres = id3MultiEditHelp.TagList.Values.GroupBy(i => i.JoinedGenres) .Select(g => new KeyValuePair<int, string>(g.Count(), g.First().JoinedGenres)) .ToList(); var comments = id3MultiEditHelp.TagList.Values.GroupBy(i => i.Comment) .Select(g => new KeyValuePair<int, string>(g.Count(), g.First().Comment)) .ToList(); var stars = id3MultiEditHelp.TagList.Values.GroupBy(i => i.GetPopularimeterFrame()?.Rating.ToStars()) .Select( g => new KeyValuePair<int, Stars?>(g.Count(), g.First().GetPopularimeterFrame()?.Rating.ToStars())) .ToList(); id3MultiEditHelp.Performers = performers.Count == 0 ? new List<Performer> { new Performer(multiValues) } : performers.Max(k => k.Key) == fileInfos.Count ? (from y in performers where y.Key.Equals(fileInfos.Count) select new Performer(y.Value)) .ToList() : new List<Performer> { new Performer(multiValues) }; id3MultiEditHelp.Albums = albums.Count == 0 ? new[] { multiValues } : albums.Max(k => k.Key) == fileInfos.Count ? (from y in albums where y.Key.Equals(fileInfos.Count) select y.Value).ToArray() : new[] { multiValues }; id3MultiEditHelp.Genres = genres.Count == 0 ? new string[0] : genres.Max(k => k.Key) == fileInfos.Count ? (from y in genres where y.Key.Equals(fileInfos.Count) select y.Value).ToArray() : new string[0]; id3MultiEditHelp.Rating = stars.First(y => y.Key.Equals(fileInfos.Count)).Value; id3MultiEditHelp.Year = years.FirstOrDefault(y => y.Key.Equals(fileInfos.Count)).Value; id3MultiEditHelp.Comment = comments.FirstOrDefault(x => x.Key == fileInfos.Count).Value ?? multiValues; return id3MultiEditHelp; }