tags: mp3: write IDv2.4 tags only

This commit is contained in:
Andrzej Rybczak
2014-11-04 11:01:58 +01:00
parent bfe92480eb
commit 0f254b164e
2 changed files with 11 additions and 16 deletions

1
NEWS
View File

@@ -1,6 +1,7 @@
ncmpcpp-0.6.1 (????-??-??) ncmpcpp-0.6.1 (????-??-??)
* Comment tag is now properly written to mp3 files. * Comment tag is now properly written to mp3 files.
* Only ID3v2.4 tags are now saved to mp3 files.
ncmpcpp-0.6 (2014-10-25) ncmpcpp-0.6 (2014-10-25)

View File

@@ -117,17 +117,6 @@ void readXiphComments(MPD::MutableSong &s, TagLib::Ogg::XiphComment *tag)
readField(fields["COMMENT"], &MPD::MutableSong::setComment); readField(fields["COMMENT"], &MPD::MutableSong::setComment);
} }
void clearID3v1Tags(TagLib::ID3v1::Tag *tag)
{
tag->setTitle(TagLib::String::null);
tag->setArtist(TagLib::String::null);
tag->setAlbum(TagLib::String::null);
tag->setYear(0);
tag->setTrack(0);
tag->setGenre(TagLib::String::null);
tag->setComment(TagLib::String::null);
}
void writeCommonTags(const MPD::MutableSong &s, TagLib::Tag *tag) void writeCommonTags(const MPD::MutableSong &s, TagLib::Tag *tag)
{ {
tag->setTitle(ToWString(s.getTitle())); tag->setTitle(ToWString(s.getTitle()));
@@ -293,10 +282,15 @@ bool write(MPD::MutableSong &s)
if (f.isNull()) if (f.isNull())
return false; return false;
if (auto mp3_file = dynamic_cast<TagLib::MPEG::File *>(f.file())) bool saved = false;
if (auto mpeg_file = dynamic_cast<TagLib::MPEG::File *>(f.file()))
{ {
clearID3v1Tags(mp3_file->ID3v1Tag()); writeID3v2Tags(s, mpeg_file->ID3v2Tag(true));
writeID3v2Tags(s, mp3_file->ID3v2Tag(true)); // write id3v2.4 tags only
if (!mpeg_file->save(TagLib::MPEG::File::ID3v2, true, 4, false))
return false;
// do not call generic save() as it will duplicate tags
saved = true;
} }
else if (auto ogg_file = dynamic_cast<TagLib::Ogg::Vorbis::File *>(f.file())) else if (auto ogg_file = dynamic_cast<TagLib::Ogg::Vorbis::File *>(f.file()))
{ {
@@ -309,7 +303,7 @@ bool write(MPD::MutableSong &s)
else else
writeCommonTags(s, f.tag()); writeCommonTags(s, f.tag());
if (!f.save()) if (!saved && !f.save())
return false; return false;
if (!s.getNewName().empty()) if (!s.getNewName().empty())