tagparser/id3/id3v2frameids.cpp

212 lines
5.2 KiB
C++

#include "./id3v2frameids.h"
#include "../exceptions.h"
namespace TagParser {
/*!
* \brief Encapsulates the most common ID3v2 frame IDs and related functions.
*
* There are short frame IDs (used by the first version of ID3v2) and long
* frame IDs (used by newer versions of ID3v2).
*
* The short IDs start with "s" and the long IDs with "l". To convert between
* these IDs the functions convertToShortId() and convertToLongId() can be
* used.
*
* \sa
* - See https://id3.org/id3v2.3.0 for the specification of ID3v2.3.0 frame IDs.
* - See https://id3.org/id3v2.4.0-frames for the specification of ID3v2.4.0 frame IDs.
*/
namespace Id3v2FrameIds {
/*!
* \brief Converts the specified long frame ID to the equivalent short frame ID.
* \returns Returns the short ID if available; otherwise returns 0.
*/
std::uint32_t convertToShortId(std::uint32_t id)
{
switch (id) {
case lAlbum:
return sAlbum;
case lArtist:
return sArtist;
case lComment:
return sComment;
case lYear:
return sYear;
case lOriginalYear:
return sOriginalYear;
case lRecordingDates:
return sRecordingDates;
case lDate:
return sDate;
case lTime:
return sTime;
case lTitle:
return sTitle;
case lGenre:
return sGenre;
case lTrackPosition:
return sTrackPosition;
case lDiskPosition:
return sDiskPosition;
case lEncoder:
return sEncoder;
case lBpm:
return sBpm;
case lCover:
return sCover;
case lWriter:
return sWriter;
case lLength:
return sLength;
case lLanguage:
return sLanguage;
case lEncoderSettings:
return sEncoderSettings;
case lUnsynchronizedLyrics:
return sUnsynchronizedLyrics;
case lAlbumArtist:
return sAlbumArtist;
case lContentGroupDescription:
return sContentGroupDescription;
case lRecordLabel:
return sRecordLabel;
case lUserDefinedText:
return sUserDefinedText;
case lRemixedBy:
return sRemixedBy;
case lCopyright:
return sCopyright;
case lPlayCounter:
return sPlayCounter;
case lRating:
return sRating;
case lISRC:
return sISRC;
case lPublisherWebpage:
return sPublisherWebpage;
case lUserDefinedURL:
return sUserDefinedURL;
default:
return 0;
}
}
/*!
* \brief Converts the specified short frame ID to the equivalent long frame ID.
* \returns Returns the long ID if available; otherwise returns 0.
*/
std::uint32_t convertToLongId(std::uint32_t id)
{
switch (id) {
case sAlbum:
return lAlbum;
case sArtist:
return lArtist;
case sComment:
return lComment;
case sYear:
return lYear;
case sOriginalYear:
return lOriginalYear;
case sRecordingDates:
return lRecordingDates;
case sDate:
return lDate;
case sTime:
return lTime;
case sTitle:
return lTitle;
case sGenre:
return lGenre;
case sTrackPosition:
return lTrackPosition;
case sDiskPosition:
return lDiskPosition;
case sEncoder:
return lEncoder;
case sBpm:
return lBpm;
case sCover:
return lCover;
case sWriter:
return lWriter;
case sLength:
return lLength;
case sLanguage:
return lLanguage;
case sEncoderSettings:
return lEncoderSettings;
case sUnsynchronizedLyrics:
return lUnsynchronizedLyrics;
case sAlbumArtist:
return lAlbumArtist;
case sContentGroupDescription:
return lContentGroupDescription;
case sRecordLabel:
return lRecordLabel;
case sUserDefinedText:
return lUserDefinedText;
case sRemixedBy:
return lRemixedBy;
case sCopyright:
return lCopyright;
case sPlayCounter:
return lPlayCounter;
case sRating:
return lRating;
case sISRC:
return lISRC;
case sPublisherWebpage:
return lPublisherWebpage;
case sUserDefinedURL:
return lUserDefinedURL;
default:
return 0;
}
}
/*!
* \brief Returns whether \a id is only supported in ID3v2.3.x and older and therefore can not be used in an ID3v2.4.x tag.
* \remarks
* - This function is intended to show warnings. Unknown IDs will be treated as supported everywhere.
* - Any short ID is obviously not ID3v2.4.x compatible. Only long IDs are considered here. Short IDs need to be converted to
* long IDs before passing them to this function.
*/
bool isPreId3v24Id(uint32_t id)
{
switch (id) {
case lYear:
case lOriginalYear:
case lRecordingDates:
case lDate:
case lTime:
return true;
default:
return false;
}
}
/*!
* \brief Returns whether \a id is only supported inID3v2.4.x and therefore can not be used in older versions.
* \remarks This function is intended to show warnings. Unknown IDs will be treated as supported everywhere.
*/
bool isOnlyId3v24Id(uint32_t id)
{
switch (id) {
case lRecordingTime:
case lReleaseTime:
case lOriginalReleaseTime:
case lTaggingTime:
return true;
default:
return false;
}
}
} // namespace Id3v2FrameIds
} // namespace TagParser