From 821c32992db90e9601af0a89ce0ccfab1394b475 Mon Sep 17 00:00:00 2001 From: Robert Gingras Date: Wed, 17 Apr 2024 09:53:50 -0400 Subject: [PATCH] TagReaderTagLib: Refactor ID3v2 saving to a dedicated function --- .../tagreadertaglib.cpp | 22 ++++++++++++------- ext/libstrawberry-tagreader/tagreadertaglib.h | 1 + 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ext/libstrawberry-tagreader/tagreadertaglib.cpp b/ext/libstrawberry-tagreader/tagreadertaglib.cpp index f69583bb..813b31d3 100644 --- a/ext/libstrawberry-tagreader/tagreadertaglib.cpp +++ b/ext/libstrawberry-tagreader/tagreadertaglib.cpp @@ -953,14 +953,7 @@ bool TagReaderTagLib::SaveFile(const spb::tagreader::SaveFileRequest &request) c TagLib::ID3v2::Tag *tag = file_mpeg->ID3v2Tag(true); if (!tag) return false; if (save_tags) { - SetTextFrame("TPOS", song.disc() <= 0 ? QString() : QString::number(song.disc()), tag); - SetTextFrame("TCOM", song.composer().empty() ? std::string() : song.composer(), tag); - SetTextFrame("TIT1", song.grouping().empty() ? std::string() : song.grouping(), tag); - SetTextFrame("TOPE", song.performer().empty() ? std::string() : song.performer(), tag); - // Skip TPE1 (which is the artist) here because we already set it - SetTextFrame("TPE2", song.albumartist().empty() ? std::string() : song.albumartist(), tag); - SetTextFrame("TCMP", song.compilation() ? QString::number(1) : QString(), tag); - SetUnsyncLyricsFrame(song.lyrics().empty() ? std::string() : song.lyrics(), tag); + SaveID3v2Tag(tag, song); } if (save_playcount) { SetPlaycount(tag, song); @@ -1026,6 +1019,19 @@ bool TagReaderTagLib::SaveFile(const spb::tagreader::SaveFileRequest &request) c } +void TagReaderTagLib::SaveID3v2Tag(TagLib::ID3v2::Tag *tag, const spb::tagreader::SongMetadata &song) const { + + SetTextFrame("TPOS", song.disc() <= 0 ? QString() : QString::number(song.disc()), tag); + SetTextFrame("TCOM", song.composer().empty() ? std::string() : song.composer(), tag); + SetTextFrame("TIT1", song.grouping().empty() ? std::string() : song.grouping(), tag); + SetTextFrame("TOPE", song.performer().empty() ? std::string() : song.performer(), tag); + // Skip TPE1 (which is the artist) here because we already set it + SetTextFrame("TPE2", song.albumartist().empty() ? std::string() : song.albumartist(), tag); + SetTextFrame("TCMP", song.compilation() ? QString::number(1) : QString(), tag); + SetUnsyncLyricsFrame(song.lyrics().empty() ? std::string() : song.lyrics(), tag); + +} + void TagReaderTagLib::SaveAPETag(TagLib::APE::Tag *tag, const spb::tagreader::SongMetadata &song) const { tag->setItem("album artist", TagLib::APE::Item("album artist", TagLib::StringList(song.albumartist().c_str()))); diff --git a/ext/libstrawberry-tagreader/tagreadertaglib.h b/ext/libstrawberry-tagreader/tagreadertaglib.h index d364ebd2..5d1eef2b 100644 --- a/ext/libstrawberry-tagreader/tagreadertaglib.h +++ b/ext/libstrawberry-tagreader/tagreadertaglib.h @@ -73,6 +73,7 @@ class TagReaderTagLib : public TagReaderBase { void ParseAPETag(const TagLib::APE::ItemListMap &map, QString *disc, QString *compilation, spb::tagreader::SongMetadata *song) const; void SetVorbisComments(TagLib::Ogg::XiphComment *vorbis_comment, const spb::tagreader::SongMetadata &song) const; + void SaveID3v2Tag(TagLib::ID3v2::Tag *tag, const spb::tagreader::SongMetadata &song) const; void SaveAPETag(TagLib::APE::Tag *tag, const spb::tagreader::SongMetadata &song) const; void SetTextFrame(const char *id, const QString &value, TagLib::ID3v2::Tag *tag) const;