#include <unistd.h>
#include <glib.h>
+#include <taglib/tag.h>
+#include <taglib/mpegfile.h>
+#include <taglib/mp4file.h>
+#include <taglib/flacfile.h>
+#include <taglib/oggflacfile.h>
+#include <taglib/vorbisfile.h>
+#include <taglib/wavfile.h>
+#include <taglib/id3v1tag.h>
+#include <taglib/id3v2tag.h>
+#include <taglib/mp4tag.h>
+#include <taglib/xiphcomment.h>
+#include <taglib/commentsframe.h>
+#include <taglib/textidentificationframe.h>
+#include <taglib/attachedpictureframe.h>
+#include <taglib/unsynchronizedlyricsframe.h>
+#include <taglib/mp4item.h>
+#include <taglib/mp4coverart.h>
+
+using namespace std;
+using namespace TagLib;
+
#define MIME_TYPE_JPEG "image/jpeg"
#define MIME_TYPE_PNG "image/png"
+typedef struct {
+ File* file;
+ int filetype;
+} metadata_editor_s;
+
typedef enum {
METADATA_EDITOR_FORMAT_MP3 = 0, /**< MP3 File */
METADATA_EDITOR_FORMAT_MP4, /**< MP4 File */
return METADATA_EDITOR_ERROR_NONE;
}
-static int __ID3_getTwixFrameByName(metadata_editor_s *_metadata, TagLib::ID3v1::Tag *tag1, TagLib::ID3v2::Tag *tag2, const char *frameID, char **value)
+static int __ID3_getTwixFrameByName(metadata_editor_s *_metadata, ID3v1::Tag *tag1, ID3v2::Tag *tag2, const char *frameID, char **value)
{
int ret = METADATA_EDITOR_ERROR_NONE;
return METADATA_EDITOR_ERROR_NONE;
}
-static int __ID3_setTwixFrameByName(metadata_editor_s *_metadata, TagLib::ID3v1::Tag *tag1, TagLib::ID3v2::Tag *tag2, const char *frameID, const char *value)
+static int __ID3_setTwixFrameByName(metadata_editor_s *_metadata, ID3v1::Tag *tag1, ID3v2::Tag *tag2, const char *frameID, const char *value)
{
int ret = METADATA_EDITOR_ERROR_NONE;
if (tag2->frameListMap()[frameID].isEmpty()) {
metadata_editor_info("The frame %s does not exist. Creating", frameID);
// This is a common frame type for textural frames except comment frame
- auto fr = new TagLib::ID3v2::TextIdentificationFrame(frameID);
+ auto fr = new ID3v2::TextIdentificationFrame(frameID);
- fr->setTextEncoding(TagLib::String::UTF8);
- fr->setText(TagLib::String(value, TagLib::String::UTF8));
+ fr->setTextEncoding(String::UTF8);
+ fr->setText(String(value, String::UTF8));
tag2->addFrame(fr);
} else { // if not - just modify the data in the existing frame
metadata_editor_info("The frame %s exists. Changing", frameID);
- tag2->frameListMap()[frameID][0]->setText(TagLib::String(value, TagLib::String::UTF8));
+ tag2->frameListMap()[frameID][0]->setText(String(value, String::UTF8));
}
if (tag1 && !tag1->isEmpty()) { // Check if ID3v1 tag exists. Must copy data if yes.
return METADATA_EDITOR_ERROR_NONE;
}
-static int __ID3_getFrameByName(metadata_editor_s *_metadata, TagLib::ID3v2::Tag *tag2, const char *frameID, char **value)
+static int __ID3_getFrameByName(metadata_editor_s *_metadata, ID3v2::Tag *tag2, const char *frameID, char **value)
{
int ret = METADATA_EDITOR_ERROR_NONE;
return METADATA_EDITOR_ERROR_NONE;
}
-static int __ID3_setFrameByName(metadata_editor_s *_metadata, TagLib::ID3v2::Tag *tag2, const char *frameID, const char *value)
+static int __ID3_setFrameByName(metadata_editor_s *_metadata, ID3v2::Tag *tag2, const char *frameID, const char *value)
{
int ret = METADATA_EDITOR_ERROR_NONE;
if (tag2->frameListMap()[frameID].isEmpty()) {
metadata_editor_info("The frame %s does not exist. Creating", frameID);
// This is a common frame type for textural frames except comment frame
- auto fr = new TagLib::ID3v2::TextIdentificationFrame(frameID);
+ auto fr = new ID3v2::TextIdentificationFrame(frameID);
- fr->setTextEncoding(TagLib::String::UTF8);
- fr->setText(TagLib::String(value, TagLib::String::UTF8));
+ fr->setTextEncoding(String::UTF8);
+ fr->setText(String(value, String::UTF8));
tag2->addFrame(fr);
} else { // if not - just modify the data in the existing frame
metadata_editor_info("The frame %s exists. Changing", frameID);
- tag2->frameListMap()[frameID][0]->setText(TagLib::String(value, TagLib::String::UTF8));
+ tag2->frameListMap()[frameID][0]->setText(String(value, String::UTF8));
}
return METADATA_EDITOR_ERROR_NONE;
}
-static int __ID3_getNumberOfPictures(metadata_editor_s *_metadata, TagLib::ID3v2::Tag *tag2, char **value)
+static int __ID3_getNumberOfPictures(metadata_editor_s *_metadata, ID3v2::Tag *tag2, char **value)
{
int ret = METADATA_EDITOR_ERROR_NONE;
return METADATA_EDITOR_ERROR_NONE;
}
-static int __ID3_getLyricsFrame(metadata_editor_s *_metadata, TagLib::ID3v2::Tag *tag2, char **value)
+static int __ID3_getLyricsFrame(metadata_editor_s *_metadata, ID3v2::Tag *tag2, char **value)
{
int ret = METADATA_EDITOR_ERROR_NONE;
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_get_parameter() [%d]", ret);
metadata_editor_retvm_if(!tag2, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag does not exist. Can not process further");
- TagLib::ID3v2::FrameList lst = tag2->frameListMap()["USLT"];
+ ID3v2::FrameList lst = tag2->frameListMap()["USLT"]; // link to unsynchronized lyric frames in tag
metadata_editor_retvm_if(lst.isEmpty(), METADATA_EDITOR_ERROR_NONE, "The frame USLT does not exist");
metadata_editor_info("The frame USLT exists");
- TagLib::ID3v2::FrameList::Iterator it = lst.begin();
- auto frame = static_cast<TagLib::ID3v2::UnsynchronizedLyricsFrame*>(*it);
+ ID3v2::FrameList::Iterator it = lst.begin();
+ auto frame = static_cast<ID3v2::UnsynchronizedLyricsFrame*>(*it);
*value = g_strdup(frame->text().toCString(true));
return METADATA_EDITOR_ERROR_NONE;
}
-// *** Comment frame is different from other string-type frames. It uses CommentsFrame instead of TextIdentificationFrame *** //
-static int __ID3_setTwixCommentFrame(metadata_editor_s *_metadata, TagLib::ID3v1::Tag *tag1, TagLib::ID3v2::Tag *tag2, const char *value)
+static int __ID3_setTwixCommentFrame(metadata_editor_s *_metadata, ID3v1::Tag *tag1, ID3v2::Tag *tag2, const char *value)
{
int ret = METADATA_EDITOR_ERROR_NONE;
// If the comment frame is empty - create the frame and add it to the list
if (tag2->frameListMap()["COMM"].isEmpty()) {
metadata_editor_info("The frame COMM does not exist. Creating");
- auto fr = new TagLib::ID3v2::CommentsFrame;
+ auto fr = new ID3v2::CommentsFrame;
- fr->setText(TagLib::String(value, TagLib::String::UTF8));
- fr->setTextEncoding(TagLib::String::UTF8);
+ fr->setText(String(value, String::UTF8));
+ fr->setTextEncoding(String::UTF8);
tag2->addFrame(fr);
} else { // If the frame already exists - just modify its value
metadata_editor_info("The frame COMM exists. Changing");
- tag2->frameListMap()["COMM"][0]->setText(TagLib::String(value, TagLib::String::UTF8));
+ tag2->frameListMap()["COMM"][0]->setText(String(value, String::UTF8));
}
if (tag1 && !tag1->isEmpty()) { // Copy the value to ID3v1 tag comment
return METADATA_EDITOR_ERROR_NONE;
}
-// *** Lyrics frame is different from other string-type frames and uses UnsynchronizedLyricsFrame instead of TextIdentificationFrame *** //
-static int __ID3_setLyricsFrame(metadata_editor_s *_metadata, TagLib::ID3v2::Tag *tag2, const char *value)
+static int __ID3_setLyricsFrame(metadata_editor_s *_metadata, ID3v2::Tag *tag2, const char *value)
{
int ret = METADATA_EDITOR_ERROR_NONE;
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret);
metadata_editor_retvm_if(!tag2, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag was not created. Can not proceed metadata updating");
- TagLib::ID3v2::FrameList lst = tag2->frameListMap()["USLT"]; // link to unsynchronized lyric frames in tag
+ ID3v2::FrameList lst = tag2->frameListMap()["USLT"]; // link to unsynchronized lyric frames in tag
// If the pointer is NULL or c-string is empty - handle as request for deletion
if (!value || (*value == '\0')) {
metadata_editor_info("Request for frame USLT deletion");
if (lst.isEmpty()) {
// No lyrics - create the frame and add it to the ID3v2 tag
metadata_editor_info("The frame USLT does not exist. Creating");
- auto frame = new TagLib::ID3v2::UnsynchronizedLyricsFrame;
+ auto frame = new ID3v2::UnsynchronizedLyricsFrame;
- frame->setTextEncoding(TagLib::String::UTF8);
- frame->setText(TagLib::String(value, TagLib::String::UTF8));
+ frame->setTextEncoding(String::UTF8);
+ frame->setText(String(value, String::UTF8));
tag2->addFrame(frame);
} else { // the lyrics frames exist - change the existing one
metadata_editor_info("USLT frames exist in file. Changing");
- TagLib::ID3v2::FrameList::Iterator it = lst.begin();
- auto frame = static_cast<TagLib::ID3v2::UnsynchronizedLyricsFrame*>(*it);
- frame->setTextEncoding(TagLib::String::UTF8);
- frame->setText(TagLib::String(value, TagLib::String::UTF8));
+ ID3v2::FrameList::Iterator it = lst.begin();
+ auto frame = static_cast<ID3v2::UnsynchronizedLyricsFrame*>(*it);
+ frame->setTextEncoding(String::UTF8);
+ frame->setText(String(value, String::UTF8));
}
return METADATA_EDITOR_ERROR_NONE;
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_get_parameter() [%d]", ret);
metadata_editor_retvm_if(!itemname, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid itemname");
- auto tag = dynamic_cast<TagLib::MP4::Tag*>(_metadata->file->tag());
+ auto tag = dynamic_cast<MP4::Tag*>(_metadata->file->tag());
metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist");
- TagLib::MP4::ItemListMap& itemMap = tag->itemListMap();
- TagLib::MP4::ItemListMap::ConstIterator it = itemMap.find(itemname);
+ MP4::ItemListMap& itemMap = tag->itemListMap();
+ MP4::ItemListMap::ConstIterator it = itemMap.find(itemname);
if (it != itemMap.end())
*value = g_strdup(it->second.toStringList()[0].toCString(true));
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_get_parameter() [%d]", ret);
metadata_editor_retvm_if(!itemname, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid itemname");
- auto tag = dynamic_cast<TagLib::MP4::Tag*>(_metadata->file->tag());
+ auto tag = dynamic_cast<MP4::Tag*>(_metadata->file->tag());
metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist");
- TagLib::MP4::ItemListMap& itemMap = tag->itemListMap();
- TagLib::MP4::ItemListMap::ConstIterator it = itemMap.find(itemname);
-
+ MP4::ItemListMap& itemMap = tag->itemListMap();
+ MP4::ItemListMap::ConstIterator it = itemMap.find(itemname);
if (it != itemMap.end())
*value = g_strdup_printf("%u", it->second.toInt());
else
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret);
metadata_editor_retvm_if(!itemname, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid itemname");
- auto tag = dynamic_cast<TagLib::MP4::Tag*>(_metadata->file->tag());
+ auto tag = dynamic_cast<MP4::Tag*>(_metadata->file->tag());
metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist");
// Get map of items directly from tag and launch a search of specific item
- TagLib::MP4::ItemListMap& itemMap = tag->itemListMap();
+ MP4::ItemListMap& itemMap = tag->itemListMap();
// Check if it is a request for deletion
if ((value == NULL) || value[0] == '\0') {
metadata_editor_info("Request for deleting of item <%s>", itemname);
- TagLib::MP4::ItemListMap::Iterator it = itemMap.find(itemname);
+ MP4::ItemListMap::Iterator it = itemMap.find(itemname);
if (it != itemMap.end())
itemMap.erase(it);
return METADATA_EDITOR_ERROR_NONE;
}
metadata_editor_info("The item <%s> will be added", itemname);
- itemMap[itemname] = TagLib::MP4::Item(TagLib::String(value, TagLib::String::UTF8));
+ itemMap[itemname] = MP4::Item(String(value, String::UTF8));
return METADATA_EDITOR_ERROR_NONE;
}
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret);
metadata_editor_retvm_if(!itemname, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid itemname");
- auto tag = dynamic_cast<TagLib::MP4::Tag*>(_metadata->file->tag());
+ auto tag = dynamic_cast<MP4::Tag*>(_metadata->file->tag());
metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist");
// Get map of items directly from tag and launch a search of specific item
- TagLib::MP4::ItemListMap& itemMap = tag->itemListMap();
+ MP4::ItemListMap& itemMap = tag->itemListMap();
// Check if it is a request for deletion
if ((value == NULL) || value[0] == '\0') {
metadata_editor_info("Request for deleting of item <%s>", itemname);
- TagLib::MP4::ItemListMap::Iterator it = itemMap.find(itemname);
+ MP4::ItemListMap::Iterator it = itemMap.find(itemname);
if (it != itemMap.end())
itemMap.erase(it);
return METADATA_EDITOR_ERROR_NONE;
if (isdigit(value[0])) {
metadata_editor_info("The item <%s> will be added", itemname);
int number = atoi(value);
- itemMap[itemname] = TagLib::MP4::Item(number);
+ itemMap[itemname] = MP4::Item(number);
return METADATA_EDITOR_ERROR_NONE;
} else { // Notify that string is not a number to process
metadata_editor_error("Error. String does not contain a number");
ret = __check_metadata_get_parameter(_metadata, value);
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_get_parameter() [%d]", ret);
- auto tag = dynamic_cast<TagLib::MP4::Tag*>(_metadata->file->tag());
+ auto tag = dynamic_cast<MP4::Tag*>(_metadata->file->tag());
metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist");
*value = g_strdup_printf("%u", tag->contains("covr") ? tag->item("covr").toCoverArtList().size() : 0);
}
#if 0
-static int __xiph_getFieldValue(metadata_editor_s *_metadata, TagLib::Ogg::XiphComment *xtag, const char *fieldname, char **value)
+static int __xiph_getFieldValue(metadata_editor_s *_metadata, Ogg::XiphComment *xtag, const char *fieldname, char **value)
{
int ret = METADATA_EDITOR_ERROR_NONE;
metadata_editor_retvm_if(!fieldname, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid fieldname");
metadata_editor_retvm_if(!xtag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist");
- const TagLib::Ogg::FieldListMap& fieldMap = xtag->fieldListMap();
- TagLib::Ogg::FieldListMap::ConstIterator it = fieldMap.find(fieldname);
+ const Ogg::FieldListMap& fieldMap = xtag->fieldListMap();
+ Ogg::FieldListMap::ConstIterator it = fieldMap.find(fieldname);
if ((xtag->contains(fieldname)) && (it != fieldMap.end()))
*value = g_strdup(it->second[0].toCString(true));
return METADATA_EDITOR_ERROR_NONE;
}
-// *** This function is used to write string into Xiph Comment fields *** //
-static int __xiph_updateFieldValue(metadata_editor_s *_metadata, TagLib::Ogg::XiphComment *xtag, const char *fieldname, const char *value)
+static int __xiph_updateFieldValue(metadata_editor_s *_metadata, Ogg::XiphComment *xtag, const char *fieldname, const char *value)
{
int ret = METADATA_EDITOR_ERROR_NONE;
}
metadata_editor_info("The field %s will be added", fieldname);
// "true" is used to remove other strings of the same "fieldname" first
- xtag->addField(fieldname, TagLib::String(value, TagLib::String::UTF8), true);
+ xtag->addField(fieldname, String(value, String::UTF8), true);
return METADATA_EDITOR_ERROR_NONE;
}
ret = __check_metadata_get_parameter(_metadata, value);
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_get_parameter() [%d]", ret);
- TagLib::FLAC::File *_file = (TagLib::FLAC::File*) _metadata->file;
+ FLAC::File *_file = dynamic_cast<FLAC::File*> _metadata->file;
*value = g_strdup_printf("%u", _file->pictureList().size());
{
int media_type = METADATA_EDITOR_FORMAT_NOTYPE;
metadata_editor_s *_metadata = (metadata_editor_s*)metadata;
- TagLib::File *_file = NULL;
+ File *_file = NULL;
metadata_editor_retvm_if(!_metadata, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid metadata");
metadata_editor_retvm_if(!path, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid path");
try {
switch (media_type) {
case METADATA_EDITOR_FORMAT_MP3:
- _file = new TagLib::MPEG::File(path);
+ _file = new MPEG::File(path);
break;
case METADATA_EDITOR_FORMAT_MP4:
- _file = new TagLib::MP4::File(path);
+ _file = new MP4::File(path);
break;
#if 0
case METADATA_EDITOR_FORMAT_FLAC:
- _file = new TagLib::FLAC::File(path);
+ _file = new FLAC::File(path);
break;
case METADATA_EDITOR_FORMAT_OGG_VORBIS:
- _file = new TagLib::Ogg::Vorbis::File(path);
+ _file = new Ogg::Vorbis::File(path);
break;
case METADATA_EDITOR_FORMAT_OGG_FLAC:
- _file = new TagLib::Ogg::FLAC::File(path);
+ _file = new Ogg::FLAC::File(path);
break;
case METADATA_EDITOR_FORMAT_WAV:
// Allocate the file object in memory to work with it later on
- _file = new TagLib::RIFF::WAV::File(path);
+ _file = new RIFF::WAV::File(path);
break;
#endif
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_get_parameter() [%d]", ret);
// Bring the pointer to actual file type and make tag pointers
- TagLib::MPEG::File *_file = (TagLib::MPEG::File*)metadata->file;
- TagLib::ID3v1::Tag *tag1 = _file->ID3v1Tag();
- TagLib::ID3v2::Tag *tag2 = _file->ID3v2Tag();
+ MPEG::File *_file = dynamic_cast<MPEG::File*>(metadata->file);
+ ID3v1::Tag *tag1 = _file->ID3v1Tag();
+ ID3v2::Tag *tag2 = _file->ID3v2Tag();
switch (attribute) { // Check which one of frame types was given to the function for processing
case METADATA_EDITOR_ATTR_ARTIST: return __ID3_getTwixFrameByName(metadata, tag1, tag2, "TPE1", value);
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_get_parameter() [%d]", ret);
// Bring the pointer to actual file type and make tags pointers
- TagLib::FLAC::File *_file = (TagLib::FLAC::File*)metadata->file;
- TagLib::Ogg::XiphComment *xtag = _file->xiphComment(false);
+ FLAC::File *_file = (FLAC::File*)metadata->file;
+ Ogg::XiphComment *xtag = _file->xiphComment(false);
if (!xtag) { // Check if we have a valid tag for processing
metadata_editor_error("Tag does not exist");
*value = NULL;
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_get_parameter() [%d]", ret);
// Bring the pointer to actual file type and make tags pointers
- TagLib::Ogg::Vorbis::File *_file = (TagLib::Ogg::Vorbis::File*)metadata->file;
- TagLib::Ogg::XiphComment *xtag = _file->tag();
+ Ogg::Vorbis::File *_file = (Ogg::Vorbis::File*)metadata->file;
+ Ogg::XiphComment *xtag = _file->tag();
if (!xtag) { // Check if we have a valid tag for processing
metadata_editor_error("Tag does not exist");
*value = NULL;
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_get_parameter() [%d]", ret);
// Bring the pointer to actual file type and make tags pointers
- TagLib::Ogg::FLAC::File *_file = (TagLib::Ogg::FLAC::File*)metadata->file;
- TagLib::Ogg::XiphComment *xtag = _file->tag();
+ Ogg::FLAC::File *_file = (Ogg::FLAC::File*)metadata->file;
+ Ogg::XiphComment *xtag = _file->tag();
if (!xtag) { // Check if we have a valid tag for processing
metadata_editor_error("Tag does not exist");
*value = NULL;
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_get_parameter() [%d]", ret);
// Bring the pointer to actual file type and make tag pointers
- TagLib::RIFF::WAV::File *_file = (TagLib::RIFF::WAV::File*)metadata->file;
- TagLib::ID3v2::Tag *tag2 = _file->tag();
+ RIFF::WAV::File *_file = (RIFF::WAV::File*)metadata->file;
+ ID3v2::Tag *tag2 = _file->tag();
if (tag2 == NULL) { // Check if we have a valid tag for processing
metadata_editor_error("Error. ID3v2 tag does not exist. Can not proceed metadata extraction");
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret);
// Bring the pointer to actual file type and make tags pointers
- TagLib::MPEG::File *_file = (TagLib::MPEG::File*)metadata->file;
- TagLib::ID3v1::Tag *tag1 = _file->ID3v1Tag();
- TagLib::ID3v2::Tag *tag2 = _file->ID3v2Tag(true);
+ MPEG::File *_file = (MPEG::File*)metadata->file;
+ ID3v1::Tag *tag1 = _file->ID3v1Tag();
+ ID3v2::Tag *tag2 = _file->ID3v2Tag(true);
metadata_editor_retvm_if(tag2 == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag was not created. Can not proceed metadata updating");
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret);
// Bring the pointer to actual file type and make tags pointers
- TagLib::FLAC::File *_file = (TagLib::FLAC::File*)metadata->file;
- TagLib::Ogg::XiphComment *xtag = _file->xiphComment(true);
+ FLAC::File *_file = (FLAC::File*)metadata->file;
+ Ogg::XiphComment *xtag = _file->xiphComment(true);
if (!xtag) { // Check if we have a valid tag for processing
metadata_editor_error("Error. Xiph Comment was not created. Can not proceed metadata updating");
return METADATA_EDITOR_ERROR_OPERATION_FAILED;
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret);
// Bring the pointer to actual file type and make tags pointers
- TagLib::Ogg::Vorbis::File *_file = (TagLib::Ogg::Vorbis::File*)metadata->file;
- TagLib::Ogg::XiphComment *xtag = _file->tag();
+ Ogg::Vorbis::File *_file = (Ogg::Vorbis::File*)metadata->file;
+ Ogg::XiphComment *xtag = _file->tag();
if (!xtag) { // Check if we have a valid tag for processing
metadata_editor_error("Error. Xiph Comment was not created. Can not proceed metadata updating");
return METADATA_EDITOR_ERROR_OPERATION_FAILED;
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret);
// Bring the pointer to actual file type and make tags pointers
- TagLib::Ogg::FLAC::File *_file = (TagLib::Ogg::FLAC::File*)metadata->file;
- TagLib::Ogg::XiphComment *xtag = _file->tag();
+ Ogg::FLAC::File *_file = (Ogg::FLAC::File*)metadata->file;
+ Ogg::XiphComment *xtag = _file->tag();
if (!xtag) { // Check if we have a valid tag for processing
metadata_editor_error("Error. Xiph Comment was not created. Can not proceed metadata updating");
return METADATA_EDITOR_ERROR_OPERATION_FAILED;
metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret);
// Bring the pointer to actual file type and make tags pointers
- TagLib::RIFF::WAV::File *_file = (TagLib::RIFF::WAV::File*)metadata->file;
- TagLib::ID3v2::Tag *tag2 = _file->tag();
+ RIFF::WAV::File *_file = (RIFF::WAV::File*)metadata->file;
+ ID3v2::Tag *tag2 = _file->tag();
// Check if the valid tag pointer exist
if (tag2 == NULL) {
metadata_editor_error("Error. ID3v2 tag was not created. Can not proceed metadata updating");
switch (_metadata->filetype) {
case METADATA_EDITOR_FORMAT_MP3: {
- TagLib::MPEG::File *_file = (TagLib::MPEG::File*)_metadata->file;
- TagLib::ID3v1::Tag *tag1 = _file->ID3v1Tag();
+ MPEG::File *_file = (MPEG::File*)_metadata->file;
+ ID3v1::Tag *tag1 = _file->ID3v1Tag();
if (!tag1 || tag1->isEmpty()) { // If no ID3v1 tag - prevent its creation
- if (_file->save(TagLib::MPEG::File::ID3v2 | TagLib::MPEG::File::APE))
+ if (_file->save(MPEG::File::ID3v2 | MPEG::File::APE))
return METADATA_EDITOR_ERROR_NONE;
} else { // otherwise - save all tags in file
- if (_file->save(TagLib::MPEG::File::AllTags))
+ if (_file->save(MPEG::File::AllTags))
return METADATA_EDITOR_ERROR_NONE;
}
}
}
-static char * __get_mime_type(const TagLib::String& mime_type)
+static char * __get_mime_type(const String& mime_type)
{
if (mime_type == MIME_TYPE_JPEG || mime_type == MIME_TYPE_PNG)
return g_strdup(mime_type.toCString());
return NULL;
}
-static char * __get_mime_type_from_cover_art(const TagLib::MP4::CoverArt& cover_art)
+static char * __get_mime_type_from_cover_art(const MP4::CoverArt& cover_art)
{
- if (cover_art.format() == TagLib::MP4::CoverArt::JPEG)
+ if (cover_art.format() == MP4::CoverArt::JPEG)
return g_strdup(MIME_TYPE_JPEG);
- else if (cover_art.format() == TagLib::MP4::CoverArt::PNG)
+ else if (cover_art.format() == MP4::CoverArt::PNG)
return g_strdup(MIME_TYPE_PNG);
return NULL;
}
-static int __get_APIC(TagLib::ID3v2::Tag *tag, int index, void **picture, int *size, char **mime_type)
+static int __get_APIC(ID3v2::Tag *tag, int index, void **picture, int *size, char **mime_type)
{
metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. No ID3v2 tag in file.");
- TagLib::ID3v2::FrameList lst = tag->frameListMap()["APIC"];
+ ID3v2::FrameList lst = tag->frameListMap()["APIC"];
// Check if there are pictures in the tag
if (lst.isEmpty()) {
metadata_editor_info("There are %u pictures in file. Start of picture number %d extraction", lst.size(), index);
- auto pictureFrame = static_cast<TagLib::ID3v2::AttachedPictureFrame*>(lst[index]);
+ auto pictureFrame = static_cast<ID3v2::AttachedPictureFrame*>(lst[index]);
uint pictureSize = pictureFrame->picture().size();
metadata_editor_retvm_if(pictureSize == 0, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Size of picture is 0");
static int __get_mp3_picture(metadata_editor_s *metadata, int index, void **picture, int *size, char **mime_type)
{
- return __get_APIC(dynamic_cast<TagLib::MPEG::File*>(metadata->file)->ID3v2Tag(), index, picture, size, mime_type);
+ return __get_APIC(dynamic_cast<MPEG::File*>(metadata->file)->ID3v2Tag(), index, picture, size, mime_type);
}
static int __get_mp4_picture(metadata_editor_s *metadata, int index, void **picture, int *size, char **mime_type)
{
- auto tag = dynamic_cast<TagLib::MP4::Tag*>(metadata->file->tag());
+ auto tag = dynamic_cast<MP4::Tag*>(metadata->file->tag());
metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist");
if (!(tag->contains("covr"))) {
return METADATA_EDITOR_ERROR_OPERATION_FAILED;
}
- TagLib::MP4::CoverArtList lst = tag->item("covr").toCoverArtList();
+ MP4::CoverArtList lst = tag->item("covr").toCoverArtList();
// Check if the index is in range of CoverArtList Item
if ((index < 0) || ((uint)index >= lst.size())) {
return METADATA_EDITOR_ERROR_INVALID_PARAMETER;
}
- auto pictureFrame = static_cast<TagLib::MP4::CoverArt>(lst[index]);
+ auto pictureFrame = static_cast<MP4::CoverArt>(lst[index]);
int pictureSize = pictureFrame.data().size();
metadata_editor_retvm_if(pictureSize == 0, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Size of picture is 0");
#if 0
static int __get_flac_picture(metadata_editor_s *metadata, int index, void **picture, int *size, char **mime_type)
{
- TagLib::FLAC::File *_file = (TagLib::FLAC::File*) metadata->file;
- TagLib::List<TagLib::FLAC::Picture*> lst = _file->pictureList();
+ FLAC::File *_file = (FLAC::File*) metadata->file;
+ List<FLAC::Picture*> lst = _file->pictureList();
if (lst.isEmpty()) {
metadata_editor_error("No pictures in FLAC file");
return METADATA_EDITOR_ERROR_INVALID_PARAMETER;
}
- auto pictureFrame = static_cast<TagLib::FLAC::Picture*>(lst[index]);
+ auto pictureFrame = static_cast<FLAC::Picture*>(lst[index]);
int pictureSize = pictureFrame->data().size();
metadata_editor_retvm_if(pictureSize == 0, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Size of picture is 0");
static int __get_wav_picture(metadata_editor_s *metadata, int index, void **picture, int *size, char **mime_type)
{
- TagLib::RIFF::WAV::File *_file = (TagLib::RIFF::WAV::File*)metadata->file;
+ RIFF::WAV::File *_file = (RIFF::WAV::File*)metadata->file;
return __get_APIC(_file->tag(), index, picture, size, mime_type);
}
}
}
-static int __append_APIC(TagLib::ID3v2::Tag *tag, void *picture, size_t size, const char *mime_type)
+static int __append_APIC(ID3v2::Tag *tag, void *picture, size_t size, const char *mime_type)
{
metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. No ID3v2 tag in file.");
- auto pictureFrame = new TagLib::ID3v2::AttachedPictureFrame();
+ auto pictureFrame = new ID3v2::AttachedPictureFrame();
metadata_editor_info("New APIC frame will be added to the ID3v2 tag");
- pictureFrame->setPicture(TagLib::ByteVector((char*)picture, size));
- pictureFrame->setType(TagLib::ID3v2::AttachedPictureFrame::FrontCover);
+ pictureFrame->setPicture(ByteVector((char*)picture, size));
+ pictureFrame->setType(ID3v2::AttachedPictureFrame::FrontCover);
pictureFrame->setMimeType(mime_type);
tag->addFrame(pictureFrame);
}
static int __append_mp3_picture(metadata_editor_s *metadata, void *picture ,size_t size, const char *mime_type)
{
- return __append_APIC(dynamic_cast<TagLib::MPEG::File*>(metadata->file)->ID3v2Tag(true), picture, size, mime_type);
+ return __append_APIC(dynamic_cast<MPEG::File*>(metadata->file)->ID3v2Tag(true), picture, size, mime_type);
}
static int __append_mp4_picture(metadata_editor_s *metadata, void *picture, size_t size, const char *mime_type)
{
- auto tag = dynamic_cast<TagLib::MP4::Tag*>(metadata->file->tag());
+ auto tag = dynamic_cast<MP4::Tag*>(metadata->file->tag());
metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist");
- TagLib::MP4::CoverArtList lst;
- TagLib::MP4::CoverArt::Format format = TagLib::MP4::CoverArt::Unknown;
+ MP4::CoverArtList lst;
+ MP4::CoverArt::Format format = MP4::CoverArt::Unknown;
if (strncmp(mime_type, MIME_TYPE_JPEG, strlen(MIME_TYPE_JPEG)) == 0)
- format = TagLib::MP4::CoverArt::JPEG;
+ format = MP4::CoverArt::JPEG;
else if (strncmp(mime_type, MIME_TYPE_PNG, strlen(MIME_TYPE_PNG)) == 0)
- format = TagLib::MP4::CoverArt::PNG;
+ format = MP4::CoverArt::PNG;
if (tag->contains("covr")) {
metadata_editor_info("The item <covr> exists. Adding picture");
lst = tag->item("covr").toCoverArtList();
}
- lst.append(TagLib::MP4::CoverArt(format, TagLib::ByteVector((char*)picture, size)));
+ lst.append(MP4::CoverArt(format, ByteVector((char*)picture, size)));
tag->setItem("covr", lst);
return METADATA_EDITOR_ERROR_NONE;
#if 0
static int __append_flac_picture(metadata_editor_s *metadata, void *picture, size_t size, const char *mime_type)
{
- TagLib::FLAC::File *_file = (TagLib::FLAC::File*) metadata->file;
- auto frontCover = new TagLib::FLAC::Picture;
+ FLAC::File *_file = (FLAC::File*) metadata->file;
+ auto frontCover = new FLAC::Picture;
metadata_editor_debug_fenter();
- frontCover->setData(TagLib::ByteVector((char*)picture, size));
- frontCover->setType(TagLib::FLAC::Picture::FrontCover);
+ frontCover->setData(ByteVector((char*)picture, size));
+ frontCover->setType(FLAC::Picture::FrontCover);
frontCover->setMimeType(mime_type);
_file->addPicture(frontCover);
static int __append_wav_picture(metadata_editor_s *metadata, void *picture, size_t size, const char *mime_type)
{
- return __append_APIC(dynamic_cast<TagLib::ID3v2::Tag*>(metadata->file->tag()), picture, size, mime_type);
+ return __append_APIC(dynamic_cast<ID3v2::Tag*>(metadata->file->tag()), picture, size, mime_type);
}
#endif
return ret;
}
-static int __remove_APIC(TagLib::ID3v2::Tag *tag, int index)
+static int __remove_APIC(ID3v2::Tag *tag, int index)
{
metadata_editor_retvm_if(tag == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag was not created. Can not proceed metadata updating");
- TagLib::ID3v2::FrameList lst = tag->frameListMap()["APIC"];
+ ID3v2::FrameList lst = tag->frameListMap()["APIC"];
metadata_editor_retvm_if(lst.isEmpty(), METADATA_EDITOR_ERROR_OPERATION_FAILED, "No pictures in file");
if ((index < 0) || ((uint)index >= lst.size())) {
}
static int __remove_mp3_picture(metadata_editor_s *metadata, int index)
{
- return __remove_APIC(dynamic_cast<TagLib::MPEG::File*>(metadata->file)->ID3v2Tag(true), index);
+ return __remove_APIC(dynamic_cast<MPEG::File*>(metadata->file)->ID3v2Tag(true), index);
}
static int __remove_mp4_picture(metadata_editor_s *metadata, int index)
{
- auto tag = dynamic_cast<TagLib::MP4::Tag*>(metadata->file->tag());
+ auto tag = dynamic_cast<MP4::Tag*>(metadata->file->tag());
metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist");
if (!(tag->contains("covr"))) {
return METADATA_EDITOR_ERROR_OPERATION_FAILED;
}
- TagLib::MP4::CoverArtList lst = tag->item("covr").toCoverArtList();
+ MP4::CoverArtList lst = tag->item("covr").toCoverArtList();
// Check if the index is in range of CoverArtList Item
if ((index < 0) || ((uint)index >= lst.size())) {
}
metadata_editor_info("The picture number %d will be deleted", index);
- int i = 0;
- for (TagLib::MP4::CoverArtList::Iterator picIt = lst.begin(); picIt != lst.end(); ++picIt, ++i) {
- if (i != index) continue;
- lst.erase(picIt);
- break;
- }
+ auto picIt = lst.begin();
+ std::advance(picIt, index);
+ lst.erase(picIt);
tag->setItem("covr", lst); //?? FIX ME!
#if 0
static int __remove_flac_picture(metadata_editor_s *metadata, int index)
{
- TagLib::FLAC::File *_file = (TagLib::FLAC::File*) metadata->file;
- TagLib::List<TagLib::FLAC::Picture*> lst = _file->pictureList();
+ FLAC::File *_file = dynamic_cast<FLAC::File*> metadata->file;
+ List<FLAC::Picture*> lst = _file->pictureList();
if (lst.isEmpty()) {
metadata_editor_error("No pictures in file. Nothing to delete");
}
metadata_editor_info("The picture number %d will be deleted", index);
- int i = 0;
- for (TagLib::List<TagLib::FLAC::Picture*>::Iterator picIt = lst.begin(); picIt != lst.end(); ++picIt, ++i) {
- if (i != index) continue;
- _file->removePicture(*picIt, true);
- break;
- }
+ _file->removePicture(lst[index], true);
return METADATA_EDITOR_ERROR_NONE;
}
static int __remove_wav_picture(metadata_editor_s *metadata, int index)
{
- return __remove_APIC(dynamic_cast<TagLib::ID3v2::Tag*>(metadata->file->tag()), index);
+ return __remove_APIC(dynamic_cast<ID3v2::Tag*>(metadata->file->tag()), index);
}
#endif