Ticket #3511: mythmusic_compilation.2.diff

File mythmusic_compilation.2.diff, 2.5 KB (added by stuartm, 17 years ago)

Updated patch

  • metaiotaglib.h

     
    1212using TagLib::MPEG::File;
    1313using TagLib::Tag;
    1414using TagLib::ID3v2::UserTextIdentificationFrame;
     15using TagLib::ID3v2::TextIdentificationFrame;
    1516using TagLib::ID3v2::AttachedPictureFrame;
    1617using TagLib::String;
    1718using TagLib::MPEG::Properties;
  • metaiotaglib.cpp

     
    4343    if (!mdata->Artist().isEmpty())
    4444        tag->setArtist(QStringToTString(mdata->Artist()));
    4545
     46    // MusicBrainz ID
     47    UserTextIdentificationFrame *musicbrainz = NULL;
     48    musicbrainz = find(taglib->ID3v2Tag(), "MusicBrainz Album Artist Id");
     49
     50    // Compilation Artist (TPE4)
     51    TextIdentificationFrame *tpeframe = NULL;
     52    TagLib::ID3v2::FrameList tpelist = taglib->ID3v2Tag()->frameListMap()["TPE4"];
     53    if (!tpelist.isEmpty())
     54        tpeframe = (TextIdentificationFrame *)tpelist.front();
     55
    4656    if (mdata->Compilation())
    4757    {
    4858
    49         UserTextIdentificationFrame *musicbrainz =
    50             new UserTextIdentificationFrame(TagLib::String::UTF8);
    51         taglib->ID3v2Tag()->addFrame(musicbrainz);
    52         musicbrainz->setDescription("MusicBrainz Album Artist Id");
     59        if (!musicbrainz)
     60        {
     61            musicbrainz = new UserTextIdentificationFrame(TagLib::String::UTF8);
     62            taglib->ID3v2Tag()->addFrame(musicbrainz);
     63            musicbrainz->setDescription("MusicBrainz Album Artist Id");
     64        }
     65
    5366        musicbrainz->setText(MYTH_MUSICBRAINZ_ALBUMARTIST_UUID);
    5467
    5568        if (!mdata->CompilationArtist().isEmpty())
    5669        {
    57             // Compilation Artist (TPE4)
    58             taglib->ID3v2Tag()->frameListMap()["TPE4"].front()->setText(
    59                 QStringToTString(mdata->CompilationArtist()));
     70            if (!tpeframe) {
     71                tpeframe = new TextIdentificationFrame(TagLib::ByteVector("TPE4"), TagLib::String::UTF8);
     72                taglib->ID3v2Tag()->addFrame(tpeframe);
     73            }
     74
     75            tpeframe->setText(QStringToTString(mdata->CompilationArtist()));
    6076        }
    6177    }
     78    else
     79    {
     80        if (tpeframe)
     81            taglib->ID3v2Tag()->removeFrame(tpeframe);
     82        if (musicbrainz)
     83            taglib->ID3v2Tag()->removeFrame(musicbrainz);
     84    }
    6285
    6386    if (!mdata->Title().isEmpty())
    6487        tag->setTitle(QStringToTString(mdata->Title()));