tags: mp3: write IDv2.4 tags only
This commit is contained in:
1
NEWS
1
NEWS
@@ -1,6 +1,7 @@
|
||||
ncmpcpp-0.6.1 (????-??-??)
|
||||
|
||||
* 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)
|
||||
|
||||
|
||||
26
src/tags.cpp
26
src/tags.cpp
@@ -117,17 +117,6 @@ void readXiphComments(MPD::MutableSong &s, TagLib::Ogg::XiphComment *tag)
|
||||
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)
|
||||
{
|
||||
tag->setTitle(ToWString(s.getTitle()));
|
||||
@@ -293,10 +282,15 @@ bool write(MPD::MutableSong &s)
|
||||
if (f.isNull())
|
||||
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, mp3_file->ID3v2Tag(true));
|
||||
writeID3v2Tags(s, mpeg_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()))
|
||||
{
|
||||
@@ -309,9 +303,9 @@ bool write(MPD::MutableSong &s)
|
||||
else
|
||||
writeCommonTags(s, f.tag());
|
||||
|
||||
if (!f.save())
|
||||
if (!saved && !f.save())
|
||||
return false;
|
||||
|
||||
|
||||
if (!s.getNewName().empty())
|
||||
{
|
||||
std::string new_name;
|
||||
|
||||
Reference in New Issue
Block a user