Beispiel #1
0
        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));
                    }
                }
            }
        }
Beispiel #2
0
        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);
                }
            }
        }
Beispiel #3
0
        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]));
                }
            }
        }
Beispiel #4
0
 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"));
 }
Beispiel #5
0
 private static void LoadFrames(TagDescription tagDescription, XmlElement framesElement)
 {
     foreach (XmlNode node in framesElement.ChildNodes)
     {
         if (node is XmlElement)
         {
             tagDescription.AddDescription(new FrameDescription(node));
         }
     }
 }
Beispiel #6
0
        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")));
                }
            }
        }
Beispiel #7
0
        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"));
                }
            }
        }
Beispiel #8
0
        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"));
                }
            }
        }
Beispiel #9
0
        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();
        }
Beispiel #10
0
 public Frame(TagDescription descmap)
 {
     DescriptionMap = descmap;
 }
Beispiel #11
0
 public Tag(TagDescription descriptionMap)
     : this(descriptionMap.CreateTagCodec())
 {
     DescriptionMap = descriptionMap;
 }
Beispiel #12
0
 public FrameContentUserText(TagDescription tagDescription)
     : base(tagDescription)
 {
 }
Beispiel #13
0
 public FrameContentComment(TagDescription tagDescription)
     : base(tagDescription)
 {
 }
Beispiel #14
0
 public FrameContentTextList(TagDescription tagDescription)
     : base(tagDescription)
 {
 }
Beispiel #15
0
 public FrameContentUrlLink(TagDescription description)
     : base(description)
 {
 }
Beispiel #16
0
 public FrameContentText(TagDescription description)
     : base(description)
 {
 }
Beispiel #17
0
 public Frame(TagDescription descmap, FrameMeaning meaning, string text)
     : this(descmap, meaning)
 {
     Content.Text = text;
 }
Beispiel #18
0
 public FrameContentUserUrlLink(TagDescription tagDescription)
     : base(tagDescription)
 {
 }
Beispiel #19
0
 private void Add(Version version, TagDescription tagDescription)
 {
     versionMap[version] = tagDescription;
 }
Beispiel #20
0
 public FrameContentBinary(TagDescription description)
     : base(description)
 {
 }
Beispiel #21
0
 public Frame(TagDescription descmap, string frameId)
     : this(descmap)
 {
     FrameId = frameId;
 }
Beispiel #22
0
 public Frame(TagDescription descmap, FrameMeaning meaning)
     : this(descmap)
 {
     FrameId = descmap[meaning].FrameId;
 }
Beispiel #23
0
 public FrameContentPicture(TagDescription description)
     : base(description)
 {
 }
Beispiel #24
0
 public Frame(TagDescription descmap, string frameId, string text)
     : this(descmap, frameId)
 {
     Content.Text = text;
 }
Beispiel #25
0
 public FrameContent(TagDescription description)
 {
     DescriptionMap = description;
 }