diff --git a/src/TaglibSharp.Tests/TaggingFormats/Id3V2Test.cs b/src/TaglibSharp.Tests/TaggingFormats/Id3V2Test.cs index d1c51152..f8ba2580 100644 --- a/src/TaglibSharp.Tests/TaggingFormats/Id3V2Test.cs +++ b/src/TaglibSharp.Tests/TaggingFormats/Id3V2Test.cs @@ -1568,6 +1568,40 @@ public void TestEventTimeCodesFrame () }); } + [Test] + public void TestInvolvedPersonsFrame () + { + var personFunction = new string[] {"Person1", "Function1", "Person2", "Function2"}; + var delimiter = new string(new char[1]{'\0'}); + + var ipls = ""; + foreach (var s in personFunction) { + ipls += s + delimiter; + } + ipls = ipls.Trim(new[] {'\0'}); + + ByteVector id = "IPLS"; + var frame = new TextInformationFrame (id) { + Text = new string[] { ipls } + }; + + FrameTest (frame, 3, + delegate (Frame f, StringType e) { + (f as TextInformationFrame).TextEncoding = e; + }, + (d, v) => new TextInformationFrame (d, v), + + delegate (Frame f, string m) { + var g = (f as TextInformationFrame); + Assert.AreEqual (id, g.FrameId, m); + var p = g.Text[0].Split(new[] { '\0' }); + for (var i = 0; i < p.Length; i++) { + Assert.AreEqual (personFunction[i], p[i], m); + } + }); + + } + delegate void TagTestFunc (Tag tag, string msg); void TagTestWithSave (ref Tag tag, TagTestFunc testFunc) diff --git a/src/TaglibSharp/Id3v2/FrameFactory.cs b/src/TaglibSharp/Id3v2/FrameFactory.cs index 38f302dc..1db22526 100644 --- a/src/TaglibSharp/Id3v2/FrameFactory.cs +++ b/src/TaglibSharp/Id3v2/FrameFactory.cs @@ -219,6 +219,11 @@ public static Frame CreateFrame (ByteVector data, File file, ref int offset, byt if (header.FrameId[0] == (byte)'T') return new TextInformationFrame (data, position, header, version); + // Involved People List (frames 4.4 in 2.3. in 2.4 this is a TIPL frame) + if (header.FrameId == FrameType.IPLS) + return new TextInformationFrame(data, position, + header, version); + // Unique File Identifier (frames 4.1) if (header.FrameId == FrameType.UFID) return new UniqueFileIdentifierFrame (data, position, header, version); diff --git a/src/TaglibSharp/Id3v2/FrameTypes.cs b/src/TaglibSharp/Id3v2/FrameTypes.cs index 336d4f1b..829253a2 100644 --- a/src/TaglibSharp/Id3v2/FrameTypes.cs +++ b/src/TaglibSharp/Id3v2/FrameTypes.cs @@ -42,6 +42,7 @@ static class FrameType public static readonly ReadOnlyByteVector COMM = "COMM"; public static readonly ReadOnlyByteVector EQUA = "EQUA"; public static readonly ReadOnlyByteVector GEOB = "GEOB"; + public static readonly ReadOnlyByteVector IPLS = "IPLS"; public static readonly ReadOnlyByteVector MCDI = "MCDI"; public static readonly ReadOnlyByteVector PCNT = "PCNT"; public static readonly ReadOnlyByteVector POPM = "POPM";