private static void TestTagDescriptionConversionMap() { ID3.Version[] versions = ID3.Version.Versions; for (int i = 0; i < versions.Length; i++) { TagDescription tgm = TagDescriptionMap.Instance[versions[i]]; FrameConversionMap fcm = tgm.Conversion; foreach (string oldFrameId in fcm.OldFrameIds) { UnitTest.Test(tgm.IsValidID(oldFrameId)); } if (i < versions.Length - 1) { foreach (string newFrameId in fcm.NewFrameIds) { TagDescription tgmNext = TagDescriptionMap.Instance[versions[i + 1]]; UnitTest.Test(tgmNext.IsValidID(newFrameId)); } } } }
public static void Load(Dictionary <Version, TagDescription> versionMap) { XmlDocument document = new XmlDocument(); using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( "ID3Lib.Resources.TagDescriptions.xml")) { document.Load(stream); } foreach (XmlNode node0 in document["TagDescriptions"]) { if (node0 is XmlElement) { XmlElement versionElement = node0 as XmlElement; Version v = Version.VersionByMajorMinor( Int32.Parse(versionElement.GetAttribute("Major")), Int32.Parse(versionElement.GetAttribute("Minor"))); TagDescription tg = new TagDescription(v); LoadClasses(tg, versionElement["Classes"]); LoadContentClasses(tg, versionElement["ContentClasses"]); LoadFrames(tg, versionElement["Frames"]); LoadInvalidFramePaddings(tg, versionElement["InvalidFrameIds"]); LoadConversions(tg, versionElement["Conversions"]); LoadTextCodecClasses(tg, versionElement["TextCodecs"]); versionMap.Add(v, tg); } } }
private static void TestTagDescriptionFactoryMethods() { ID3.Version[] versions = ID3.Version.Versions; for (int i = 0; i < versions.Length; i++) { TagDescription tgm = TagDescriptionMap.Instance[versions[i]]; UnitTest.Test(tgm.CreateTagCodec().IsSupported(versions[i])); UnitTest.Test(tgm.CreateFrameCodec().IsSupported(versions[i])); foreach (FrameDescription.FrameType frameType in Enum.GetValues(typeof(FrameDescription.FrameType))) { ID3.FrameContent content = tgm.CreateContent(frameType); UnitTest.Test(content.Type == frameType || content.Type == FrameDescription.FrameType.Binary); } foreach (FrameDescription.FrameType frameType in Enum.GetValues(typeof(FrameDescription.FrameType))) { ID3.Codec.FrameContentCodecBase codec = tgm.CreateContentCodec(frameType); UnitTest.Test(codec.Type == frameType || codec.Type == FrameDescription.FrameType.Binary); UnitTest.Test(codec.IsSupported(versions[i])); } } }
private static void LoadClasses(TagDescription tagDescription, XmlElement classesElement) { tagDescription.TagClass = Type.GetType(classesElement.GetAttribute("Tag")); tagDescription.TagCodecClass = Type.GetType(classesElement.GetAttribute("TagCodec")); tagDescription.FrameClass = Type.GetType(classesElement.GetAttribute("Frame")); tagDescription.FrameCodecClass = Type.GetType(classesElement.GetAttribute("FrameCodec")); }
private static void LoadFrames(TagDescription tagDescription, XmlElement framesElement) { foreach (XmlNode node in framesElement.ChildNodes) { if (node is XmlElement) { tagDescription.AddDescription(new FrameDescription(node)); } } }
private static void LoadContentClasses(TagDescription tagDescription, XmlElement contentClassesElement) { foreach (XmlNode node in contentClassesElement.ChildNodes) { if (node is XmlElement) { XmlElement element = node as XmlElement; tagDescription.AddContentClass( element.GetAttribute("Type").ToEnum <FrameDescription.FrameType>(), Type.GetType(element.GetAttribute("Class"))); } } }
private static void LoadInvalidFramePaddings(TagDescription tagDescription, XmlElement invalidFramesElement) { if (Object.ReferenceEquals(invalidFramesElement, null)) { return; } foreach (XmlNode node in invalidFramesElement.ChildNodes) { if (node is XmlElement) { tagDescription.AddInvalidButKnownPadding( (node as XmlElement).GetAttribute("Value")); } } }
private static void LoadConversions(TagDescription tagDescription, XmlElement conversionsElement) { if (Object.ReferenceEquals(conversionsElement, null)) { return; } foreach (XmlNode node0 in conversionsElement.ChildNodes) { if (node0 is XmlElement) { XmlElement element0 = node0 as XmlElement; tagDescription.Conversion.Add( element0.GetAttribute("Old"), element0.GetAttribute("New")); } } }
private static void LoadTextCodecClasses(TagDescription tagDescription, XmlElement textCodecs) { List <Type> codecClasses = new List <Type>(); foreach (XmlNode node0 in textCodecs.ChildNodes) { if (node0 is XmlElement) { XmlElement element0 = node0 as XmlElement; string codecClass = element0.GetAttribute("Class"); if (String.IsNullOrEmpty(codecClass)) { codecClasses.Add(null); } else { Type t = Type.GetType(codecClass); if (Object.ReferenceEquals(t, null)) { throw new Exception("Type failed"); } codecClasses.Add(t); } if (element0.HasAttribute("Preferred") && element0.GetAttribute("Preferred") == "True") { tagDescription.TextCodecClassPreferred = Type.GetType(codecClass); } } } tagDescription.TextCodecClasses = codecClasses.ToArray(); }
public Frame(TagDescription descmap) { DescriptionMap = descmap; }
public Tag(TagDescription descriptionMap) : this(descriptionMap.CreateTagCodec()) { DescriptionMap = descriptionMap; }
public FrameContentUserText(TagDescription tagDescription) : base(tagDescription) { }
public FrameContentComment(TagDescription tagDescription) : base(tagDescription) { }
public FrameContentTextList(TagDescription tagDescription) : base(tagDescription) { }
public FrameContentUrlLink(TagDescription description) : base(description) { }
public FrameContentText(TagDescription description) : base(description) { }
public Frame(TagDescription descmap, FrameMeaning meaning, string text) : this(descmap, meaning) { Content.Text = text; }
public FrameContentUserUrlLink(TagDescription tagDescription) : base(tagDescription) { }
private void Add(Version version, TagDescription tagDescription) { versionMap[version] = tagDescription; }
public FrameContentBinary(TagDescription description) : base(description) { }
public Frame(TagDescription descmap, string frameId) : this(descmap) { FrameId = frameId; }
public Frame(TagDescription descmap, FrameMeaning meaning) : this(descmap) { FrameId = descmap[meaning].FrameId; }
public FrameContentPicture(TagDescription description) : base(description) { }
public Frame(TagDescription descmap, string frameId, string text) : this(descmap, frameId) { Content.Text = text; }
public FrameContent(TagDescription description) { DescriptionMap = description; }