JeevanJames / Id3

Library to read, modify and write ID3 & Lyrics3 tags in MP3 files. Provides an extensible framework for retrieving ID3 information from online services.
Apache License 2.0
41 stars 17 forks source link

TRCK Parsing #29

Open spottedmahn opened 4 years ago

spottedmahn commented 4 years ago

I have some songs, from Amazon.com, that have a frame value of new byte[] { 0, 50, 47, 49, 53, 0 } for the TRCK frame and this library isn't recognizing the values.

foobar2000 doesn't have any issues parsing it though.

I've removed the beginning, ^, and end of line, $, anchors and now it parses the values.

[Fact]
public void TRCK_BugTest()
{
    //arrange
    var path = $@"{dirStart}\01-02- DNA [Explicit] - Copy.mp3";
    var mp3 = new Mp3(path, Mp3Permissions.ReadWrite);
    var tag = mp3.GetTag(Id3TagFamily.Version2X);
    //works after changing regex
    //removing start and end things
    //data that doesn't currently work:
    //var data = new byte[] { 0, 50, 47, 49, 53, 0 };
    //was
    //Regex TrackPattern = new Regex(@"^(\d+)(?:/(\d+))?$");
    //now
    //Regex TrackPattern = new Regex(@"(\d+)(?:/(\d+))?");
    Assert.Equal(2, tag.Track.Value);
    Assert.Equal(15, tag.Track.TrackCount);

    //act 
    //should throw an exception that data will be lost
    var newMp3 = new Mp3(path + " - trck test.mp3", Mp3Permissions.ReadWrite);
    newMp3.WriteTag(tag);
    newMp3.Dispose();

    //assert
    var newMp3Assert = new Mp3(path + " - trck test.mp3", Mp3Permissions.Read);
    var tagAssert = newMp3Assert.GetTag(Id3TagFamily.Version2X);
    Assert.Equal(tag.Track.TrackCount, tagAssert.Track.TrackCount);
    Assert.Equal(tag.Track.Value, tagAssert.Track.Value);
}

Thoughts? 💭