diff options
author | Daniel Schürmann <daschuer@mixxx.org> | 2021-05-25 10:30:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-25 10:30:24 +0200 |
commit | 6dd85df1640d5dbc1cceab010394a9e36c228c1a (patch) | |
tree | 23d91d88d633a0d338ef5f1c2086de5e81ca2f48 /src/sources | |
parent | 6ea8777e3358baabc06f89349ce66acc6347b943 (diff) | |
parent | aace607389371cb896b2728ac80f4cdd33364861 (diff) |
Merge pull request #3898 from uklotzde/taglib-file-tags
lp1929311: TagLib: Check for existence of tags before export
Diffstat (limited to 'src/sources')
-rw-r--r-- | src/sources/metadatasourcetaglib.cpp | 57 |
1 files changed, 36 insertions, 21 deletions
diff --git a/src/sources/metadatasourcetaglib.cpp b/src/sources/metadatasourcetaglib.cpp index 007f9219f1..607e9881cf 100644 --- a/src/sources/metadatasourcetaglib.cpp +++ b/src/sources/metadatasourcetaglib.cpp @@ -313,8 +313,7 @@ class MpegTagSaver : public TagSaver { : m_file(TAGLIB_FILENAME_FROM_QSTRING(fileName)), m_modifiedTagsBitmask(exportTrackMetadata(&m_file, trackMetadata)) { } - ~MpegTagSaver() override { - } + ~MpegTagSaver() override = default; bool hasModifiedTags() const override { return m_modifiedTagsBitmask != TagLib::MPEG::File::NoTags; @@ -337,11 +336,15 @@ class MpegTagSaver : public TagSaver { if (taglib::ape::exportTrackMetadataIntoTag(pFile->APETag(), trackMetadata)) { modifiedTagsBitmask |= TagLib::MPEG::File::APE; } - // Only write ID3v2 tag if it already exists - pID3v2Tag = pFile->ID3v2Tag(false); + // Only write ID3v2 tag if it already exists. + if (pFile->hasID3v2Tag()) { + pID3v2Tag = pFile->ID3v2Tag(false); + DEBUG_ASSERT(pID3v2Tag); + } } else { // Get or create ID3v2 tag pID3v2Tag = pFile->ID3v2Tag(true); + DEBUG_ASSERT(pID3v2Tag); } if (taglib::id3v2::exportTrackMetadataIntoTag(pID3v2Tag, trackMetadata)) { modifiedTagsBitmask |= TagLib::MPEG::File::ID3v2; @@ -360,8 +363,7 @@ class Mp4TagSaver : public TagSaver { : m_file(TAGLIB_FILENAME_FROM_QSTRING(fileName)), m_modifiedTags(exportTrackMetadata(&m_file, trackMetadata)) { } - ~Mp4TagSaver() override { - } + ~Mp4TagSaver() override = default; bool hasModifiedTags() const override { return m_modifiedTags; @@ -386,8 +388,7 @@ class FlacTagSaver : public TagSaver { : m_file(TAGLIB_FILENAME_FROM_QSTRING(fileName)), m_modifiedTags(exportTrackMetadata(&m_file, trackMetadata)) { } - ~FlacTagSaver() override { - } + ~FlacTagSaver() override = default; bool hasModifiedTags() const override { return m_modifiedTags; @@ -405,10 +406,14 @@ class FlacTagSaver : public TagSaver { if (taglib::hasID3v2Tag(*pFile)) { modifiedTags |= taglib::id3v2::exportTrackMetadataIntoTag(pFile->ID3v2Tag(), trackMetadata); // Only write VorbisComment tag if it already exists - pXiphComment = pFile->xiphComment(false); + if (taglib::hasXiphComment(*pFile)) { + pXiphComment = pFile->xiphComment(false); + DEBUG_ASSERT(pXiphComment); + } } else { // Get or create VorbisComment tag pXiphComment = pFile->xiphComment(true); + DEBUG_ASSERT(pXiphComment); } modifiedTags |= taglib::xiph::exportTrackMetadataIntoTag( pXiphComment, trackMetadata, taglib::FileType::FLAC); @@ -426,8 +431,7 @@ class OggTagSaver : public TagSaver { : m_file(TAGLIB_FILENAME_FROM_QSTRING(fileName)), m_modifiedTags(exportTrackMetadata(&m_file, trackMetadata)) { } - ~OggTagSaver() override { - } + ~OggTagSaver() override = default; bool hasModifiedTags() const override { return m_modifiedTags; @@ -469,8 +473,7 @@ class OpusTagSaver : public TagSaver { : m_file(TAGLIB_FILENAME_FROM_QSTRING(fileName)), m_modifiedTags(exportTrackMetadata(&m_file, trackMetadata)) { } - ~OpusTagSaver() override { - } + ~OpusTagSaver() override = default; bool hasModifiedTags() const override { return m_modifiedTags; @@ -499,8 +502,7 @@ class WavPackTagSaver : public TagSaver { : m_file(TAGLIB_FILENAME_FROM_QSTRING(fileName)), m_modifiedTags(exportTrackMetadata(&m_file, trackMetadata)) { } - ~WavPackTagSaver() override { - } + ~WavPackTagSaver() override = default; bool hasModifiedTags() const override { return m_modifiedTags; @@ -535,8 +537,7 @@ class WavTagSaver : public TagSaver { : m_file(TAGLIB_FILENAME_FROM_QSTRING(fileName)), m_modifiedTags(exportTrackMetadata(&m_file, trackMetadata)) { } - ~WavTagSaver() override { - } + ~WavTagSaver() override = default; bool hasModifiedTags() const override { return m_modifiedTags; @@ -550,13 +551,28 @@ class WavTagSaver : public TagSaver { static bool exportTrackMetadata(TagLib::RIFF::WAV::File* pFile, const TrackMetadata& trackMetadata) { bool modifiedTags = false; if (pFile->isOpen()) { + TagLib::RIFF::Info::Tag* pInfoTag = nullptr; // Write into all available tags #if (TAGLIB_HAS_WAV_ID3V2TAG) - modifiedTags |= taglib::id3v2::exportTrackMetadataIntoTag(pFile->ID3v2Tag(), trackMetadata); + if (pFile->hasID3v2Tag()) { + modifiedTags |= taglib::id3v2::exportTrackMetadataIntoTag( + pFile->ID3v2Tag(), trackMetadata); + // Only write Info tag if it already exists + if (pFile->hasInfoTag()) { + pInfoTag = pFile->InfoTag(); + DEBUG_ASSERT(pInfoTag); + } + } else { + // Get or create Info tag + pInfoTag = pFile->InfoTag(); + DEBUG_ASSERT(pInfoTag); + } #else modifiedTags |= taglib::id3v2::exportTrackMetadataIntoTag(pFile->tag(), trackMetadata); + pInfoTag = pFile->InfoTag(); + DEBUG_ASSERT(pInfoTag); #endif - modifiedTags |= exportTrackMetadataIntoRIFFTag(pFile->InfoTag(), trackMetadata); + modifiedTags |= exportTrackMetadataIntoRIFFTag(pInfoTag, trackMetadata); } return modifiedTags; } @@ -571,8 +587,7 @@ class AiffTagSaver : public TagSaver { : m_file(TAGLIB_FILENAME_FROM_QSTRING(fileName)), m_modifiedTags(exportTrackMetadata(&m_file, trackMetadata)) { } - ~AiffTagSaver() override { - } + ~AiffTagSaver() override = default; bool hasModifiedTags() const override { return m_modifiedTags; |