From d56ae4a38716d7fd4e0fcdb6a3bd484937d558cb Mon Sep 17 00:00:00 2001 From: hj kim Date: Thu, 7 May 2020 17:27:48 +0900 Subject: [PATCH 01/16] Use defines for mime Change-Id: I5de8de8a0f6325dab8850bd25c8ac99be79c56e9 --- src/metadata_editor.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 0d6f146..9a60fcb 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -699,8 +699,6 @@ int __metadata_editor_get_file_type(const char *path) { static int __metadata_editor_get_picture_type(const char *path, char **type) { int ret = 0; char mimetype[255] = {0, }; - const char *type_jpeg = "image/jpeg"; - const char *type_png = "image/png"; /* get content type and mime type from file. */ ret = aul_get_mime_from_file(path, mimetype, sizeof(mimetype)); @@ -712,10 +710,10 @@ static int __metadata_editor_get_picture_type(const char *path, char **type) { metadata_editor_retvm_if(ret < 0, METADATA_EDITOR_ERROR_OPERATION_FAILED, "__metadata_editor_get_file_ext failed"); if (strcasecmp(ext, "JPG") == 0 || strcasecmp(ext, "JPEG") == 0) { - *type = g_strndup(type_jpeg, strlen(type_jpeg)); + *type = g_strdup(MIME_TYPE_JPEG); return METADATA_EDITOR_ERROR_NONE; } else if (strcasecmp(ext, "PNG") == 0) { - *type = g_strndup(type_png, strlen(type_png)); + *type = g_strdup(MIME_TYPE_JPEG); return METADATA_EDITOR_ERROR_NONE; } else { return METADATA_EDITOR_ERROR_NOT_SUPPORTED; @@ -1580,9 +1578,9 @@ extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const metadata_editor_info("The item exists. Adding picture"); TagLib::MP4::CoverArtList lst = it->second.toCoverArtList(); TagLib::MP4::CoverArt::Format format; - if (strncmp(type, "image/jpeg", strlen("image/jpeg")) == 0) + if (strncmp(type, MIME_TYPE_JPEG, strlen(MIME_TYPE_JPEG)) == 0) format = TagLib::MP4::CoverArt::JPEG; - else if (strncmp(type, "image/png", strlen("image/jpeg")) == 0) + else if (strncmp(type, MIME_TYPE_PNG, strlen(MIME_TYPE_PNG)) == 0) format = TagLib::MP4::CoverArt::PNG; else format = (TagLib::MP4::CoverArt::Format)0xFFFF; @@ -1595,9 +1593,9 @@ extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const } else { // Item was not found metadata_editor_info("The item does not exist. Adding picture"); TagLib::MP4::CoverArt::Format format; - if (strncmp(type, "image/jpeg", strlen("image/jpeg")) == 0) + if (strncmp(type, MIME_TYPE_JPEG, strlen(MIME_TYPE_JPEG)) == 0) format = TagLib::MP4::CoverArt::JPEG; - else if (strncmp(type, "image/png", strlen("image/jpeg")) == 0) + else if (strncmp(type, MIME_TYPE_PNG, strlen(MIME_TYPE_PNG)) == 0) format = TagLib::MP4::CoverArt::PNG; else format = (TagLib::MP4::CoverArt::Format)0xFFFF; -- 2.7.4 From eb7da85f959318f6e0f57000c3798beca09aedd4 Mon Sep 17 00:00:00 2001 From: hj kim Date: Thu, 7 May 2020 18:38:27 +0900 Subject: [PATCH 02/16] Improve metadata_editor_append_picture() API Change-Id: I030ebb2539b49eb9a1748cd9e529dd967432d45f --- src/metadata_editor.cpp | 207 ++++++++++++++++++++---------------------------- 1 file changed, 87 insertions(+), 120 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 9a60fcb..83c250e 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -734,7 +734,7 @@ static int __metadata_editor_get_picture_type(const char *path, char **type) { return METADATA_EDITOR_ERROR_NOT_SUPPORTED; } -int __metadata_editor_get_picture_info(const char *path, void **picture, int *size, char **type) { +int __metadata_editor_get_picture_info(const char *path, void **picture, size_t *size, char **type) { int ret; ret = __metadata_editor_get_picture_type(path, type); @@ -1423,16 +1423,12 @@ static int __get_mp4_picture(metadata_editor_s* metadata, int index, void **pict 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(); - TagLib::MP4::ItemListMap::ConstIterator it = itemMap.find("covr"); - - if (it == itemMap.end()) { + if (!(tag->contains("covr"))) { metadata_editor_error("No item in file. No pictures in file"); return METADATA_EDITOR_ERROR_OPERATION_FAILED; } - TagLib::MP4::CoverArtList lst = it->second.toCoverArtList(); + TagLib::MP4::CoverArtList lst = tag->item("covr").toCoverArtList(); // Check if the index is in range of CoverArtList Item if ((index < 0) || ((uint)index >= lst.size())) { @@ -1519,12 +1515,81 @@ extern "C" int metadata_editor_get_picture(metadata_editor_h metadata, int index } } +static int __append_APIC(TagLib::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(); + + 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->setMimeType(mime_type); + + tag->addFrame(pictureFrame); + + return METADATA_EDITOR_ERROR_NONE; + +} +static int __append_mp3_picture(metadata_editor_s* metadata, void *picture ,size_t size, const char *mime_type) +{ + return __append_APIC(dynamic_cast(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(metadata->file->tag()); + + metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag was not created"); + + TagLib::MP4::CoverArtList lst; + TagLib::MP4::CoverArt::Format format = TagLib::MP4::CoverArt::Unknown; + if (strncmp(mime_type, MIME_TYPE_JPEG, strlen(MIME_TYPE_JPEG)) == 0) + format = TagLib::MP4::CoverArt::JPEG; + else if (strncmp(mime_type, MIME_TYPE_PNG, strlen(MIME_TYPE_PNG)) == 0) + format = TagLib::MP4::CoverArt::PNG; + + if (tag->contains("covr")) { + metadata_editor_info("The item exists. Adding picture"); + lst = tag->item("covr").toCoverArtList(); + } + + lst.append(TagLib::MP4::CoverArt(format, TagLib::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; + + metadata_editor_debug_fenter(); + + frontCover->setData(TagLib::ByteVector((char*)picture, size)); + frontCover->setType(TagLib::FLAC::Picture::FrontCover); + frontCover->setMimeType(mime_type); + + _file->addPicture(frontCover); + + return METADATA_EDITOR_ERROR_NONE; +} + +static int __append_wav_picture(metadata_editor_s* metadata, void *picture, size_t size, const char *mime_type) +{ + return __append_APIC(dynamic_cast(metadata->file->tag()), picture, size, mime_type); +} +#endif + // *** This function appends a cover art picture to the file *** // extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const char *path) { int ret = METADATA_EDITOR_ERROR_NONE; void *picture = NULL; - int size = 0; - char *type = NULL; + size_t size = 0; + char *mime_type = NULL; metadata_editor_s* _metadata = (metadata_editor_s*) metadata; @@ -1532,124 +1597,26 @@ extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret); metadata_editor_retvm_if(!path, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid path"); - ret = __metadata_editor_get_picture_info(path, &picture, &size, &type); + ret = __metadata_editor_get_picture_info(path, &picture, &size, &mime_type); metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); - switch (_metadata->filetype) { // Process the file according to the specified file type - case METADATA_EDITOR_FORMAT_MP3: { - // Bring the pointer to actual file type and make tags pointers - TagLib::MPEG::File* _file = (TagLib::MPEG::File*)_metadata->file; - TagLib::ID3v2::Tag* tag2 = _file->ID3v2Tag(true); - // Check if the valid tag pointer exists - if (tag2 == NULL) { - metadata_editor_error("Error. ID3v2 tag was not created. Can not proceed metadata updating"); - ret = METADATA_EDITOR_ERROR_OPERATION_FAILED; - break; - } - TagLib::ID3v2::AttachedPictureFrame* pictureFrame = new TagLib::ID3v2::AttachedPictureFrame(); - if (pictureFrame == NULL) { - metadata_editor_error("OUT_OF_MEMORY"); - ret = METADATA_EDITOR_ERROR_OUT_OF_MEMORY; - break; - } - 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->setMimeType(type); - - tag2->addFrame(pictureFrame); + switch (_metadata->filetype) { + case METADATA_EDITOR_FORMAT_MP3: + ret = __append_mp3_picture(_metadata, picture, size, mime_type); + break; - ret = METADATA_EDITOR_ERROR_NONE; + case METADATA_EDITOR_FORMAT_MP4: + ret = __append_mp4_picture(_metadata, picture, size, mime_type); break; - } - case METADATA_EDITOR_FORMAT_MP4: { - TagLib::MP4::File* _file = (TagLib::MP4::File*) _metadata->file; - TagLib::MP4::Tag* tag = _file->tag(); - if (!tag) { - metadata_editor_error("Tag was not created"); - ret = METADATA_EDITOR_ERROR_OPERATION_FAILED; - break; - } - // Get map of items directly from tag and launch a search of specific item - TagLib::MP4::ItemListMap& itemMap = tag->itemListMap(); - TagLib::MP4::ItemListMap::ConstIterator it = itemMap.find("covr"); - if (it != itemMap.end()) { // Item was found - metadata_editor_info("The item exists. Adding picture"); - TagLib::MP4::CoverArtList lst = it->second.toCoverArtList(); - TagLib::MP4::CoverArt::Format format; - if (strncmp(type, MIME_TYPE_JPEG, strlen(MIME_TYPE_JPEG)) == 0) - format = TagLib::MP4::CoverArt::JPEG; - else if (strncmp(type, MIME_TYPE_PNG, strlen(MIME_TYPE_PNG)) == 0) - format = TagLib::MP4::CoverArt::PNG; - else - format = (TagLib::MP4::CoverArt::Format)0xFFFF; - TagLib::MP4::CoverArt cover(format, TagLib::ByteVector((char*)picture, size)); - lst.append(cover); - itemMap.insert("covr", TagLib::MP4::Item(lst)); - - ret = METADATA_EDITOR_ERROR_NONE; - break; - } else { // Item was not found - metadata_editor_info("The item does not exist. Adding picture"); - TagLib::MP4::CoverArt::Format format; - if (strncmp(type, MIME_TYPE_JPEG, strlen(MIME_TYPE_JPEG)) == 0) - format = TagLib::MP4::CoverArt::JPEG; - else if (strncmp(type, MIME_TYPE_PNG, strlen(MIME_TYPE_PNG)) == 0) - format = TagLib::MP4::CoverArt::PNG; - else - format = (TagLib::MP4::CoverArt::Format)0xFFFF; - TagLib::MP4::CoverArt cover(format, TagLib::ByteVector((char*)picture, size)); - TagLib::MP4::CoverArtList lst; - lst.append(cover); - itemMap.insert("covr", TagLib::MP4::Item(lst)); - - ret = METADATA_EDITOR_ERROR_NONE; - break; - } - } #if 0 - case METADATA_EDITOR_FORMAT_FLAC: { - TagLib::FLAC::File* _file = (TagLib::FLAC::File*) _metadata->file; - TagLib::FLAC::Picture* frontCover = new TagLib::FLAC::Picture; - if (frontCover == NULL) { - metadata_editor_error("OUT_OF_MEMORY"); - ret = METADATA_EDITOR_ERROR_OUT_OF_MEMORY; - break; - } - frontCover->setData(TagLib::ByteVector((char*)picture, size)); - frontCover->setType(TagLib::FLAC::Picture::FrontCover); - frontCover->setMimeType(type); - - metadata_editor_info("Picture will be added to FLAC file"); - _file->addPicture(frontCover); - ret = METADATA_EDITOR_ERROR_NONE; + case METADATA_EDITOR_FORMAT_FLAC: + ret = __append_flac_picture(_metadata, picture, size, mime_type); break; - } - case METADATA_EDITOR_FORMAT_WAV: { - // 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(); - // Check if the valid tag pointer exists - if (tag2 == NULL) { - metadata_editor_error("Error. ID3v2 tag was not created. Can not proceed metadata updating"); - ret = METADATA_EDITOR_ERROR_OPERATION_FAILED; - break; - } - TagLib::ID3v2::AttachedPictureFrame* pictureFrame = new TagLib::ID3v2::AttachedPictureFrame(); - if (pictureFrame == NULL) { - metadata_editor_error("OUT_OF_MEMORY"); - ret = METADATA_EDITOR_ERROR_OUT_OF_MEMORY; - break; - } - 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->setMimeType(type); - tag2->addFrame(pictureFrame); - ret = METADATA_EDITOR_ERROR_NONE; + + case METADATA_EDITOR_FORMAT_WAV: + ret = __append_wav_picture(_metadata, picture, size, mime_type); break; - } #endif default: { metadata_editor_error("Wrong file type"); @@ -1659,7 +1626,7 @@ extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const } META_SAFE_FREE(picture); - g_free(type); + g_free(mime_type); return ret; } -- 2.7.4 From f75fd7cbd84187b745bb4e2d19b1182d57a3be36 Mon Sep 17 00:00:00 2001 From: hj kim Date: Fri, 8 May 2020 15:28:47 +0900 Subject: [PATCH 03/16] Improve metadata_editor_remove_picture() API Change-Id: Ib957753653b501d8c6b543a7e789b523db199e7a --- src/metadata_editor.cpp | 204 +++++++++++++++++++++++------------------------- 1 file changed, 97 insertions(+), 107 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 83c250e..28bbe59 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -1631,6 +1631,92 @@ extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const return ret; } +static int __remove_APIC(TagLib::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"]; + metadata_editor_retvm_if(lst.isEmpty(), METADATA_EDITOR_ERROR_OPERATION_FAILED, "No pictures in file"); + + if ((index < 0) || ((uint)index >= lst.size())) { + metadata_editor_error("Index of picture is out of range"); + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } + + tag->removeFrame(lst[index]); + + return METADATA_EDITOR_ERROR_NONE; +} +static int __remove_mp3_picture(metadata_editor_s* metadata, int index) +{ + return __remove_APIC(dynamic_cast(metadata->file)->ID3v2Tag(true), index); +} + +static int __remove_mp4_picture(metadata_editor_s* metadata, int index) +{ + auto tag = dynamic_cast(metadata->file->tag()); + metadata_editor_retvm_if(tag == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. tag not exist."); + + if (!(tag->contains("covr"))) { + metadata_editor_error("No item in file. No pictures in file"); + return METADATA_EDITOR_ERROR_OPERATION_FAILED; + } + + TagLib::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_error("Index of picture is out of range"); + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } + + 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; + } + + tag->setItem("covr", lst); //?? FIX ME! + + return METADATA_EDITOR_ERROR_NONE; +} + +#if 0 +static int __remove_flac_picture(metadata_editor_s* metadata, int index) +{ + TagLib::FLAC::File* _file = (TagLib::FLAC::File*) metadata->file; + TagLib::List lst = _file->pictureList(); + + if (lst.isEmpty()) { + metadata_editor_error("No pictures in file. Nothing to delete"); + return METADATA_EDITOR_ERROR_OPERATION_FAILED; + } + + // Check if the index is in range of CoverArtList Item + if ((index < 0) || ((uint)index >= lst.size())) { + metadata_editor_error("Index of picture is out of range"); + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } + + metadata_editor_info("The picture number %d will be deleted", index); + int i = 0; + for (TagLib::List::Iterator picIt = lst.begin(); picIt != lst.end(); ++picIt, ++i) { + if (i != index) continue; + _file->removePicture(*picIt, true); + break; + } + + return METADATA_EDITOR_ERROR_NONE; +} + +static int __remove_wav_picture(metadata_editor_s* metadata, int index) +{ + return __remove_APIC(dynamic_cast(metadata->file->tag()), index); +} +#endif + // *** This function is used to delete picture with specified index *** // extern "C" int metadata_editor_remove_picture(metadata_editor_h metadata, int index) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -1639,114 +1725,18 @@ extern "C" int metadata_editor_remove_picture(metadata_editor_h metadata, int in ret = __check_metadata_set_parameter(_metadata); metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret); - switch (_metadata->filetype) { // Process the file according to the specified file type - case METADATA_EDITOR_FORMAT_MP3: { - // Bring the pointer to actual file type and make tags pointers - TagLib::MPEG::File* _file = (TagLib::MPEG::File*)_metadata->file; - TagLib::ID3v2::Tag* tag2 = _file->ID3v2Tag(true); - // Check if the valid tag pointer exists - metadata_editor_retvm_if(tag2 == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag was not created. Can not proceed metadata updating"); - TagLib::ID3v2::FrameList lst = tag2->frameListMap()["APIC"]; - // Check if there are pictures in the tag - metadata_editor_retvm_if(lst.isEmpty(), METADATA_EDITOR_ERROR_OPERATION_FAILED, "No pictures in file"); - - // Check if index is correct or not - metadata_editor_retvm_if((index < 0) || (lst.size() <= (uint)index), METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Index of picture is out of range"); - metadata_editor_info("Removing of picture number %d", index); - int i = 0; - // Among all frames we must choose that one with specified index. "i" will be counter - for (TagLib::ID3v2::FrameList::Iterator it = lst.begin(); it != lst.end(); ++it, ++i) { - if (i != index) continue; - tag2->removeFrame(*it); - break; - } - return METADATA_EDITOR_ERROR_NONE; - } - case METADATA_EDITOR_FORMAT_MP4: { - TagLib::MP4::File* _file = (TagLib::MP4::File*) _metadata->file; - TagLib::MP4::Tag* tag = _file->tag(); - metadata_editor_retvm_if(tag == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. tag not exist."); - - // Get map of items directly from tag and launch a search of specific item - TagLib::MP4::ItemListMap& itemMap = tag->itemListMap(); - TagLib::MP4::ItemListMap::ConstIterator it = itemMap.find("covr"); - if (it != itemMap.end()) { // Item was found - TagLib::MP4::CoverArtList lst = it->second.toCoverArtList(); - // Check if the index is in range of CoverArtList Item - if ((index < 0) || ((uint)index >= lst.size())) { // it is not - metadata_editor_error("Index of picture is out of range"); - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } else { // index is in range - 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; - } - itemMap.insert("covr", TagLib::MP4::Item(lst)); - return METADATA_EDITOR_ERROR_NONE; - } - } else { // Item was not found - metadata_editor_error("The item does not exist. Nothing to delete"); - return METADATA_EDITOR_ERROR_OPERATION_FAILED; - } - } + switch (_metadata->filetype) { + case METADATA_EDITOR_FORMAT_MP3: + return __remove_mp3_picture(_metadata, index); + + case METADATA_EDITOR_FORMAT_MP4: + return __remove_mp4_picture(_metadata, index); #if 0 - case METADATA_EDITOR_FORMAT_FLAC: { - TagLib::FLAC::File* _file = (TagLib::FLAC::File*) _metadata->file; - TagLib::List lst = _file->pictureList(); - if (lst.isEmpty()) { - metadata_editor_error("No pictures in file. Nothing to delete"); - return METADATA_EDITOR_ERROR_OPERATION_FAILED; - } - // Check if the index is in range of CoverArtList Item - if ((index < 0) || ((uint)index >= lst.size())) { // it is not - metadata_editor_error("Index of picture is out of range"); - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } else { // index is in range - metadata_editor_info("The picture number %d will be deleted", index); - int i = 0; - for (TagLib::List::Iterator picIt = lst.begin(); picIt != lst.end(); ++picIt, ++i) { - if (i != index) continue; - _file->removePicture(*picIt, true); - break; - } - return METADATA_EDITOR_ERROR_NONE; - } - } - case METADATA_EDITOR_FORMAT_WAV: { - // 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(); - // Check if the valid tag pointer exists - if (tag2 == NULL) { - metadata_editor_error("Error. ID3v2 tag does not exist. Can not remove picture"); - return METADATA_EDITOR_ERROR_OPERATION_FAILED; - } - TagLib::ID3v2::FrameList lst = tag2->frameListMap()["APIC"]; - // Check if there are pictures in the tag - if (lst.isEmpty()) { - metadata_editor_error("No pictures in file"); - return METADATA_EDITOR_ERROR_OPERATION_FAILED; - } else { // pictures exist in file - // Check if index is correct or not - if ((index < 0) || (lst.size() <= (uint)index)) { - metadata_editor_error("Index of picture is out of range"); - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } else { // everything is correct - begin extraction - metadata_editor_info("Removing of picture number %d", index); - int i = 0; - // Among all frames we must choose that one with specified index. "i" will be counter - for (TagLib::ID3v2::FrameList::Iterator it = lst.begin(); it != lst.end(); ++it, ++i) { - if (i != index) continue; - tag2->removeFrame(*it); - break; - } - return METADATA_EDITOR_ERROR_NONE; - } - } - } + case METADATA_EDITOR_FORMAT_FLAC: + return __remove_flac_picture(_metadata, index); + + case METADATA_EDITOR_FORMAT_WAV: + return __remove_wav_picture(_metadata, index); #endif default: metadata_editor_error("Wrong file type"); -- 2.7.4 From c9d01bf44169f1d03b800b2887e90a9e616b5ebd Mon Sep 17 00:00:00 2001 From: hj kim Date: Mon, 11 May 2020 15:57:33 +0900 Subject: [PATCH 04/16] Bug fix of getting number of pictures. it should return '0' if there is no picture. Change-Id: Ia43d59c27ccc176edba963f31f0940fba7ffb6b7 --- src/metadata_editor.cpp | 66 +++++++++++++------------------------------------ 1 file changed, 17 insertions(+), 49 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 28bbe59..29b4010 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -30,7 +30,6 @@ static int __ID3_getTwixFrameByName(metadata_editor_s* _metadata, TagLib::ID3v1: 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_getFrameByName(metadata_editor_s* _metadata, TagLib::ID3v2::Tag* tag2, const char* frameID, char** value); static int __ID3_setFrameByName(metadata_editor_s* _metadata, TagLib::ID3v2::Tag* tag2, const char* frameID, const char* value); -static int __ID3_getNumberOfPictures(metadata_editor_s* _metadata, TagLib::ID3v2::Tag* tag2, char** value); static int __ID3_getLyricsFrame(metadata_editor_s* _metadata, TagLib::ID3v2::Tag* tag2, char** value); static int __ID3_setTwixCommentFrame(metadata_editor_s* _metadata, TagLib::ID3v1::Tag* tag1, TagLib::ID3v2::Tag* tag2, const char* value); static int __ID3_setLyricsFrame(metadata_editor_s* _metadata, TagLib::ID3v2::Tag* tag2, const char* value); @@ -38,11 +37,9 @@ static int __MP4_getStringItem(metadata_editor_s* _metadata, const char* itemnam static int __MP4_getIntegerItem(metadata_editor_s* _metadata, const char* itemname, char** value); static int __MP4_updateStringItem(metadata_editor_s* _metadata, const char* itemname, const char* value); static int __MP4_updateIntegerItem(metadata_editor_s* _metadata, const char* itemname, const char* value); -static int __MP4_getNumberOfPictures(metadata_editor_s* _metadata, char** value); #if 0 static int __xiph_getFieldValue(metadata_editor_s* _metadata, TagLib::Ogg::XiphComment* xtag, const char* fieldname, char** value); static int __xiph_updateFieldValue(metadata_editor_s* _metadata, TagLib::Ogg::XiphComment* xtag, const char* fieldname, const char* value); -static int __FLAC_getNumberOfPictures(metadata_editor_s* _metadata, char** value); #endif typedef enum { METADATA_EDITOR_FORMAT_MP3 = 0, /**< MP3 File */ @@ -303,23 +300,16 @@ static int __ID3_setFrameByName(metadata_editor_s* _metadata, TagLib::ID3v2::Tag return METADATA_EDITOR_ERROR_NONE; } -// *** This function is used to receive the number of pictures stored in ID3v2 tag of file *** // -static int __ID3_getNumberOfPictures(metadata_editor_s* _metadata, TagLib::ID3v2::Tag* tag2, char** value) { +static int __ID3_getNumberOfPictures(metadata_editor_s* _metadata, TagLib::ID3v2::Tag* tag2, char** value) +{ int ret = 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); 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()["APIC"]; // link to picture frames in tag - // Check if the frames exist - metadata_editor_retvm_if(lst.isEmpty(), METADATA_EDITOR_ERROR_NONE, "No pictures in file"); + *value = g_strdup_printf("%u", tag2->frameListMap()["APIC"].size()); - metadata_editor_info("APIC frames exist in file"); - char buf[META_MAX_BUF_LEN] = {0, }; - // Convert the number of frames (lst.size()) to c-string - snprintf(buf, META_MAX_BUF_LEN, "%u", lst.size()); - *value = strndup(buf, strlen(buf)); return METADATA_EDITOR_ERROR_NONE; } @@ -547,30 +537,19 @@ static int __MP4_updateIntegerItem(metadata_editor_s* _metadata, const char* ite } } -// *** This function is used to find the number of pictures stored in MP4 file *** // -static int __MP4_getNumberOfPictures(metadata_editor_s* _metadata, char** value) { +static int __MP4_getNumberOfPictures(metadata_editor_s* _metadata, char** value) +{ int ret = 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::MP4::File* _file = (TagLib::MP4::File*) _metadata->file; - TagLib::MP4::Tag* tag = _file->tag(); - metadata_editor_retvm_if(tag == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); + auto tag = dynamic_cast(_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(); - TagLib::MP4::ItemListMap::ConstIterator it = itemMap.find("covr"); - if (it != itemMap.end()) { // Item was found - char buf[META_MAX_BUF_LEN] = {0, }; - snprintf(buf, META_MAX_BUF_LEN, "%u", it->second.toCoverArtList().size()); // Convert integer value of size to its c-string representation - if (strlen(buf) > 0) - *value = g_strdup(buf); - return METADATA_EDITOR_ERROR_NONE; - } else { // Item was not found - metadata_editor_info("No item in file"); - return METADATA_EDITOR_ERROR_NONE; - } + *value = g_strdup_printf("%u", tag->contains("covr") ? tag->item("covr").toCoverArtList().size() : 0); + + return METADATA_EDITOR_ERROR_NONE; } #if 0 // *** This function is used to extract string from Xiph Comment field *** // @@ -624,25 +603,17 @@ static int __xiph_updateFieldValue(metadata_editor_s* _metadata, TagLib::Ogg::Xi return METADATA_EDITOR_ERROR_NONE; } -// *** This function is used to receive the number of pictures in FLAC file *** // -static int __FLAC_getNumberOfPictures(metadata_editor_s* _metadata, char** value) { +static int __FLAC_getNumberOfPictures(metadata_editor_s* _metadata, char** value) +{ int ret = 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; - if (_file->pictureList().isEmpty()) { - metadata_editor_info("No pictures in FLAC file"); - return METADATA_EDITOR_ERROR_NONE; - } - uint number = _file->pictureList().size(); - metadata_editor_info("There are %u picture(s) in file", number); - char buf[META_MAX_BUF_LEN] = {0, }; - snprintf(buf, META_MAX_BUF_LEN, "%u", number); // Convert integer value of size to its c-string representation - uint length = strlen(buf); - metadata_editor_retvm_if(length == 0, METADATA_EDITOR_ERROR_NONE, "Empty string"); - *value = strndup(buf, length); + + *value = g_strdup_printf("%u", _file->pictureList().size()); + return METADATA_EDITOR_ERROR_NONE; } #endif @@ -1411,15 +1382,12 @@ static int __get_APIC(TagLib::ID3v2::Tag* tag, int index, void **picture, int *s static int __get_mp3_picture(metadata_editor_s* metadata, int index, void **picture, int *size, char **mime_type) { - TagLib::MPEG::File* _file = (TagLib::MPEG::File*)metadata->file; - - return __get_APIC(_file->ID3v2Tag(), index, picture, size, mime_type); + return __get_APIC(dynamic_cast(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) { - TagLib::MP4::File* _file = (TagLib::MP4::File*) metadata->file; - TagLib::MP4::Tag* tag = _file->tag(); + auto tag = dynamic_cast(metadata->file->tag()); metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); -- 2.7.4 From 6fa9fc5c8c3168175ab13ff9a8dd8cac6d7d17bd Mon Sep 17 00:00:00 2001 From: hj kim Date: Tue, 12 May 2020 19:10:59 +0900 Subject: [PATCH 05/16] Use auto keyword Change-Id: I9d87e1c47f93554cf79867044f01260a7546e682 --- src/metadata_editor.cpp | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 29b4010..726160d 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -413,17 +413,16 @@ static int __ID3_setLyricsFrame(metadata_editor_s* _metadata, TagLib::ID3v2::Tag return METADATA_EDITOR_ERROR_NONE; } -// *** This function extracts string values from tag in MP4 file *** // -static int __MP4_getStringItem(metadata_editor_s* _metadata, const char* itemname, char **value) { +static int __MP4_getStringItem(metadata_editor_s* _metadata, const char* itemname, char **value) +{ int ret = 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); metadata_editor_retvm_if(!itemname, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid itemname"); - TagLib::MP4::File* _file = (TagLib::MP4::File*) _metadata->file; - TagLib::MP4::Tag* tag = _file->tag(); - metadata_editor_retvm_if(tag == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); + auto tag = dynamic_cast(_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(); @@ -445,17 +444,16 @@ static int __MP4_getStringItem(metadata_editor_s* _metadata, const char* itemnam } } -// *** This function extracts integer value from item in MP4 tag *** // -static int __MP4_getIntegerItem(metadata_editor_s* _metadata, const char* itemname, char** value) { +static int __MP4_getIntegerItem(metadata_editor_s* _metadata, const char* itemname, char** value) +{ int ret = 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); metadata_editor_retvm_if(!itemname, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid itemname"); - TagLib::MP4::File* _file = (TagLib::MP4::File*) _metadata->file; - TagLib::MP4::Tag* tag = _file->tag(); - metadata_editor_retvm_if(tag == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); + auto tag = dynamic_cast(_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(); @@ -475,17 +473,16 @@ static int __MP4_getIntegerItem(metadata_editor_s* _metadata, const char* itemna } } -// *** This function adds (or changes) string item of itemname type *** // -static int __MP4_updateStringItem(metadata_editor_s* _metadata, const char* itemname, const char* value) { +static int __MP4_updateStringItem(metadata_editor_s* _metadata, const char* itemname, const char* value) +{ int ret = METADATA_EDITOR_ERROR_NONE; ret = __check_metadata_set_parameter(_metadata); 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"); - TagLib::MP4::File* _file = (TagLib::MP4::File*) _metadata->file; - TagLib::MP4::Tag* tag = _file->tag(); - metadata_editor_retvm_if(tag == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag was not created"); + auto tag = dynamic_cast(_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(); @@ -503,17 +500,16 @@ static int __MP4_updateStringItem(metadata_editor_s* _metadata, const char* item return METADATA_EDITOR_ERROR_NONE; } -// *** This function adds (or changes) integer item of itemname type *** // -static int __MP4_updateIntegerItem(metadata_editor_s* _metadata, const char* itemname, const char* value) { +static int __MP4_updateIntegerItem(metadata_editor_s* _metadata, const char* itemname, const char* value) +{ int ret = METADATA_EDITOR_ERROR_NONE; ret = __check_metadata_set_parameter(_metadata); 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"); - TagLib::MP4::File* _file = (TagLib::MP4::File*) _metadata->file; - TagLib::MP4::Tag* tag = _file->tag(); - metadata_editor_retvm_if(tag == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag was not created"); + auto tag = dynamic_cast(_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(); @@ -1388,7 +1384,6 @@ static int __get_mp3_picture(metadata_editor_s* metadata, int index, void **pict static int __get_mp4_picture(metadata_editor_s* metadata, int index, void **picture, int *size, char **mime_type) { auto tag = dynamic_cast(metadata->file->tag()); - metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); if (!(tag->contains("covr"))) { @@ -1508,8 +1503,7 @@ static int __append_mp3_picture(metadata_editor_s* metadata, void *picture ,size static int __append_mp4_picture(metadata_editor_s* metadata, void *picture, size_t size, const char *mime_type) { auto tag = dynamic_cast(metadata->file->tag()); - - metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag was not created"); + 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; @@ -1623,7 +1617,7 @@ static int __remove_mp3_picture(metadata_editor_s* metadata, int index) static int __remove_mp4_picture(metadata_editor_s* metadata, int index) { auto tag = dynamic_cast(metadata->file->tag()); - metadata_editor_retvm_if(tag == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. tag not exist."); + metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); if (!(tag->contains("covr"))) { metadata_editor_error("No item in file. No pictures in file"); -- 2.7.4 From e09ee756b265412ff0448adfee31defa3cd2cd14 Mon Sep 17 00:00:00 2001 From: hj kim Date: Wed, 13 May 2020 14:25:43 +0900 Subject: [PATCH 06/16] Bug fix and improve __ID3_getTwixFrameByName() It's not an error situation even though there is no tag to find String::toCString(true) convert code to UTF8. and String::toCString(false) convert to Latin. We need UTF8 so "true" should be set to toCString(). Change-Id: Ifa7d94946bf5e6eee89cb87545a4b924db9be16d --- src/metadata_editor.cpp | 109 ++++++++++++++---------------------------------- 1 file changed, 31 insertions(+), 78 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 726160d..3cd51fe 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -83,97 +83,50 @@ static int __check_metadata_get_parameter(metadata_editor_s *metadata, char **va return METADATA_EDITOR_ERROR_NONE; } -// *** This is an auxiliary function that is used to get the frame value *** // -// *** It operates with frames that exists both in ID3v1 and ID3v2 tags *** // -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, TagLib::ID3v1::Tag *tag1, TagLib::ID3v2::Tag *tag2, const char *frameID, char **value) +{ int ret = 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); metadata_editor_retvm_if(!frameID, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid frameID"); - *value = NULL; - - // Check if the frame is empty (nothing to read) or ID3v2 tag does not exist - if (!tag2 || tag2->frameListMap()[frameID].isEmpty()) { - metadata_editor_info("The frame %s in ID3v2 tag is empty", frameID); - // Check if the tag ID3v1 is also empty or does not exist - if (!tag1 || tag1->isEmpty()) { - metadata_editor_info("The frame %s in ID3v1 tag is empty as well", frameID); - return METADATA_EDITOR_ERROR_NONE; - } else { // if not - read the frame you need there - metadata_editor_info("Reading data from ID3v1 tag"); - - TagLib::String str; - uint length; - bool found = false; - - if (!strcmp(frameID, "TPE1")) { /* artist */ - str = tag1->artist(); - found = true; - } else if (!strcmp(frameID, "TALB")) { /* album */ - str = tag1->album(); - found = true; - } else if (!strcmp(frameID, "COMM")) { /* comment */ - str = tag1->comment(); - found = true; - } else if (!strcmp(frameID, "TCON")) { /* genre */ - str = tag1->genre(); - found = true; - } else if (!strcmp(frameID, "TIT2")) { /* title */ - str = tag1->title(); - found = true; - } - - /* Check if we have already found the frame */ - if (found) { - bool isUTF = false; - if (!str.isLatin1()) isUTF = true; - metadata_editor_info("String is %sUTF", (isUTF ? "" : "not ")); - length = strlen(str.toCString(isUTF)); - metadata_editor_retvm_if(length == 0, METADATA_EDITOR_ERROR_NONE, "Empty string"); - *value = strndup(str.toCString(isUTF), length); - return METADATA_EDITOR_ERROR_NONE; - } - - char buf[META_MAX_BUF_LEN] = {0, }; - - if (!strcmp(frameID, "TRCK")) { /* track */ - snprintf(buf, META_MAX_BUF_LEN, "%u", tag1->track()); - found = true; - } else if (!strcmp(frameID, "TDRC")) { /* data (year) */ - snprintf(buf, META_MAX_BUF_LEN, "%u", tag1->year()); - found = true; - } - - if (found) { - length = strlen(buf); - metadata_editor_retvm_if(length == 0, METADATA_EDITOR_ERROR_NONE, "Empty string"); - *value = strndup(buf, length); - return METADATA_EDITOR_ERROR_NONE; - } - - /* The desired frame was not found */ - return METADATA_EDITOR_ERROR_OPERATION_FAILED; - } - } else { // or frame has data to read + if (tag2 && !(tag2->frameListMap()[frameID].isEmpty())) { metadata_editor_info("The frame %s exists in ID3v2 tag", frameID); + *value = g_strdup(tag2->frameListMap()[frameID][0]->toString().toCString(true)); + return METADATA_EDITOR_ERROR_NONE; + } - // This string is used to copy the value in the frame - TagLib::String str = tag2->frameListMap()[frameID][0]->toString(); - bool isUTF = false; - - if (!str.isLatin1()) isUTF = true; - metadata_editor_info("String is %sUTF", (isUTF ? "" : "not ")); - uint length = strlen(str.toCString(isUTF)); - metadata_editor_retvm_if(length == 0, METADATA_EDITOR_ERROR_NONE, "Empty string"); - - *value = strndup(str.toCString(isUTF), length); + metadata_editor_info("The frame %s in ID3v2 tag is empty", frameID); + if (!tag1 || tag1->isEmpty()) { + metadata_editor_info("The frame %s in ID3v1 tag is empty as well", frameID); return METADATA_EDITOR_ERROR_NONE; } + + metadata_editor_info("Reading data from ID3v1 tag"); + + if (!strcmp(frameID, "TPE1")) /* artist */ + *value = g_strdup(tag1->artist().toCString(true)); + else if (!strcmp(frameID, "TALB")) /* album */ + *value = g_strdup(tag1->album().toCString(true)); + else if (!strcmp(frameID, "COMM")) /* comment */ + *value = g_strdup(tag1->comment().toCString(true)); + else if (!strcmp(frameID, "TCON")) /* genre */ + *value = g_strdup(tag1->genre().toCString(true)); + else if (!strcmp(frameID, "TIT2")) /* title */ + *value = g_strdup(tag1->title().toCString(true)); + else if (!strcmp(frameID, "TRCK")) /* track */ + *value = g_strdup_printf("%u", tag1->track()); + else if (!strcmp(frameID, "TDRC")) /* data (year) */ + *value = g_strdup_printf("%u", tag1->year()); + else + metadata_editor_debug("The desired frame was not found"); + + return METADATA_EDITOR_ERROR_NONE; } + // *** This is an auxiliary function that is used to write the new value to the frame *** // // *** It operates with frames that exists both in ID3v1 and ID3v2 tags *** // static int __ID3_setTwixFrameByName(metadata_editor_s* _metadata, TagLib::ID3v1::Tag* tag1, TagLib::ID3v2::Tag* tag2, const char* frameID, const char* value) { -- 2.7.4 From f34b2aa8151bf1aaf15b4a60318372567cdcf58a Mon Sep 17 00:00:00 2001 From: hj kim Date: Wed, 13 May 2020 15:01:22 +0900 Subject: [PATCH 07/16] Bug fix of String Convert String::toCString(true) convert code to UTF8. and String::toCString(false) convert to Latin. We need UTF8 so "true" should be set to toCString(). Change-Id: Iae6071f4288e90de2068e026d3774e08ecda4518 --- include/metadata_editor_private.h | 3 -- src/metadata_editor.cpp | 105 +++++++++++--------------------------- 2 files changed, 31 insertions(+), 77 deletions(-) diff --git a/include/metadata_editor_private.h b/include/metadata_editor_private.h index 47e2840..3889ab9 100755 --- a/include/metadata_editor_private.h +++ b/include/metadata_editor_private.h @@ -55,9 +55,6 @@ extern "C" { #define LOG_TAG "CAPI_MEDIA_METADATA_EDITOR" #define META_SAFE_FREE(src) { if (src) {free(src); src = NULL; } } -#define META_MAX_BUF_LEN 20 - - #define metadata_editor_debug(fmt, arg...) do { \ LOGD("" fmt "", ##arg); \ } while (0) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 3cd51fe..80d3be3 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -192,30 +192,18 @@ static int __ID3_setTwixFrameByName(metadata_editor_s* _metadata, TagLib::ID3v1: return METADATA_EDITOR_ERROR_NONE; } -// *** This function reads frames that exist only in ID3v2 tag *** // -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, TagLib::ID3v2::Tag *tag2, const char *frameID, char **value) +{ int ret = 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); metadata_editor_retvm_if(!frameID, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid frameID"); - - *value = NULL; - - // Check if the frame is empty (nothing to read) or ID3v2 tag does not exist metadata_editor_retvm_if(!tag2 || tag2->frameListMap()[frameID].isEmpty(), METADATA_EDITOR_ERROR_NONE, "The frame %s does not exist", frameID); metadata_editor_info("The frame %s exists", frameID); - // This string is used to copy the value in the frame - TagLib::String str = tag2->frameListMap()[frameID][0]->toString(); - bool isUTF = false; - if (!str.isLatin1()) isUTF = true; - metadata_editor_info("String is %sUTF", (isUTF ? "" : "not ")); - - uint length = strlen(str.toCString(isUTF)); - metadata_editor_retvm_if(length == 0, METADATA_EDITOR_ERROR_NONE, "Empty string"); - *value = strndup(str.toCString(isUTF), length); + *value = g_strdup(tag2->frameListMap()[frameID][0]->toString().toCString(true)); return METADATA_EDITOR_ERROR_NONE; } @@ -266,29 +254,23 @@ static int __ID3_getNumberOfPictures(metadata_editor_s* _metadata, TagLib::ID3v2 return METADATA_EDITOR_ERROR_NONE; } -// *** This function is used to receive unsynchronized lyrics from ID3v2 tag in file *** // -// *** This frame differs from other string-type frames and uses UnsynchronizedLyricsFrame instead of TextIdentificationFrame *** // -static int __ID3_getLyricsFrame(metadata_editor_s* _metadata, TagLib::ID3v2::Tag* tag2, char** value) { +static int __ID3_getLyricsFrame(metadata_editor_s *_metadata, TagLib::ID3v2::Tag *tag2, char **value) +{ int ret = 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); 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"]; // link to unsynchronized lyric frames in tag - // Check if frames exist in file + TagLib::ID3v2::FrameList lst = tag2->frameListMap()["USLT"]; 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(*it); - TagLib::String str = frame->text(); - bool isUTF = false; - if (!str.isLatin1()) isUTF = true; - metadata_editor_info("String is %sUTF", (isUTF ? "" : "not ")); - uint length = strlen(str.toCString(isUTF)); - metadata_editor_retvm_if(length == 0, METADATA_EDITOR_ERROR_NONE, "Empty string"); - *value = strndup(str.toCString(isUTF), length); + + *value = g_strdup(frame->text().toCString(true)); + return METADATA_EDITOR_ERROR_NONE; } @@ -366,7 +348,7 @@ static int __ID3_setLyricsFrame(metadata_editor_s* _metadata, TagLib::ID3v2::Tag return METADATA_EDITOR_ERROR_NONE; } -static int __MP4_getStringItem(metadata_editor_s* _metadata, const char* itemname, char **value) +static int __MP4_getStringItem(metadata_editor_s *_metadata, const char *itemname, char **value) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -377,27 +359,18 @@ static int __MP4_getStringItem(metadata_editor_s* _metadata, const char* itemnam auto tag = dynamic_cast(_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(); TagLib::MP4::ItemListMap::ConstIterator it = itemMap.find(itemname); - if (it != itemMap.end()) { // Item was found - TagLib::String str = it->second.toStringList()[0]; // Get the first string in item - // Check the encoding of the string (1252 or not) - bool isUTF = false; - if (!str.isLatin1()) isUTF = true; - metadata_editor_info("String is %sUTF", (isUTF ? "" : "not ")); - // Get the length of the string and check if it is empty or not - uint length = strlen(str.toCString(isUTF)); - metadata_editor_retvm_if(length == 0, METADATA_EDITOR_ERROR_NONE, "Empty string"); - *value = strndup(str.toCString(isUTF), length); - return METADATA_EDITOR_ERROR_NONE; - } else { // Item was not found + + if (it != itemMap.end()) + *value = g_strdup(it->second.toStringList()[0].toCString(true)); + else metadata_editor_info("No item <%s> in file", itemname); - return METADATA_EDITOR_ERROR_NONE; - } + + return METADATA_EDITOR_ERROR_NONE; } -static int __MP4_getIntegerItem(metadata_editor_s* _metadata, const char* itemname, char** value) +static int __MP4_getIntegerItem(metadata_editor_s *_metadata, const char *itemname, char **value) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -408,22 +381,15 @@ static int __MP4_getIntegerItem(metadata_editor_s* _metadata, const char* itemna auto tag = dynamic_cast(_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(); TagLib::MP4::ItemListMap::ConstIterator it = itemMap.find(itemname); - if (it != itemMap.end()) { // Item was found - char buf[META_MAX_BUF_LEN] = {0, }; - int num = it->second.toInt(); // Get integer value in item - snprintf(buf, META_MAX_BUF_LEN, "%u", num); // Convert int into char[] - // Determine the length of created c-string and copy it into the output variable - int length = strlen(buf); - metadata_editor_retvm_if(length == 0, METADATA_EDITOR_ERROR_NONE, "Empty string"); - *value = strndup(buf, length); - return METADATA_EDITOR_ERROR_NONE; - } else { // Item was not found + + if (it != itemMap.end()) + *value = g_strdup_printf("%u", it->second.toInt()); + else metadata_editor_info("No item <%s> in file", itemname); - return METADATA_EDITOR_ERROR_NONE; - } + + return METADATA_EDITOR_ERROR_NONE; } static int __MP4_updateStringItem(metadata_editor_s* _metadata, const char* itemname, const char* value) @@ -500,9 +466,10 @@ static int __MP4_getNumberOfPictures(metadata_editor_s* _metadata, char** value) return METADATA_EDITOR_ERROR_NONE; } + #if 0 -// *** This function is used to extract string from Xiph Comment field *** // -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, TagLib::Ogg::XiphComment *xtag, const char *fieldname, char **value) +{ int ret = METADATA_EDITOR_ERROR_NONE; ret = __check_metadata_get_parameter(_metadata, value); @@ -513,22 +480,12 @@ static int __xiph_getFieldValue(metadata_editor_s* _metadata, TagLib::Ogg::XiphC const TagLib::Ogg::FieldListMap& fieldMap = xtag->fieldListMap(); TagLib::Ogg::FieldListMap::ConstIterator it = fieldMap.find(fieldname); - if ((xtag->contains(fieldname)) && (it != fieldMap.end())) { // Field was found - metadata_editor_info("Field %s was found. Extracting", fieldname); - TagLib::String str = it->second[0]; // Get the first string in xiph field - // Check the encoding of the string (1252 or not) - bool isUTF = false; - if (!str.isLatin1()) isUTF = true; - metadata_editor_info("String is %sUTF", (isUTF ? "" : "not ")); - // Get the length of the string and check if it is empty or not - uint length = strlen(str.toCString(isUTF)); - metadata_editor_retvm_if(length == 0, METADATA_EDITOR_ERROR_NONE, "Empty string"); - *value = strndup(str.toCString(isUTF), length); - return METADATA_EDITOR_ERROR_NONE; - } else { // Field was not found + if ((xtag->contains(fieldname)) && (it != fieldMap.end())) + *value = g_strdup(it->second[0].toCString(true)); + else metadata_editor_info("No field %s in Xiph Comment", fieldname); - return METADATA_EDITOR_ERROR_NONE; - } + + return METADATA_EDITOR_ERROR_NONE; } // *** This function is used to write string into Xiph Comment fields *** // -- 2.7.4 From 6236e096c810b77ad37e6b97b470047829e53427 Mon Sep 17 00:00:00 2001 From: hj kim Date: Tue, 12 May 2020 20:16:09 +0900 Subject: [PATCH 08/16] Apply tizen coding rule Change-Id: Ib5238374d93a580bc9b7cd9cf4d8df5b3a1afc5c --- src/metadata_editor.cpp | 209 +++++++++++++++++++++++------------------------- 1 file changed, 98 insertions(+), 111 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 80d3be3..216c0f7 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -26,21 +26,6 @@ #define MIME_TYPE_JPEG "image/jpeg" #define MIME_TYPE_PNG "image/png" -static int __ID3_getTwixFrameByName(metadata_editor_s* _metadata, TagLib::ID3v1::Tag* tag1, TagLib::ID3v2::Tag* tag2, const char* frameID, char** value); -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_getFrameByName(metadata_editor_s* _metadata, TagLib::ID3v2::Tag* tag2, const char* frameID, char** value); -static int __ID3_setFrameByName(metadata_editor_s* _metadata, TagLib::ID3v2::Tag* tag2, const char* frameID, const char* value); -static int __ID3_getLyricsFrame(metadata_editor_s* _metadata, TagLib::ID3v2::Tag* tag2, char** value); -static int __ID3_setTwixCommentFrame(metadata_editor_s* _metadata, TagLib::ID3v1::Tag* tag1, TagLib::ID3v2::Tag* tag2, const char* value); -static int __ID3_setLyricsFrame(metadata_editor_s* _metadata, TagLib::ID3v2::Tag* tag2, const char* value); -static int __MP4_getStringItem(metadata_editor_s* _metadata, const char* itemname, char** value); -static int __MP4_getIntegerItem(metadata_editor_s* _metadata, const char* itemname, char** value); -static int __MP4_updateStringItem(metadata_editor_s* _metadata, const char* itemname, const char* value); -static int __MP4_updateIntegerItem(metadata_editor_s* _metadata, const char* itemname, const char* value); -#if 0 -static int __xiph_getFieldValue(metadata_editor_s* _metadata, TagLib::Ogg::XiphComment* xtag, const char* fieldname, char** value); -static int __xiph_updateFieldValue(metadata_editor_s* _metadata, TagLib::Ogg::XiphComment* xtag, const char* fieldname, const char* value); -#endif typedef enum { METADATA_EDITOR_FORMAT_MP3 = 0, /**< MP3 File */ METADATA_EDITOR_FORMAT_MP4, /**< MP4 File */ @@ -126,10 +111,8 @@ static int __ID3_getTwixFrameByName(metadata_editor_s *_metadata, TagLib::ID3v1: return METADATA_EDITOR_ERROR_NONE; } - -// *** This is an auxiliary function that is used to write the new value to the frame *** // -// *** It operates with frames that exists both in ID3v1 and ID3v2 tags *** // -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, TagLib::ID3v1::Tag *tag1, TagLib::ID3v2::Tag *tag2, const char *frameID, const char *value) +{ int ret = METADATA_EDITOR_ERROR_NONE; ret = __check_metadata_set_parameter(_metadata); @@ -208,8 +191,8 @@ static int __ID3_getFrameByName(metadata_editor_s *_metadata, TagLib::ID3v2::Tag return METADATA_EDITOR_ERROR_NONE; } -// *** This function writes frames that exist only in ID3v2 tag *** // -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, TagLib::ID3v2::Tag *tag2, const char *frameID, const char *value) +{ int ret = METADATA_EDITOR_ERROR_NONE; ret = __check_metadata_set_parameter(_metadata); @@ -241,7 +224,7 @@ static int __ID3_setFrameByName(metadata_editor_s* _metadata, TagLib::ID3v2::Tag 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, TagLib::ID3v2::Tag *tag2, char **value) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -274,9 +257,9 @@ static int __ID3_getLyricsFrame(metadata_editor_s *_metadata, TagLib::ID3v2::Tag return METADATA_EDITOR_ERROR_NONE; } -// *** This function is used to set text in comment frame. It processes both ID3v1 and ID3v2 tags *** // // *** 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, TagLib::ID3v1::Tag *tag1, TagLib::ID3v2::Tag *tag2, const char *value) +{ int ret = METADATA_EDITOR_ERROR_NONE; ret = __check_metadata_set_parameter(_metadata); @@ -312,9 +295,9 @@ static int __ID3_setTwixCommentFrame(metadata_editor_s* _metadata, TagLib::ID3v1 return METADATA_EDITOR_ERROR_NONE; } -// *** This function is used to set text in Lyrics frame *** // // *** 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, TagLib::ID3v2::Tag *tag2, const char *value) +{ int ret = METADATA_EDITOR_ERROR_NONE; ret = __check_metadata_set_parameter(_metadata); @@ -392,7 +375,7 @@ static int __MP4_getIntegerItem(metadata_editor_s *_metadata, const char *itemna return METADATA_EDITOR_ERROR_NONE; } -static int __MP4_updateStringItem(metadata_editor_s* _metadata, const char* itemname, const char* value) +static int __MP4_updateStringItem(metadata_editor_s *_metadata, const char *itemname, const char *value) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -419,7 +402,7 @@ static int __MP4_updateStringItem(metadata_editor_s* _metadata, const char* item return METADATA_EDITOR_ERROR_NONE; } -static int __MP4_updateIntegerItem(metadata_editor_s* _metadata, const char* itemname, const char* value) +static int __MP4_updateIntegerItem(metadata_editor_s *_metadata, const char *itemname, const char *value) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -452,7 +435,7 @@ static int __MP4_updateIntegerItem(metadata_editor_s* _metadata, const char* ite } } -static int __MP4_getNumberOfPictures(metadata_editor_s* _metadata, char** value) +static int __MP4_getNumberOfPictures(metadata_editor_s *_metadata, char **value) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -489,7 +472,8 @@ static int __xiph_getFieldValue(metadata_editor_s *_metadata, TagLib::Ogg::XiphC } // *** 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, TagLib::Ogg::XiphComment *xtag, const char *fieldname, const char *value) +{ int ret = METADATA_EDITOR_ERROR_NONE; ret = __check_metadata_set_parameter(_metadata); @@ -509,21 +493,22 @@ static int __xiph_updateFieldValue(metadata_editor_s* _metadata, TagLib::Ogg::Xi return METADATA_EDITOR_ERROR_NONE; } -static int __FLAC_getNumberOfPictures(metadata_editor_s* _metadata, char** value) +static int __FLAC_getNumberOfPictures(metadata_editor_s *_metadata, char **value) { int ret = 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; + TagLib::FLAC::File *_file = (TagLib::FLAC::File*) _metadata->file; *value = g_strdup_printf("%u", _file->pictureList().size()); return METADATA_EDITOR_ERROR_NONE; } #endif -int __metadata_editor_get_file_ext(const char *file_path, char *file_ext, int max_len) { +static int __metadata_editor_get_file_ext(const char *file_path, char *file_ext, int max_len) +{ int i = 0; unsigned int path_len = strlen(file_path); @@ -541,7 +526,8 @@ int __metadata_editor_get_file_ext(const char *file_path, char *file_ext, int ma return -1; } -int __metadata_editor_get_file_type(const char *path) { +static int __metadata_editor_get_file_type(const char *path) +{ int ret = 0; char mimetype[255] = {0, }; @@ -573,7 +559,8 @@ int __metadata_editor_get_file_type(const char *path) { return METADATA_EDITOR_FORMAT_NOTYPE; } -static int __metadata_editor_get_picture_type(const char *path, char **type) { +static int __metadata_editor_get_picture_type(const char *path, char **type) +{ int ret = 0; char mimetype[255] = {0, }; @@ -611,7 +598,8 @@ static int __metadata_editor_get_picture_type(const char *path, char **type) { return METADATA_EDITOR_ERROR_NOT_SUPPORTED; } -int __metadata_editor_get_picture_info(const char *path, void **picture, size_t *size, char **type) { +static int __metadata_editor_get_picture_info(const char *path, void **picture, size_t *size, char **type) +{ int ret; ret = __metadata_editor_get_picture_type(path, type); @@ -619,7 +607,7 @@ int __metadata_editor_get_picture_info(const char *path, void **picture, size_t return METADATA_EDITOR_ERROR_OPERATION_FAILED; //IF ok.. read file - FILE* fin = fopen(path, "rb"); + FILE *fin = fopen(path, "rb"); size_t file_size = 0; if (fin) { @@ -649,9 +637,8 @@ int __metadata_editor_get_picture_info(const char *path, void **picture, size_t return METADATA_EDITOR_ERROR_NONE; } -// *** This function is used to allocate the metadata_editor_s in memory *** // -// *** The structure metadata_editor_s contains all information about the file *** // -extern "C" int metadata_editor_create(metadata_editor_h *metadata) { +extern "C" int metadata_editor_create(metadata_editor_h *metadata) +{ metadata_editor_retvm_if(metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid metadata"); metadata_editor_s *_metadata = g_new0(metadata_editor_s, 1); @@ -665,11 +652,11 @@ extern "C" int metadata_editor_create(metadata_editor_h *metadata) { return METADATA_EDITOR_ERROR_NONE; } -// *** This function is used to open the file. It creates the instance that is responsible for connection with file *** // -extern "C" int metadata_editor_set_path(metadata_editor_h metadata, const char *path) { +extern "C" int metadata_editor_set_path(metadata_editor_h metadata, const char *path) +{ int media_type = METADATA_EDITOR_FORMAT_NOTYPE; metadata_editor_s *_metadata = (metadata_editor_s*)metadata; - TagLib::File* _file = NULL; + TagLib::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"); @@ -751,9 +738,9 @@ static int __metadata_editor_get_mp3_metadata(metadata_editor_s *metadata, metad 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(); + TagLib::MPEG::File *_file = (TagLib::MPEG::File*)metadata->file; + TagLib::ID3v1::Tag *tag1 = _file->ID3v1Tag(); + TagLib::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); @@ -809,8 +796,8 @@ static int __metadata_editor_get_flac_metadata(metadata_editor_s *metadata, meta 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); + TagLib::FLAC::File *_file = (TagLib::FLAC::File*)metadata->file; + TagLib::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; @@ -843,8 +830,8 @@ static int __metadata_editor_get_ogg_vorbis_metadata(metadata_editor_s *metadata 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(); + TagLib::Ogg::Vorbis::File *_file = (TagLib::Ogg::Vorbis::File*)metadata->file; + TagLib::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; @@ -876,8 +863,8 @@ static int __metadata_editor_get_ogg_flac_metadata(metadata_editor_s *metadata, 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(); + TagLib::Ogg::FLAC::File *_file = (TagLib::Ogg::FLAC::File*)metadata->file; + TagLib::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; @@ -909,8 +896,8 @@ static int __metadata_editor_get_wav_metadata(metadata_editor_s *metadata, metad 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(); + TagLib::RIFF::WAV::File *_file = (TagLib::RIFF::WAV::File*)metadata->file; + TagLib::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"); @@ -938,8 +925,8 @@ static int __metadata_editor_get_wav_metadata(metadata_editor_s *metadata, metad } #endif -// *** This function is used to get the tag frame (field, item - each tag has its own name for data unit) from file *** // -extern "C" int metadata_editor_get_metadata(metadata_editor_h metadata, metadata_editor_attr_e attribute, char **value) { +extern "C" int metadata_editor_get_metadata(metadata_editor_h metadata, metadata_editor_attr_e attribute, char **value) +{ metadata_editor_s *_metadata = (metadata_editor_s*)metadata; metadata_editor_retvm_if(!_metadata, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid metadata"); @@ -971,7 +958,7 @@ extern "C" int metadata_editor_get_metadata(metadata_editor_h metadata, metadata } } -static int __metadata_editor_set_mp3_metadata(metadata_editor_s* metadata, metadata_editor_attr_e attribute, const char* value) +static int __metadata_editor_set_mp3_metadata(metadata_editor_s *metadata, metadata_editor_attr_e attribute, const char *value) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -979,9 +966,9 @@ static int __metadata_editor_set_mp3_metadata(metadata_editor_s* metadata, metad 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); + TagLib::MPEG::File *_file = (TagLib::MPEG::File*)metadata->file; + TagLib::ID3v1::Tag *tag1 = _file->ID3v1Tag(); + TagLib::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"); @@ -1003,7 +990,7 @@ static int __metadata_editor_set_mp3_metadata(metadata_editor_s* metadata, metad } } -static int __metadata_editor_set_mp4_metadata(metadata_editor_s* metadata, metadata_editor_attr_e attribute, const char* value) +static int __metadata_editor_set_mp4_metadata(metadata_editor_s *metadata, metadata_editor_attr_e attribute, const char *value) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -1029,7 +1016,7 @@ static int __metadata_editor_set_mp4_metadata(metadata_editor_s* metadata, metad } #if 0 -static int __metadata_editor_set_flac_metadata(metadata_editor_s* metadata, metadata_editor_attr_e attribute, const char* value) +static int __metadata_editor_set_flac_metadata(metadata_editor_s *metadata, metadata_editor_attr_e attribute, const char *value) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -1037,8 +1024,8 @@ static int __metadata_editor_set_flac_metadata(metadata_editor_s* metadata, meta 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); + TagLib::FLAC::File *_file = (TagLib::FLAC::File*)metadata->file; + TagLib::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; @@ -1061,7 +1048,7 @@ static int __metadata_editor_set_flac_metadata(metadata_editor_s* metadata, meta } } -static int __metadata_editor_set_ogg_vorbis_metadata(metadata_editor_s* metadata, metadata_editor_attr_e attribute, const char* value) +static int __metadata_editor_set_ogg_vorbis_metadata(metadata_editor_s *metadata, metadata_editor_attr_e attribute, const char *value) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -1069,8 +1056,8 @@ static int __metadata_editor_set_ogg_vorbis_metadata(metadata_editor_s* metadata 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(); + TagLib::Ogg::Vorbis::File *_file = (TagLib::Ogg::Vorbis::File*)metadata->file; + TagLib::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; @@ -1093,7 +1080,7 @@ static int __metadata_editor_set_ogg_vorbis_metadata(metadata_editor_s* metadata } } -static int __metadata_editor_set_ogg_flac_metadata(metadata_editor_s* metadata, metadata_editor_attr_e attribute, const char* value) +static int __metadata_editor_set_ogg_flac_metadata(metadata_editor_s *metadata, metadata_editor_attr_e attribute, const char *value) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -1101,8 +1088,8 @@ static int __metadata_editor_set_ogg_flac_metadata(metadata_editor_s* metadata, 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(); + TagLib::Ogg::FLAC::File *_file = (TagLib::Ogg::FLAC::File*)metadata->file; + TagLib::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; @@ -1125,7 +1112,7 @@ static int __metadata_editor_set_ogg_flac_metadata(metadata_editor_s* metadata, } } -static int __metadata_editor_set_wav_metadata(metadata_editor_s* metadata, metadata_editor_attr_e attribute, const char* value) +static int __metadata_editor_set_wav_metadata(metadata_editor_s *metadata, metadata_editor_attr_e attribute, const char *value) { int ret = METADATA_EDITOR_ERROR_NONE; @@ -1133,8 +1120,8 @@ static int __metadata_editor_set_wav_metadata(metadata_editor_s* metadata, metad 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(); + TagLib::RIFF::WAV::File *_file = (TagLib::RIFF::WAV::File*)metadata->file; + TagLib::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"); @@ -1160,10 +1147,10 @@ static int __metadata_editor_set_wav_metadata(metadata_editor_s* metadata, metad } #endif -// *** This function is used to modify the metadata (frame in tag). But it does not apply changes to file *** // -extern "C" int metadata_editor_set_metadata(metadata_editor_h metadata, metadata_editor_attr_e attribute, const char* value) { +extern "C" int metadata_editor_set_metadata(metadata_editor_h metadata, metadata_editor_attr_e attribute, const char *value) +{ - metadata_editor_s* _metadata = (metadata_editor_s*) metadata; + metadata_editor_s *_metadata = (metadata_editor_s*) metadata; metadata_editor_retvm_if(!_metadata, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid metadata"); switch (_metadata->filetype) { @@ -1193,18 +1180,18 @@ extern "C" int metadata_editor_set_metadata(metadata_editor_h metadata, metadata } } -// *** This function apply all changes done in the tag(s) and update them to file *** // -extern "C" int metadata_editor_update_metadata(metadata_editor_h metadata) { +extern "C" int metadata_editor_update_metadata(metadata_editor_h metadata) +{ int ret = METADATA_EDITOR_ERROR_NONE; - metadata_editor_s* _metadata = (metadata_editor_s*) metadata; + metadata_editor_s *_metadata = (metadata_editor_s*) metadata; ret = __check_metadata_set_parameter(_metadata); metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret); switch (_metadata->filetype) { case METADATA_EDITOR_FORMAT_MP3: { - TagLib::MPEG::File* _file = (TagLib::MPEG::File*)_metadata->file; - TagLib::ID3v1::Tag* tag1 = _file->ID3v1Tag(); + TagLib::MPEG::File *_file = (TagLib::MPEG::File*)_metadata->file; + TagLib::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)) @@ -1254,7 +1241,7 @@ static char * __get_mime_type_from_cover_art(const TagLib::MP4::CoverArt& cover_ return NULL; } -static int __get_APIC(TagLib::ID3v2::Tag* tag, int index, void **picture, int *size, char **mime_type) +static int __get_APIC(TagLib::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."); @@ -1286,12 +1273,12 @@ static int __get_APIC(TagLib::ID3v2::Tag* tag, int index, void **picture, int *s return METADATA_EDITOR_ERROR_NONE; } -static int __get_mp3_picture(metadata_editor_s* metadata, int index, void **picture, int *size, char **mime_type) +static int __get_mp3_picture(metadata_editor_s *metadata, int index, void **picture, int *size, char **mime_type) { return __get_APIC(dynamic_cast(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) +static int __get_mp4_picture(metadata_editor_s *metadata, int index, void **picture, int *size, char **mime_type) { auto tag = dynamic_cast(metadata->file->tag()); metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); @@ -1322,9 +1309,9 @@ static int __get_mp4_picture(metadata_editor_s* metadata, int index, void **pict } #if 0 -static int __get_flac_picture(metadata_editor_s* metadata, int index, void **picture, int *size, char **mime_type) +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::FLAC::File *_file = (TagLib::FLAC::File*) metadata->file; TagLib::List lst = _file->pictureList(); if (lst.isEmpty()) { @@ -1350,18 +1337,18 @@ static int __get_flac_picture(metadata_editor_s* metadata, int index, void **pic return METADATA_EDITOR_ERROR_NONE; } -static int __get_wav_picture(metadata_editor_s* metadata, int index, void **picture, int *size, char **mime_type) +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; + TagLib::RIFF::WAV::File *_file = (TagLib::RIFF::WAV::File*)metadata->file; return __get_APIC(_file->tag(), index, picture, size, mime_type); } #endif -// *** This function returns buffer with picture under the specified index and buffer's (picture's) size *** // -extern "C" int metadata_editor_get_picture(metadata_editor_h metadata, int index, void **picture, int *size, char **mime_type) { +extern "C" int metadata_editor_get_picture(metadata_editor_h metadata, int index, void **picture, int *size, char **mime_type) +{ int ret = METADATA_EDITOR_ERROR_NONE; - metadata_editor_s* _metadata = (metadata_editor_s*) metadata; + metadata_editor_s *_metadata = (metadata_editor_s*) metadata; ret = __check_metadata_get_parameter(_metadata, mime_type); metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_get_parameter() [%d]", ret); @@ -1388,7 +1375,7 @@ extern "C" int metadata_editor_get_picture(metadata_editor_h metadata, int index } } -static int __append_APIC(TagLib::ID3v2::Tag* tag, void *picture, size_t size, const char *mime_type) +static int __append_APIC(TagLib::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."); @@ -1405,12 +1392,12 @@ static int __append_APIC(TagLib::ID3v2::Tag* tag, void *picture, size_t size, co return METADATA_EDITOR_ERROR_NONE; } -static int __append_mp3_picture(metadata_editor_s* metadata, void *picture ,size_t size, const char *mime_type) +static int __append_mp3_picture(metadata_editor_s *metadata, void *picture ,size_t size, const char *mime_type) { return __append_APIC(dynamic_cast(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) +static int __append_mp4_picture(metadata_editor_s *metadata, void *picture, size_t size, const char *mime_type) { auto tag = dynamic_cast(metadata->file->tag()); metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); @@ -1434,9 +1421,9 @@ static int __append_mp4_picture(metadata_editor_s* metadata, void *picture, size } #if 0 -static int __append_flac_picture(metadata_editor_s* metadata, void *picture, size_t size, const char *mime_type) +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; + TagLib::FLAC::File *_file = (TagLib::FLAC::File*) metadata->file; auto frontCover = new TagLib::FLAC::Picture; metadata_editor_debug_fenter(); @@ -1450,20 +1437,19 @@ static int __append_flac_picture(metadata_editor_s* metadata, void *picture, siz return METADATA_EDITOR_ERROR_NONE; } -static int __append_wav_picture(metadata_editor_s* metadata, void *picture, size_t size, const char *mime_type) +static int __append_wav_picture(metadata_editor_s *metadata, void *picture, size_t size, const char *mime_type) { return __append_APIC(dynamic_cast(metadata->file->tag()), picture, size, mime_type); } #endif -// *** This function appends a cover art picture to the file *** // -extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const char *path) { +extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const char *path) +{ int ret = METADATA_EDITOR_ERROR_NONE; void *picture = NULL; size_t size = 0; char *mime_type = NULL; - - metadata_editor_s* _metadata = (metadata_editor_s*) metadata; + metadata_editor_s *_metadata = (metadata_editor_s*) metadata; ret = __check_metadata_set_parameter(_metadata); metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret); @@ -1503,7 +1489,7 @@ extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const return ret; } -static int __remove_APIC(TagLib::ID3v2::Tag* tag, int index) +static int __remove_APIC(TagLib::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"); @@ -1519,12 +1505,12 @@ static int __remove_APIC(TagLib::ID3v2::Tag* tag, int index) return METADATA_EDITOR_ERROR_NONE; } -static int __remove_mp3_picture(metadata_editor_s* metadata, int index) +static int __remove_mp3_picture(metadata_editor_s *metadata, int index) { return __remove_APIC(dynamic_cast(metadata->file)->ID3v2Tag(true), index); } -static int __remove_mp4_picture(metadata_editor_s* metadata, int index) +static int __remove_mp4_picture(metadata_editor_s *metadata, int index) { auto tag = dynamic_cast(metadata->file->tag()); metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); @@ -1556,9 +1542,9 @@ static int __remove_mp4_picture(metadata_editor_s* metadata, int index) } #if 0 -static int __remove_flac_picture(metadata_editor_s* metadata, int index) +static int __remove_flac_picture(metadata_editor_s *metadata, int index) { - TagLib::FLAC::File* _file = (TagLib::FLAC::File*) metadata->file; + TagLib::FLAC::File *_file = (TagLib::FLAC::File*) metadata->file; TagLib::List lst = _file->pictureList(); if (lst.isEmpty()) { @@ -1583,16 +1569,16 @@ static int __remove_flac_picture(metadata_editor_s* metadata, int index) return METADATA_EDITOR_ERROR_NONE; } -static int __remove_wav_picture(metadata_editor_s* metadata, int index) +static int __remove_wav_picture(metadata_editor_s *metadata, int index) { return __remove_APIC(dynamic_cast(metadata->file->tag()), index); } #endif -// *** This function is used to delete picture with specified index *** // -extern "C" int metadata_editor_remove_picture(metadata_editor_h metadata, int index) { +extern "C" int metadata_editor_remove_picture(metadata_editor_h metadata, int index) +{ int ret = METADATA_EDITOR_ERROR_NONE; - metadata_editor_s* _metadata = (metadata_editor_s*) metadata; + metadata_editor_s *_metadata = (metadata_editor_s*) metadata; ret = __check_metadata_set_parameter(_metadata); metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret); @@ -1616,7 +1602,8 @@ extern "C" int metadata_editor_remove_picture(metadata_editor_h metadata, int in } } -extern "C" int metadata_editor_destroy(metadata_editor_h metadata) { +extern "C" int metadata_editor_destroy(metadata_editor_h metadata) +{ metadata_editor_s *_metadata = (metadata_editor_s*)metadata; metadata_editor_retvm_if(!_metadata, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid metadata"); -- 2.7.4 From 60af4345d070bc764ca182480f0bf2e135a3099d Mon Sep 17 00:00:00 2001 From: "jiyong.min" Date: Wed, 13 May 2020 08:34:34 +0900 Subject: [PATCH 09/16] Use namespace TagLib Change-Id: I2bcd614a3aabe1c10766934658d10b0ea8936fa4 --- include/metadata_editor_private.h | 24 ---- src/metadata_editor.cpp | 294 ++++++++++++++++++++------------------ 2 files changed, 154 insertions(+), 164 deletions(-) diff --git a/include/metadata_editor_private.h b/include/metadata_editor_private.h index 3889ab9..0359416 100755 --- a/include/metadata_editor_private.h +++ b/include/metadata_editor_private.h @@ -25,25 +25,6 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; #ifdef __cplusplus extern "C" { @@ -82,11 +63,6 @@ extern "C" { } \ } while (0) -typedef struct { - TagLib::File* file; - int filetype; -} metadata_editor_s; - #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 216c0f7..1c08288 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -23,9 +23,35 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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 */ @@ -68,7 +94,7 @@ static int __check_metadata_get_parameter(metadata_editor_s *metadata, char **va 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; @@ -111,7 +137,7 @@ static int __ID3_getTwixFrameByName(metadata_editor_s *_metadata, TagLib::ID3v1: 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; @@ -146,14 +172,14 @@ static int __ID3_setTwixFrameByName(metadata_editor_s *_metadata, TagLib::ID3v1: 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. @@ -175,7 +201,7 @@ static int __ID3_setTwixFrameByName(metadata_editor_s *_metadata, TagLib::ID3v1: 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; @@ -191,7 +217,7 @@ static int __ID3_getFrameByName(metadata_editor_s *_metadata, TagLib::ID3v2::Tag 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; @@ -211,20 +237,20 @@ static int __ID3_setFrameByName(metadata_editor_s *_metadata, TagLib::ID3v2::Tag 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; @@ -237,7 +263,7 @@ static int __ID3_getNumberOfPictures(metadata_editor_s *_metadata, TagLib::ID3v2 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; @@ -245,20 +271,19 @@ static int __ID3_getLyricsFrame(metadata_editor_s *_metadata, TagLib::ID3v2::Tag 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(*it); + ID3v2::FrameList::Iterator it = lst.begin(); + auto frame = static_cast(*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; @@ -277,14 +302,14 @@ static int __ID3_setTwixCommentFrame(metadata_editor_s *_metadata, TagLib::ID3v1 // 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 @@ -295,8 +320,7 @@ static int __ID3_setTwixCommentFrame(metadata_editor_s *_metadata, TagLib::ID3v1 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; @@ -304,7 +328,7 @@ static int __ID3_setLyricsFrame(metadata_editor_s *_metadata, TagLib::ID3v2::Tag 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"); @@ -315,17 +339,17 @@ static int __ID3_setLyricsFrame(metadata_editor_s *_metadata, TagLib::ID3v2::Tag 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(*it); - frame->setTextEncoding(TagLib::String::UTF8); - frame->setText(TagLib::String(value, TagLib::String::UTF8)); + ID3v2::FrameList::Iterator it = lst.begin(); + auto frame = static_cast(*it); + frame->setTextEncoding(String::UTF8); + frame->setText(String(value, String::UTF8)); } return METADATA_EDITOR_ERROR_NONE; @@ -339,11 +363,11 @@ static int __MP4_getStringItem(metadata_editor_s *_metadata, const char *itemnam 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(_metadata->file->tag()); + auto tag = dynamic_cast(_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)); @@ -361,12 +385,11 @@ static int __MP4_getIntegerItem(metadata_editor_s *_metadata, const char *itemna 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(_metadata->file->tag()); + auto tag = dynamic_cast(_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 @@ -383,21 +406,21 @@ static int __MP4_updateStringItem(metadata_editor_s *_metadata, const char *item 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(_metadata->file->tag()); + auto tag = dynamic_cast(_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; } @@ -410,15 +433,15 @@ static int __MP4_updateIntegerItem(metadata_editor_s *_metadata, const char *ite 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(_metadata->file->tag()); + auto tag = dynamic_cast(_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; @@ -427,7 +450,7 @@ static int __MP4_updateIntegerItem(metadata_editor_s *_metadata, const char *ite 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"); @@ -442,7 +465,7 @@ static int __MP4_getNumberOfPictures(metadata_editor_s *_metadata, char **value) 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(_metadata->file->tag()); + auto tag = dynamic_cast(_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); @@ -451,7 +474,7 @@ static int __MP4_getNumberOfPictures(metadata_editor_s *_metadata, char **value) } #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; @@ -460,8 +483,8 @@ static int __xiph_getFieldValue(metadata_editor_s *_metadata, TagLib::Ogg::XiphC 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)); @@ -471,8 +494,7 @@ static int __xiph_getFieldValue(metadata_editor_s *_metadata, TagLib::Ogg::XiphC 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; @@ -489,7 +511,7 @@ static int __xiph_updateFieldValue(metadata_editor_s *_metadata, TagLib::Ogg::Xi } 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; } @@ -500,7 +522,7 @@ static int __FLAC_getNumberOfPictures(metadata_editor_s *_metadata, char **value 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 _metadata->file; *value = g_strdup_printf("%u", _file->pictureList().size()); @@ -656,7 +678,7 @@ extern "C" int metadata_editor_set_path(metadata_editor_h metadata, const char * { 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"); @@ -684,29 +706,29 @@ extern "C" int metadata_editor_set_path(metadata_editor_h metadata, const char * 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 @@ -738,9 +760,9 @@ static int __metadata_editor_get_mp3_metadata(metadata_editor_s *metadata, metad 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(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); @@ -796,8 +818,8 @@ static int __metadata_editor_get_flac_metadata(metadata_editor_s *metadata, meta 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; @@ -830,8 +852,8 @@ static int __metadata_editor_get_ogg_vorbis_metadata(metadata_editor_s *metadata 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; @@ -863,8 +885,8 @@ static int __metadata_editor_get_ogg_flac_metadata(metadata_editor_s *metadata, 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; @@ -896,8 +918,8 @@ static int __metadata_editor_get_wav_metadata(metadata_editor_s *metadata, metad 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"); @@ -966,9 +988,9 @@ static int __metadata_editor_set_mp3_metadata(metadata_editor_s *metadata, metad 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"); @@ -1024,8 +1046,8 @@ static int __metadata_editor_set_flac_metadata(metadata_editor_s *metadata, meta 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; @@ -1056,8 +1078,8 @@ static int __metadata_editor_set_ogg_vorbis_metadata(metadata_editor_s *metadata 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; @@ -1088,8 +1110,8 @@ static int __metadata_editor_set_ogg_flac_metadata(metadata_editor_s *metadata, 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; @@ -1120,8 +1142,8 @@ static int __metadata_editor_set_wav_metadata(metadata_editor_s *metadata, metad 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"); @@ -1190,14 +1212,14 @@ extern "C" int metadata_editor_update_metadata(metadata_editor_h metadata) 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; } @@ -1223,7 +1245,7 @@ extern "C" int metadata_editor_update_metadata(metadata_editor_h metadata) } } -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()); @@ -1231,21 +1253,21 @@ static char * __get_mime_type(const TagLib::String& mime_type) 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()) { @@ -1261,7 +1283,7 @@ static int __get_APIC(TagLib::ID3v2::Tag *tag, int index, void **picture, int *s metadata_editor_info("There are %u pictures in file. Start of picture number %d extraction", lst.size(), index); - auto pictureFrame = static_cast(lst[index]); + auto pictureFrame = static_cast(lst[index]); uint pictureSize = pictureFrame->picture().size(); metadata_editor_retvm_if(pictureSize == 0, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Size of picture is 0"); @@ -1275,12 +1297,12 @@ static int __get_APIC(TagLib::ID3v2::Tag *tag, int index, void **picture, int *s static int __get_mp3_picture(metadata_editor_s *metadata, int index, void **picture, int *size, char **mime_type) { - return __get_APIC(dynamic_cast(metadata->file)->ID3v2Tag(), index, picture, size, mime_type); + return __get_APIC(dynamic_cast(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(metadata->file->tag()); + auto tag = dynamic_cast(metadata->file->tag()); metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); if (!(tag->contains("covr"))) { @@ -1288,7 +1310,7 @@ static int __get_mp4_picture(metadata_editor_s *metadata, int index, void **pict 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())) { @@ -1296,7 +1318,7 @@ static int __get_mp4_picture(metadata_editor_s *metadata, int index, void **pict return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } - auto pictureFrame = static_cast(lst[index]); + auto pictureFrame = static_cast(lst[index]); int pictureSize = pictureFrame.data().size(); metadata_editor_retvm_if(pictureSize == 0, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Size of picture is 0"); @@ -1311,8 +1333,8 @@ static int __get_mp4_picture(metadata_editor_s *metadata, int index, void **pict #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 lst = _file->pictureList(); + FLAC::File *_file = (FLAC::File*) metadata->file; + List lst = _file->pictureList(); if (lst.isEmpty()) { metadata_editor_error("No pictures in FLAC file"); @@ -1325,7 +1347,7 @@ static int __get_flac_picture(metadata_editor_s *metadata, int index, void **pic return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } - auto pictureFrame = static_cast(lst[index]); + auto pictureFrame = static_cast(lst[index]); int pictureSize = pictureFrame->data().size(); metadata_editor_retvm_if(pictureSize == 0, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Size of picture is 0"); @@ -1339,7 +1361,7 @@ static int __get_flac_picture(metadata_editor_s *metadata, int index, void **pic 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); } @@ -1375,16 +1397,16 @@ extern "C" int metadata_editor_get_picture(metadata_editor_h metadata, int index } } -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); @@ -1394,27 +1416,27 @@ static int __append_APIC(TagLib::ID3v2::Tag *tag, void *picture, size_t size, co } static int __append_mp3_picture(metadata_editor_s *metadata, void *picture ,size_t size, const char *mime_type) { - return __append_APIC(dynamic_cast(metadata->file)->ID3v2Tag(true), picture, size, mime_type); + return __append_APIC(dynamic_cast(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(metadata->file->tag()); + auto tag = dynamic_cast(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 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; @@ -1423,13 +1445,13 @@ static int __append_mp4_picture(metadata_editor_s *metadata, void *picture, size #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); @@ -1439,7 +1461,7 @@ static int __append_flac_picture(metadata_editor_s *metadata, void *picture, siz static int __append_wav_picture(metadata_editor_s *metadata, void *picture, size_t size, const char *mime_type) { - return __append_APIC(dynamic_cast(metadata->file->tag()), picture, size, mime_type); + return __append_APIC(dynamic_cast(metadata->file->tag()), picture, size, mime_type); } #endif @@ -1489,11 +1511,11 @@ extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const 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())) { @@ -1507,12 +1529,12 @@ static int __remove_APIC(TagLib::ID3v2::Tag *tag, int index) } static int __remove_mp3_picture(metadata_editor_s *metadata, int index) { - return __remove_APIC(dynamic_cast(metadata->file)->ID3v2Tag(true), index); + return __remove_APIC(dynamic_cast(metadata->file)->ID3v2Tag(true), index); } static int __remove_mp4_picture(metadata_editor_s *metadata, int index) { - auto tag = dynamic_cast(metadata->file->tag()); + auto tag = dynamic_cast(metadata->file->tag()); metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); if (!(tag->contains("covr"))) { @@ -1520,7 +1542,7 @@ static int __remove_mp4_picture(metadata_editor_s *metadata, int index) 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())) { @@ -1529,12 +1551,9 @@ static int __remove_mp4_picture(metadata_editor_s *metadata, int index) } 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! @@ -1544,8 +1563,8 @@ static int __remove_mp4_picture(metadata_editor_s *metadata, int index) #if 0 static int __remove_flac_picture(metadata_editor_s *metadata, int index) { - TagLib::FLAC::File *_file = (TagLib::FLAC::File*) metadata->file; - TagLib::List lst = _file->pictureList(); + FLAC::File *_file = dynamic_cast metadata->file; + List lst = _file->pictureList(); if (lst.isEmpty()) { metadata_editor_error("No pictures in file. Nothing to delete"); @@ -1559,19 +1578,14 @@ static int __remove_flac_picture(metadata_editor_s *metadata, int index) } metadata_editor_info("The picture number %d will be deleted", index); - int i = 0; - for (TagLib::List::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(metadata->file->tag()), index); + return __remove_APIC(dynamic_cast(metadata->file->tag()), index); } #endif -- 2.7.4 From 156cd91f9757a82141b820bbceaaa42b903995d8 Mon Sep 17 00:00:00 2001 From: hj kim Date: Wed, 13 May 2020 16:16:40 +0900 Subject: [PATCH 10/16] Improve __metadata_editor_get_picture_info() and User proper type for picture Change-Id: Id81a6f64b2361d7c97b5fe95f02271b5e16af115 --- include/metadata_editor_private.h | 7 ----- src/metadata_editor.cpp | 65 +++++++++++++++------------------------ 2 files changed, 24 insertions(+), 48 deletions(-) diff --git a/include/metadata_editor_private.h b/include/metadata_editor_private.h index 0359416..9a96ed3 100755 --- a/include/metadata_editor_private.h +++ b/include/metadata_editor_private.h @@ -18,12 +18,6 @@ #ifndef __TIZEN_MULTIMEDIA_METADATA_EDITOR_PRIVATE_H__ #define __TIZEN_MULTIMEDIA_METADATA_EDITOR_PRIVATE_H__ -#include -#include - -#include -#include - #include #ifdef __cplusplus @@ -34,7 +28,6 @@ extern "C" { #undef LOG_TAG #endif #define LOG_TAG "CAPI_MEDIA_METADATA_EDITOR" -#define META_SAFE_FREE(src) { if (src) {free(src); src = NULL; } } #define metadata_editor_debug(fmt, arg...) do { \ LOGD("" fmt "", ##arg); \ diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 1c08288..ce94fca 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -620,43 +620,26 @@ static int __metadata_editor_get_picture_type(const char *path, char **type) return METADATA_EDITOR_ERROR_NOT_SUPPORTED; } -static int __metadata_editor_get_picture_info(const char *path, void **picture, size_t *size, char **type) +static int __metadata_editor_get_picture_info(const char *path, char **picture, size_t *size, char **type) { - int ret; + int ret = METADATA_EDITOR_ERROR_NONE; + GError *error = NULL; ret = __metadata_editor_get_picture_type(path, type); if (ret != METADATA_EDITOR_ERROR_NONE) - return METADATA_EDITOR_ERROR_OPERATION_FAILED; + return ret; - //IF ok.. read file - FILE *fin = fopen(path, "rb"); - size_t file_size = 0; - - if (fin) { - while (fgetc(fin) != EOF) - file_size++; - - fclose(fin); - char picture_buffer[file_size] = {0, }; - memset(picture_buffer, 0, file_size * sizeof(char)); - fin = fopen(path, "rb"); - if (fin) { - if(file_size != fread(picture_buffer, 1, file_size, fin)) { - metadata_editor_error("fread error"); - fclose(fin); - return METADATA_EDITOR_ERROR_OPERATION_FAILED; - } - fclose(fin); - } - if (*picture == NULL) { - *picture = malloc(file_size * sizeof(char)); - memset(*picture, 0, file_size * sizeof(char)); - memcpy(*picture, picture_buffer, file_size); - *size = file_size; - } + if (!g_file_get_contents(path, picture, size, &error)) { + metadata_editor_error("Unable to read [%s], error [%s]", path, error->message); + if (error->code == G_FILE_ERROR_NOENT || error->code == G_FILE_ERROR_ISDIR) + ret = METADATA_EDITOR_ERROR_FILE_EXISTS; + else + ret = METADATA_EDITOR_ERROR_PERMISSION_DENIED; + + g_error_free (error); } - return METADATA_EDITOR_ERROR_NONE; + return ret; } extern "C" int metadata_editor_create(metadata_editor_h *metadata) @@ -1397,7 +1380,7 @@ extern "C" int metadata_editor_get_picture(metadata_editor_h metadata, int index } } -static int __append_APIC(ID3v2::Tag *tag, void *picture, size_t size, const char *mime_type) +static int __append_APIC(ID3v2::Tag *tag, const char *picture, size_t size, const char *mime_type) { metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. No ID3v2 tag in file."); @@ -1405,7 +1388,7 @@ static int __append_APIC(ID3v2::Tag *tag, void *picture, size_t size, const char metadata_editor_info("New APIC frame will be added to the ID3v2 tag"); - pictureFrame->setPicture(ByteVector((char*)picture, size)); + pictureFrame->setPicture(ByteVector(picture, size)); pictureFrame->setType(ID3v2::AttachedPictureFrame::FrontCover); pictureFrame->setMimeType(mime_type); @@ -1414,12 +1397,12 @@ static int __append_APIC(ID3v2::Tag *tag, void *picture, size_t size, const char return METADATA_EDITOR_ERROR_NONE; } -static int __append_mp3_picture(metadata_editor_s *metadata, void *picture ,size_t size, const char *mime_type) +static int __append_mp3_picture(metadata_editor_s *metadata, const char *picture ,size_t size, const char *mime_type) { return __append_APIC(dynamic_cast(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) +static int __append_mp4_picture(metadata_editor_s *metadata, const char *picture, size_t size, const char *mime_type) { auto tag = dynamic_cast(metadata->file->tag()); metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); @@ -1436,21 +1419,21 @@ static int __append_mp4_picture(metadata_editor_s *metadata, void *picture, size lst = tag->item("covr").toCoverArtList(); } - lst.append(MP4::CoverArt(format, ByteVector((char*)picture, size))); + lst.append(MP4::CoverArt(format, ByteVector(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) +static int __append_flac_picture(metadata_editor_s *metadata, const char *picture, size_t size, const char *mime_type) { FLAC::File *_file = (FLAC::File*) metadata->file; auto frontCover = new FLAC::Picture; metadata_editor_debug_fenter(); - frontCover->setData(ByteVector((char*)picture, size)); + frontCover->setData(ByteVector(picture, size)); frontCover->setType(FLAC::Picture::FrontCover); frontCover->setMimeType(mime_type); @@ -1459,7 +1442,7 @@ static int __append_flac_picture(metadata_editor_s *metadata, void *picture, siz return METADATA_EDITOR_ERROR_NONE; } -static int __append_wav_picture(metadata_editor_s *metadata, void *picture, size_t size, const char *mime_type) +static int __append_wav_picture(metadata_editor_s *metadata, const char *picture, size_t size, const char *mime_type) { return __append_APIC(dynamic_cast(metadata->file->tag()), picture, size, mime_type); } @@ -1468,7 +1451,7 @@ static int __append_wav_picture(metadata_editor_s *metadata, void *picture, size extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const char *path) { int ret = METADATA_EDITOR_ERROR_NONE; - void *picture = NULL; + char *picture = NULL; size_t size = 0; char *mime_type = NULL; metadata_editor_s *_metadata = (metadata_editor_s*) metadata; @@ -1478,7 +1461,7 @@ extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const metadata_editor_retvm_if(!path, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid path"); ret = __metadata_editor_get_picture_info(path, &picture, &size, &mime_type); - metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); + metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); //FixMe!. It should return proper error! switch (_metadata->filetype) { case METADATA_EDITOR_FORMAT_MP3: @@ -1505,7 +1488,7 @@ extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const } } - META_SAFE_FREE(picture); + g_free(picture); g_free(mime_type); return ret; -- 2.7.4 From cc62524514ac08aacdb883e40379b3bfe47e9a55 Mon Sep 17 00:00:00 2001 From: "jiyong.min" Date: Thu, 14 May 2020 13:17:12 +0900 Subject: [PATCH 11/16] Use auto keyword Change-Id: Ieb7eb0f9e9fc80e5b37aae469a17d5822317450a --- src/metadata_editor.cpp | 100 ++++++++++++++++++++++++------------------------ 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index ce94fca..58d5fb9 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -271,11 +271,11 @@ static int __ID3_getLyricsFrame(metadata_editor_s *_metadata, ID3v2::Tag *tag2, 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"); - ID3v2::FrameList lst = tag2->frameListMap()["USLT"]; // link to unsynchronized lyric frames in tag + auto 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"); - ID3v2::FrameList::Iterator it = lst.begin(); + auto it = lst.begin(); auto frame = static_cast(*it); *value = g_strdup(frame->text().toCString(true)); @@ -328,7 +328,7 @@ static int __ID3_setLyricsFrame(metadata_editor_s *_metadata, ID3v2::Tag *tag2, 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"); - ID3v2::FrameList lst = tag2->frameListMap()["USLT"]; // link to unsynchronized lyric frames in tag + auto 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"); @@ -346,7 +346,7 @@ static int __ID3_setLyricsFrame(metadata_editor_s *_metadata, ID3v2::Tag *tag2, tag2->addFrame(frame); } else { // the lyrics frames exist - change the existing one metadata_editor_info("USLT frames exist in file. Changing"); - ID3v2::FrameList::Iterator it = lst.begin(); + auto it = lst.begin(); auto frame = static_cast(*it); frame->setTextEncoding(String::UTF8); frame->setText(String(value, String::UTF8)); @@ -366,8 +366,8 @@ static int __MP4_getStringItem(metadata_editor_s *_metadata, const char *itemnam auto tag = dynamic_cast(_metadata->file->tag()); metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); - MP4::ItemListMap& itemMap = tag->itemListMap(); - MP4::ItemListMap::ConstIterator it = itemMap.find(itemname); + auto itemMap = tag->itemListMap(); + auto it = itemMap.find(itemname); if (it != itemMap.end()) *value = g_strdup(it->second.toStringList()[0].toCString(true)); @@ -388,8 +388,8 @@ static int __MP4_getIntegerItem(metadata_editor_s *_metadata, const char *itemna auto tag = dynamic_cast(_metadata->file->tag()); metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); - MP4::ItemListMap& itemMap = tag->itemListMap(); - MP4::ItemListMap::ConstIterator it = itemMap.find(itemname); + auto itemMap = tag->itemListMap(); + auto it = itemMap.find(itemname); if (it != itemMap.end()) *value = g_strdup_printf("%u", it->second.toInt()); else @@ -410,11 +410,11 @@ static int __MP4_updateStringItem(metadata_editor_s *_metadata, const char *item 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 - MP4::ItemListMap& itemMap = tag->itemListMap(); + auto 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); - MP4::ItemListMap::Iterator it = itemMap.find(itemname); + auto it = itemMap.find(itemname); if (it != itemMap.end()) itemMap.erase(it); return METADATA_EDITOR_ERROR_NONE; @@ -437,7 +437,7 @@ static int __MP4_updateIntegerItem(metadata_editor_s *_metadata, const char *ite 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 - MP4::ItemListMap& itemMap = tag->itemListMap(); + auto 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); @@ -483,8 +483,8 @@ static int __xiph_getFieldValue(metadata_editor_s *_metadata, Ogg::XiphComment * 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 Ogg::FieldListMap& fieldMap = xtag->fieldListMap(); - Ogg::FieldListMap::ConstIterator it = fieldMap.find(fieldname); + auto fieldMap = xtag->fieldListMap(); + auto it = fieldMap.find(fieldname); if ((xtag->contains(fieldname)) && (it != fieldMap.end())) *value = g_strdup(it->second[0].toCString(true)); @@ -522,7 +522,7 @@ static int __FLAC_getNumberOfPictures(metadata_editor_s *_metadata, char **value 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); - FLAC::File *_file = dynamic_cast _metadata->file; + auto _file = dynamic_cast(_metadata->file); *value = g_strdup_printf("%u", _file->pictureList().size()); @@ -743,9 +743,9 @@ static int __metadata_editor_get_mp3_metadata(metadata_editor_s *metadata, metad 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 - MPEG::File *_file = dynamic_cast(metadata->file); - ID3v1::Tag *tag1 = _file->ID3v1Tag(); - ID3v2::Tag *tag2 = _file->ID3v2Tag(); + auto _file = dynamic_cast(metadata->file); + auto tag1 = _file->ID3v1Tag(); + auto 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); @@ -801,8 +801,8 @@ static int __metadata_editor_get_flac_metadata(metadata_editor_s *metadata, meta 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 - FLAC::File *_file = (FLAC::File*)metadata->file; - Ogg::XiphComment *xtag = _file->xiphComment(false); + auto _file = (FLAC::File*)metadata->file; + auto xtag = _file->xiphComment(false); if (!xtag) { // Check if we have a valid tag for processing metadata_editor_error("Tag does not exist"); *value = NULL; @@ -835,8 +835,8 @@ static int __metadata_editor_get_ogg_vorbis_metadata(metadata_editor_s *metadata 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 - Ogg::Vorbis::File *_file = (Ogg::Vorbis::File*)metadata->file; - Ogg::XiphComment *xtag = _file->tag(); + auto _file = (Ogg::Vorbis::File*)metadata->file; + auto xtag = _file->tag(); if (!xtag) { // Check if we have a valid tag for processing metadata_editor_error("Tag does not exist"); *value = NULL; @@ -868,8 +868,8 @@ static int __metadata_editor_get_ogg_flac_metadata(metadata_editor_s *metadata, 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 - Ogg::FLAC::File *_file = (Ogg::FLAC::File*)metadata->file; - Ogg::XiphComment *xtag = _file->tag(); + auto _file = (Ogg::FLAC::File*)metadata->file; + auto xtag = _file->tag(); if (!xtag) { // Check if we have a valid tag for processing metadata_editor_error("Tag does not exist"); *value = NULL; @@ -901,8 +901,8 @@ static int __metadata_editor_get_wav_metadata(metadata_editor_s *metadata, metad 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 - RIFF::WAV::File *_file = (RIFF::WAV::File*)metadata->file; - ID3v2::Tag *tag2 = _file->tag(); + auto _file = (RIFF::WAV::File*)metadata->file; + auto 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"); @@ -971,9 +971,9 @@ static int __metadata_editor_set_mp3_metadata(metadata_editor_s *metadata, metad 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 - MPEG::File *_file = (MPEG::File*)metadata->file; - ID3v1::Tag *tag1 = _file->ID3v1Tag(); - ID3v2::Tag *tag2 = _file->ID3v2Tag(true); + auto _file = (MPEG::File*)metadata->file; + auto tag1 = _file->ID3v1Tag(); + auto 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"); @@ -1029,8 +1029,8 @@ static int __metadata_editor_set_flac_metadata(metadata_editor_s *metadata, meta 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 - FLAC::File *_file = (FLAC::File*)metadata->file; - Ogg::XiphComment *xtag = _file->xiphComment(true); + auto _file = (FLAC::File*)metadata->file; + auto 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; @@ -1061,8 +1061,8 @@ static int __metadata_editor_set_ogg_vorbis_metadata(metadata_editor_s *metadata 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 - Ogg::Vorbis::File *_file = (Ogg::Vorbis::File*)metadata->file; - Ogg::XiphComment *xtag = _file->tag(); + auto _file = (Ogg::Vorbis::File*)metadata->file; + auto 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; @@ -1093,8 +1093,8 @@ static int __metadata_editor_set_ogg_flac_metadata(metadata_editor_s *metadata, 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 - Ogg::FLAC::File *_file = (Ogg::FLAC::File*)metadata->file; - Ogg::XiphComment *xtag = _file->tag(); + auto _file = (Ogg::FLAC::File*)metadata->file; + auto 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; @@ -1125,10 +1125,10 @@ static int __metadata_editor_set_wav_metadata(metadata_editor_s *metadata, metad 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 - RIFF::WAV::File *_file = (RIFF::WAV::File*)metadata->file; - ID3v2::Tag *tag2 = _file->tag(); + auto _file = (RIFF::WAV::File*)metadata->file; + auto tag2 = _file->tag(); // Check if the valid tag pointer exist - if (tag2 == NULL) { + if (!tag2) { metadata_editor_error("Error. ID3v2 tag was not created. Can not proceed metadata updating"); return METADATA_EDITOR_ERROR_OPERATION_FAILED; } @@ -1195,8 +1195,8 @@ extern "C" int metadata_editor_update_metadata(metadata_editor_h metadata) switch (_metadata->filetype) { case METADATA_EDITOR_FORMAT_MP3: { - MPEG::File *_file = (MPEG::File*)_metadata->file; - ID3v1::Tag *tag1 = _file->ID3v1Tag(); + auto _file = (MPEG::File*)_metadata->file; + auto tag1 = _file->ID3v1Tag(); if (!tag1 || tag1->isEmpty()) { // If no ID3v1 tag - prevent its creation if (_file->save(MPEG::File::ID3v2 | MPEG::File::APE)) @@ -1250,7 +1250,7 @@ static int __get_APIC(ID3v2::Tag *tag, int index, void **picture, int *size, cha { metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. No ID3v2 tag in file."); - ID3v2::FrameList lst = tag->frameListMap()["APIC"]; + auto lst = tag->frameListMap()["APIC"]; // Check if there are pictures in the tag if (lst.isEmpty()) { @@ -1293,7 +1293,7 @@ static int __get_mp4_picture(metadata_editor_s *metadata, int index, void **pict return METADATA_EDITOR_ERROR_OPERATION_FAILED; } - MP4::CoverArtList lst = tag->item("covr").toCoverArtList(); + auto lst = tag->item("covr").toCoverArtList(); // Check if the index is in range of CoverArtList Item if ((index < 0) || ((uint)index >= lst.size())) { @@ -1316,8 +1316,8 @@ static int __get_mp4_picture(metadata_editor_s *metadata, int index, void **pict #if 0 static int __get_flac_picture(metadata_editor_s *metadata, int index, void **picture, int *size, char **mime_type) { - FLAC::File *_file = (FLAC::File*) metadata->file; - List lst = _file->pictureList(); + auto _file = (FLAC::File*) metadata->file; + auto lst = _file->pictureList(); if (lst.isEmpty()) { metadata_editor_error("No pictures in FLAC file"); @@ -1344,7 +1344,7 @@ static int __get_flac_picture(metadata_editor_s *metadata, int index, void **pic static int __get_wav_picture(metadata_editor_s *metadata, int index, void **picture, int *size, char **mime_type) { - RIFF::WAV::File *_file = (RIFF::WAV::File*)metadata->file; + auto _file = (RIFF::WAV::File*)metadata->file; return __get_APIC(_file->tag(), index, picture, size, mime_type); } @@ -1408,7 +1408,7 @@ static int __append_mp4_picture(metadata_editor_s *metadata, const char *picture metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); MP4::CoverArtList lst; - MP4::CoverArt::Format format = MP4::CoverArt::Unknown; + auto format = MP4::CoverArt::Unknown; if (strncmp(mime_type, MIME_TYPE_JPEG, strlen(MIME_TYPE_JPEG)) == 0) format = MP4::CoverArt::JPEG; else if (strncmp(mime_type, MIME_TYPE_PNG, strlen(MIME_TYPE_PNG)) == 0) @@ -1428,7 +1428,7 @@ static int __append_mp4_picture(metadata_editor_s *metadata, const char *picture #if 0 static int __append_flac_picture(metadata_editor_s *metadata, const char *picture, size_t size, const char *mime_type) { - FLAC::File *_file = (FLAC::File*) metadata->file; + auto _file = (FLAC::File*) metadata->file; auto frontCover = new FLAC::Picture; metadata_editor_debug_fenter(); @@ -1498,7 +1498,7 @@ 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"); - ID3v2::FrameList lst = tag->frameListMap()["APIC"]; + auto 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())) { @@ -1525,7 +1525,7 @@ static int __remove_mp4_picture(metadata_editor_s *metadata, int index) return METADATA_EDITOR_ERROR_OPERATION_FAILED; } - MP4::CoverArtList lst = tag->item("covr").toCoverArtList(); + auto lst = tag->item("covr").toCoverArtList(); // Check if the index is in range of CoverArtList Item if ((index < 0) || ((uint)index >= lst.size())) { @@ -1546,8 +1546,8 @@ static int __remove_mp4_picture(metadata_editor_s *metadata, int index) #if 0 static int __remove_flac_picture(metadata_editor_s *metadata, int index) { - FLAC::File *_file = dynamic_cast metadata->file; - List lst = _file->pictureList(); + auto _file = dynamic_cast(metadata->file); + auto lst = _file->pictureList(); if (lst.isEmpty()) { metadata_editor_error("No pictures in file. Nothing to delete"); -- 2.7.4 From ae9ca936f77bac70d15b60b2b8ebb3d67acac2b1 Mon Sep 17 00:00:00 2001 From: hj kim Date: Wed, 20 May 2020 16:55:11 +0900 Subject: [PATCH 12/16] Update API description Change-Id: I2758c2d122fdc3c0f271c8bce1e1bd47ab5f6b22 --- include/metadata_editor.h | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/include/metadata_editor.h b/include/metadata_editor.h index a4eaddf..8b47b50 100755 --- a/include/metadata_editor.h +++ b/include/metadata_editor.h @@ -68,7 +68,8 @@ int metadata_editor_create(metadata_editor_h *metadata); * @retval #METADATA_EDITOR_ERROR_PERMISSION_DENIED Permission denied * @retval #METADATA_EDITOR_ERROR_OPERATION_FAILED Internal Operation Fail * @pre Create metadata handle by calling metadata_editor_create() - * @see metadata_editor_create(), metadata_editor_destroy() + * @see metadata_editor_create() + * @see metadata_editor_destroy() */ int metadata_editor_set_path(metadata_editor_h metadata, const char *path); @@ -92,7 +93,9 @@ int metadata_editor_set_path(metadata_editor_h metadata, const char *path); * @retval #METADATA_EDITOR_ERROR_PERMISSION_DENIED Permission denied * @retval #METADATA_EDITOR_ERROR_OPERATION_FAILED Internal Operation Fail * @pre Set path to read or write metadata by calling metadata_editor_set_path() - * @see metadata_editor_create(), metadata_editor_destroy() + * @see metadata_editor_create() + * @see metadata_editor_set_path() + * @see metadata_editor_destroy() */ int metadata_editor_get_metadata(metadata_editor_h metadata, metadata_editor_attr_e attribute, char **value); @@ -100,10 +103,11 @@ int metadata_editor_get_metadata(metadata_editor_h metadata, metadata_editor_att /** * @brief Sets the attribute of the metadata. * @details This function set the attribute of the metadata for updating the metadata. \n + * If @a attribute is #METADATA_EDITOR_ATTR_PICTURE_NUM, this function returns #METADATA_EDITOR_ERROR_INVALID_PARAMETER. * @since_tizen @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif * * @remarks The @a value should be released using free(). \n - * You must call metadata_editor_update_metadata() for applying to the metadata of the media file. if not, you will see the existing metadata when you call metadata_editor_get_metadata(). + * You must call metadata_editor_update_metadata() to apply metadata changes to the media file. Otherwise, the previous metadata will be returned when you call metadata_editor_get_metadata(). * * @param[in] metadata The handle to metadata * @param[in] attribute key attribute name to get @@ -114,7 +118,10 @@ int metadata_editor_get_metadata(metadata_editor_h metadata, metadata_editor_att * @retval #METADATA_EDITOR_ERROR_OUT_OF_MEMORY Out of memory * @retval #METADATA_EDITOR_ERROR_OPERATION_FAILED Internal Operation Fail * @pre Set path to read or write metadata by calling metadata_editor_set_path() - * @see metadata_editor_create(), metadata_editor_update_metadata(), metadata_editor_destroy() + * @see metadata_editor_create() + * @see metadata_editor_set_path() + * @see metadata_editor_update_metadata() + * @see metadata_editor_destroy() */ int metadata_editor_set_metadata(metadata_editor_h metadata, metadata_editor_attr_e attribute, const char *value); @@ -135,12 +142,16 @@ int metadata_editor_set_metadata(metadata_editor_h metadata, metadata_editor_att * @retval #METADATA_EDITOR_ERROR_PERMISSION_DENIED Permission denied * @retval #METADATA_EDITOR_ERROR_OPERATION_FAILED Internal Operation Fail * @pre Set path to read or write metadata by calling metadata_editor_set_path() - * @see metadata_editor_create(), metadata_editor_destroy() + * @see metadata_editor_create() + * @see metadata_editor_set_path() + * @see metadata_editor_destroy() */ int metadata_editor_update_metadata(metadata_editor_h metadata); /** * @brief Gets the picture in the media file. + * @details If there is no picture or if the @a index is invalid, this function returns #METADATA_EDITOR_ERROR_INVALID_PARAMETER.\n + * You can get picture number by using metadata_editor_get_metadata() and index starts with 0. * @since_tizen @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif * * @remarks The @a picture and @a mime_type should be released using free(). \n @@ -148,7 +159,7 @@ int metadata_editor_update_metadata(metadata_editor_h metadata); * For example, if you get the specific path by using storage_get_directory(). you should add privilege http://tizen.org/privilege/mediastorage or http://tizen.org/privilege/externalstorage. * * @param[in] metadata The handle to metadata - * @param[in] index picture order + * @param[in] index picture order (starts with 0) * @param[out] picture encoded picture * @param[out] size encoded picture size * @param[out] mime_type the MIME of the picture @@ -159,7 +170,9 @@ int metadata_editor_update_metadata(metadata_editor_h metadata); * @retval #METADATA_EDITOR_ERROR_OPERATION_FAILED Internal Operation Fail * @retval #METADATA_EDITOR_ERROR_PERMISSION_DENIED Permission denied * @pre Set path to read or write metadata by calling metadata_editor_set_path() - * @see metadata_editor_create(), metadata_editor_destroy() + * @see metadata_editor_create() + * @see metadata_editor_set_path() + * @see metadata_editor_destroy() */ int metadata_editor_get_picture(metadata_editor_h metadata, int index, void **picture, int *size, char **mime_type); @@ -167,7 +180,7 @@ int metadata_editor_get_picture(metadata_editor_h metadata, int index, void **pi * @brief Appends the picture to the media file. * @since_tizen @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif * - * @remarks You must call metadata_editor_update_metadata() for applying to the metadata of the media file. if not, you will see the existing metadata when you call metadata_editor_get_metadata(). \n + * @remarks You must call metadata_editor_update_metadata() to apply metadata changes to the media file. Otherwise, the previous metadata will be returned when you call metadata_editor_get_metadata(). \n * Image type of the metadata supports jpeg and png. \n * In case of accessing specific path in internal storage or external storage, you may add the privilege for accessing the path. \n * For example, if you get the specific path by using storage_get_directory(). you should add privilege http://tizen.org/privilege/mediastorage or http://tizen.org/privilege/externalstorage. @@ -182,7 +195,10 @@ int metadata_editor_get_picture(metadata_editor_h metadata, int index, void **pi * @retval #METADATA_EDITOR_ERROR_OPERATION_FAILED Internal Operation Fail * @retval #METADATA_EDITOR_ERROR_PERMISSION_DENIED Permission denied * @pre Set path to read or write metadata by calling metadata_editor_set_path() - * @see metadata_editor_create(), metadata_editor_destroy() + * @see metadata_editor_create() + * @see metadata_editor_set_path() + * @see metadata_editor_update_metadata() + * @see metadata_editor_destroy() */ int metadata_editor_append_picture(metadata_editor_h metadata, const char *picture_path); @@ -190,7 +206,7 @@ int metadata_editor_append_picture(metadata_editor_h metadata, const char *pictu * @brief Removes artwork image from media file. * @since_tizen @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif * - * @remarks You must call metadata_editor_update_metadata() for applying to the metadata of the media file. if not, you will see the existing metadata when you call metadata_editor_get_metadata(). \n + * @remarks You must call metadata_editor_update_metadata() to apply metadata changes to the media file. Otherwise, the previous metadata will be returned when you call metadata_editor_get_metadata(). \n * In case of accessing specific path in internal storage or external storage, you may add the privilege for accessing the path. \n * For example, if you get the specific path by using storage_get_directory(). you should add privilege http://tizen.org/privilege/mediastorage or http://tizen.org/privilege/externalstorage. * @@ -203,7 +219,10 @@ int metadata_editor_append_picture(metadata_editor_h metadata, const char *pictu * @retval #METADATA_EDITOR_ERROR_OPERATION_FAILED Internal Operation Fail * @retval #METADATA_EDITOR_ERROR_PERMISSION_DENIED Permission denied * @pre Set path to read or write metadata by calling metadata_editor_set_path() - * @see metadata_editor_create(), metadata_editor_destroy() + * @see metadata_editor_create() + * @see metadata_editor_set_path() + * @see metadata_editor_update_metadata() + * @see metadata_editor_destroy() */ int metadata_editor_remove_picture(metadata_editor_h metadata, int index); -- 2.7.4 From 07afb39a2b3655e0a445d4c839a8df35e135a9af Mon Sep 17 00:00:00 2001 From: hj kim Date: Wed, 20 May 2020 17:00:33 +0900 Subject: [PATCH 13/16] Fix invalid return of metadata_editor_append_picture() and adds debug logs. metadata_editor_set_path() can return METADATA_EDITOR_ERROR_NOT_SUPPORTED for not supported file, but other APIs should return METADATA_EDITOR_ERROR_INVALID_PARAMETER Change-Id: I13abc82156a0c0b98867ac9078563bc18198cbea --- src/metadata_editor.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 58d5fb9..219aaeb 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -716,7 +716,7 @@ extern "C" int metadata_editor_set_path(metadata_editor_h metadata, const char * #endif default: - metadata_editor_error("Wrong file type"); + metadata_editor_error("Not supported file type [%d]", media_type); return METADATA_EDITOR_ERROR_NOT_SUPPORTED; } } catch (const std::bad_alloc &ex) { @@ -762,6 +762,7 @@ static int __metadata_editor_get_mp3_metadata(metadata_editor_s *metadata, metad case METADATA_EDITOR_ATTR_PICTURE_NUM: return __ID3_getNumberOfPictures(metadata, tag2, value); case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __ID3_getLyricsFrame(metadata, tag2, value); default: + metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -788,6 +789,7 @@ static int __metadata_editor_get_mp4_metadata(metadata_editor_s *metadata, metad case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __MP4_getStringItem(metadata, "\xA9""lyr", value); case METADATA_EDITOR_ATTR_PICTURE_NUM: return __MP4_getNumberOfPictures(metadata, value); default: + metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -823,6 +825,7 @@ static int __metadata_editor_get_flac_metadata(metadata_editor_s *metadata, meta case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_getFieldValue(metadata, xtag, "LYRICS", value); case METADATA_EDITOR_ATTR_PICTURE_NUM: return __FLAC_getNumberOfPictures(metadata, value); default: + metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -856,6 +859,7 @@ static int __metadata_editor_get_ogg_vorbis_metadata(metadata_editor_s *metadata case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_getFieldValue(metadata, xtag, "CONDUCTOR", value); case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_getFieldValue(metadata, xtag, "LYRICS", value); default: + metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -889,6 +893,7 @@ static int __metadata_editor_get_ogg_flac_metadata(metadata_editor_s *metadata, case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_getFieldValue(metadata, xtag, "CONDUCTOR", value); case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_getFieldValue(metadata, xtag, "LYRICS", value); default: + metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -925,6 +930,7 @@ static int __metadata_editor_get_wav_metadata(metadata_editor_s *metadata, metad case METADATA_EDITOR_ATTR_PICTURE_NUM: return __ID3_getNumberOfPictures(metadata, tag2, value); case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __ID3_getLyricsFrame(metadata, tag2, value); default: + metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -958,7 +964,7 @@ extern "C" int metadata_editor_get_metadata(metadata_editor_h metadata, metadata #endif default: - metadata_editor_error("Wrong file type [%d]", _metadata->filetype); + metadata_editor_error("Invalid file type [%d]", _metadata->filetype); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -991,6 +997,7 @@ static int __metadata_editor_set_mp3_metadata(metadata_editor_s *metadata, metad case METADATA_EDITOR_ATTR_COMMENT: return __ID3_setTwixCommentFrame(metadata, tag1, tag2, value); case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __ID3_setLyricsFrame(metadata, tag2, value); default: + metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -1016,6 +1023,7 @@ static int __metadata_editor_set_mp4_metadata(metadata_editor_s *metadata, metad case METADATA_EDITOR_ATTR_CONDUCTOR: return __MP4_updateStringItem(metadata, "cond", value); case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __MP4_updateStringItem(metadata, "\xA9""lyr", value); default: + metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -1049,6 +1057,7 @@ static int __metadata_editor_set_flac_metadata(metadata_editor_s *metadata, meta case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_updateFieldValue(metadata, xtag, "CONDUCTOR", value); case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_updateFieldValue(metadata, xtag, "LYRICS", value); default: + metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -1081,6 +1090,7 @@ static int __metadata_editor_set_ogg_vorbis_metadata(metadata_editor_s *metadata case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_updateFieldValue(metadata, xtag, "CONDUCTOR", value); case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_updateFieldValue(metadata, xtag, "LYRICS", value); default: + metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -1113,6 +1123,7 @@ static int __metadata_editor_set_ogg_flac_metadata(metadata_editor_s *metadata, case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_updateFieldValue(metadata, xtag, "CONDUCTOR", value); case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_updateFieldValue(metadata, xtag, "LYRICS", value); default: + metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -1147,6 +1158,7 @@ static int __metadata_editor_set_wav_metadata(metadata_editor_s *metadata, metad case METADATA_EDITOR_ATTR_COMMENT: return __ID3_setTwixCommentFrame(metadata, NULL, tag2, value); case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __ID3_setLyricsFrame(metadata, tag2, value); default: + metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -1180,7 +1192,7 @@ extern "C" int metadata_editor_set_metadata(metadata_editor_h metadata, metadata #endif default: - metadata_editor_error("Wrong file type"); + metadata_editor_error("Invalid file type [%d]", _metadata->filetype); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -1223,7 +1235,7 @@ extern "C" int metadata_editor_update_metadata(metadata_editor_h metadata) } default: - metadata_editor_error("Wrong file type"); + metadata_editor_error("Invalid file type [%d]", _metadata->filetype); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -1375,7 +1387,7 @@ extern "C" int metadata_editor_get_picture(metadata_editor_h metadata, int index return __get_wav_picture(_metadata, index, picture, size, mime_type); #endif default: - metadata_editor_error("Wrong file type"); + metadata_editor_error("Invalid file type [%d]", _metadata->filetype); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } @@ -1482,8 +1494,8 @@ extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const break; #endif default: { - metadata_editor_error("Wrong file type"); - ret = METADATA_EDITOR_ERROR_NOT_SUPPORTED; + metadata_editor_error("Invalid file type [%d]", _metadata->filetype); + ret = METADATA_EDITOR_ERROR_INVALID_PARAMETER; break; } } @@ -1594,7 +1606,7 @@ extern "C" int metadata_editor_remove_picture(metadata_editor_h metadata, int in return __remove_wav_picture(_metadata, index); #endif default: - metadata_editor_error("Wrong file type"); + metadata_editor_error("Invalid file type [%d]", _metadata->filetype); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } -- 2.7.4 From 4f7cbca21afc05e71b1c63d0397535ea4981cead Mon Sep 17 00:00:00 2001 From: hj kim Date: Wed, 20 May 2020 18:45:16 +0900 Subject: [PATCH 14/16] check NULL before getting metadata toString() returns "", when String is NULL Change-Id: I8a8b1da78a4747725bdf6bc8a59e6b2277bd084e --- src/metadata_editor.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 219aaeb..10e8343 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -117,15 +117,17 @@ static int __ID3_getTwixFrameByName(metadata_editor_s *_metadata, ID3v1::Tag *ta metadata_editor_info("Reading data from ID3v1 tag"); - if (!strcmp(frameID, "TPE1")) /* artist */ + //check isNull(). toCString() returns "", when String is NULL. + //for "genre", taglib returns "", if genre is out or range. + if (!strcmp(frameID, "TPE1") && !(tag1->artist().isNull())) /* artist */ *value = g_strdup(tag1->artist().toCString(true)); - else if (!strcmp(frameID, "TALB")) /* album */ + else if (!strcmp(frameID, "TALB") && !(tag1->album().isNull())) /* album */ *value = g_strdup(tag1->album().toCString(true)); - else if (!strcmp(frameID, "COMM")) /* comment */ + else if (!strcmp(frameID, "COMM") && !(tag1->comment().isNull())) /* comment */ *value = g_strdup(tag1->comment().toCString(true)); - else if (!strcmp(frameID, "TCON")) /* genre */ + else if (!strcmp(frameID, "TCON") && !(tag1->genre().isNull()) && !(tag1->genre().isEmpty())) /* genre */ *value = g_strdup(tag1->genre().toCString(true)); - else if (!strcmp(frameID, "TIT2")) /* title */ + else if (!strcmp(frameID, "TIT2") && !(tag1->title().isNull())) /* title */ *value = g_strdup(tag1->title().toCString(true)); else if (!strcmp(frameID, "TRCK")) /* track */ *value = g_strdup_printf("%u", tag1->track()); @@ -278,7 +280,8 @@ static int __ID3_getLyricsFrame(metadata_editor_s *_metadata, ID3v2::Tag *tag2, auto it = lst.begin(); auto frame = static_cast(*it); - *value = g_strdup(frame->text().toCString(true)); + if (!(frame->text().isNull())) + *value = g_strdup(frame->text().toCString(true)); return METADATA_EDITOR_ERROR_NONE; } -- 2.7.4 From 6ab63ff3293bcf00dc4c07e82b721ee6b4869156 Mon Sep 17 00:00:00 2001 From: hj kim Date: Thu, 21 May 2020 13:01:32 +0900 Subject: [PATCH 15/16] Bug fix of MP4 metadata when using auto keyword Change-Id: I9aac227c38061475c2ed07e15c073682428239f4 --- src/metadata_editor.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 10e8343..da684d0 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -369,7 +369,7 @@ static int __MP4_getStringItem(metadata_editor_s *_metadata, const char *itemnam auto tag = dynamic_cast(_metadata->file->tag()); metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); - auto itemMap = tag->itemListMap(); + auto &itemMap = tag->itemListMap(); auto it = itemMap.find(itemname); if (it != itemMap.end()) @@ -391,7 +391,7 @@ static int __MP4_getIntegerItem(metadata_editor_s *_metadata, const char *itemna auto tag = dynamic_cast(_metadata->file->tag()); metadata_editor_retvm_if(!tag, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Tag does not exist"); - auto itemMap = tag->itemListMap(); + auto &itemMap = tag->itemListMap(); auto it = itemMap.find(itemname); if (it != itemMap.end()) *value = g_strdup_printf("%u", it->second.toInt()); @@ -413,7 +413,7 @@ static int __MP4_updateStringItem(metadata_editor_s *_metadata, const char *item 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 - auto itemMap = tag->itemListMap(); + auto &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); @@ -440,7 +440,7 @@ static int __MP4_updateIntegerItem(metadata_editor_s *_metadata, const char *ite 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 - auto itemMap = tag->itemListMap(); + auto &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); @@ -486,7 +486,7 @@ static int __xiph_getFieldValue(metadata_editor_s *_metadata, Ogg::XiphComment * 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"); - auto fieldMap = xtag->fieldListMap(); + auto &fieldMap = xtag->fieldListMap(); auto it = fieldMap.find(fieldname); if ((xtag->contains(fieldname)) && (it != fieldMap.end())) -- 2.7.4 From bb27b4d8153a3cb91996bf884d3c3602942e273a Mon Sep 17 00:00:00 2001 From: hj kim Date: Mon, 25 May 2020 15:24:08 +0900 Subject: [PATCH 16/16] Remove unnecessary parameter Change-Id: Ie1d7fc71dbb4fee4b49e0c0b0e0ac0043aa00f1e --- src/metadata_editor.cpp | 308 +++++++++++++++++++++--------------------------- 1 file changed, 134 insertions(+), 174 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index da684d0..576a400 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -94,12 +94,8 @@ static int __check_metadata_get_parameter(metadata_editor_s *metadata, char **va return METADATA_EDITOR_ERROR_NONE; } -static int __ID3_getTwixFrameByName(metadata_editor_s *_metadata, ID3v1::Tag *tag1, ID3v2::Tag *tag2, const char *frameID, char **value) +static int __ID3_getTwixFrameByName(ID3v1::Tag *tag1, ID3v2::Tag *tag2, const char *frameID, char **value) { - int ret = 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); metadata_editor_retvm_if(!frameID, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid frameID"); if (tag2 && !(tag2->frameListMap()[frameID].isEmpty())) { @@ -139,12 +135,8 @@ static int __ID3_getTwixFrameByName(metadata_editor_s *_metadata, ID3v1::Tag *ta return METADATA_EDITOR_ERROR_NONE; } -static int __ID3_setTwixFrameByName(metadata_editor_s *_metadata, ID3v1::Tag *tag1, ID3v2::Tag *tag2, const char *frameID, const char *value) +static int __ID3_setTwixFrameByName(ID3v1::Tag *tag1, ID3v2::Tag *tag2, const char *frameID, const char *value) { - int ret = METADATA_EDITOR_ERROR_NONE; - - ret = __check_metadata_set_parameter(_metadata); - metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret); metadata_editor_retvm_if(!frameID, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid frameID"); metadata_editor_retvm_if(!tag2, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag was not created. Can not proceed metadata updating"); @@ -203,12 +195,8 @@ static int __ID3_setTwixFrameByName(metadata_editor_s *_metadata, ID3v1::Tag *ta return METADATA_EDITOR_ERROR_NONE; } -static int __ID3_getFrameByName(metadata_editor_s *_metadata, ID3v2::Tag *tag2, const char *frameID, char **value) +static int __ID3_getFrameByName(ID3v2::Tag *tag2, const char *frameID, char **value) { - int ret = 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); metadata_editor_retvm_if(!frameID, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid frameID"); metadata_editor_retvm_if(!tag2 || tag2->frameListMap()[frameID].isEmpty(), METADATA_EDITOR_ERROR_NONE, "The frame %s does not exist", frameID); @@ -219,12 +207,8 @@ static int __ID3_getFrameByName(metadata_editor_s *_metadata, ID3v2::Tag *tag2, return METADATA_EDITOR_ERROR_NONE; } -static int __ID3_setFrameByName(metadata_editor_s *_metadata, ID3v2::Tag *tag2, const char *frameID, const char *value) +static int __ID3_setFrameByName(ID3v2::Tag *tag2, const char *frameID, const char *value) { - int ret = METADATA_EDITOR_ERROR_NONE; - - ret = __check_metadata_set_parameter(_metadata); - metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret); metadata_editor_retvm_if(!frameID, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid frameID"); metadata_editor_retvm_if(!tag2, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag was not created. Can not proceed metadata updating"); @@ -252,12 +236,8 @@ static int __ID3_setFrameByName(metadata_editor_s *_metadata, ID3v2::Tag *tag2, return METADATA_EDITOR_ERROR_NONE; } -static int __ID3_getNumberOfPictures(metadata_editor_s *_metadata, ID3v2::Tag *tag2, char **value) +static int __ID3_getNumberOfPictures(ID3v2::Tag *tag2, char **value) { - int ret = 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); metadata_editor_retvm_if(!tag2, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag does not exist. Can not process further"); *value = g_strdup_printf("%u", tag2->frameListMap()["APIC"].size()); @@ -265,12 +245,8 @@ static int __ID3_getNumberOfPictures(metadata_editor_s *_metadata, ID3v2::Tag *t return METADATA_EDITOR_ERROR_NONE; } -static int __ID3_getLyricsFrame(metadata_editor_s *_metadata, ID3v2::Tag *tag2, char **value) +static int __ID3_getLyricsFrame(ID3v2::Tag *tag2, char **value) { - int ret = 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); metadata_editor_retvm_if(!tag2, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag does not exist. Can not process further"); auto lst = tag2->frameListMap()["USLT"]; // link to unsynchronized lyric frames in tag @@ -286,12 +262,8 @@ static int __ID3_getLyricsFrame(metadata_editor_s *_metadata, ID3v2::Tag *tag2, return METADATA_EDITOR_ERROR_NONE; } -static int __ID3_setTwixCommentFrame(metadata_editor_s *_metadata, ID3v1::Tag *tag1, ID3v2::Tag *tag2, const char *value) +static int __ID3_setTwixCommentFrame(ID3v1::Tag *tag1, ID3v2::Tag *tag2, const char *value) { - int ret = METADATA_EDITOR_ERROR_NONE; - - ret = __check_metadata_set_parameter(_metadata); - 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"); // If the pointer is NULL or c-string is empty - handle as request for deletion @@ -323,12 +295,8 @@ static int __ID3_setTwixCommentFrame(metadata_editor_s *_metadata, ID3v1::Tag *t return METADATA_EDITOR_ERROR_NONE; } -static int __ID3_setLyricsFrame(metadata_editor_s *_metadata, ID3v2::Tag *tag2, const char *value) +static int __ID3_setLyricsFrame(ID3v2::Tag *tag2, const char *value) { - int ret = METADATA_EDITOR_ERROR_NONE; - - ret = __check_metadata_set_parameter(_metadata); - 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"); auto lst = tag2->frameListMap()["USLT"]; // link to unsynchronized lyric frames in tag @@ -477,14 +445,10 @@ static int __MP4_getNumberOfPictures(metadata_editor_s *_metadata, char **value) } #if 0 -static int __xiph_getFieldValue(metadata_editor_s *_metadata, Ogg::XiphComment *xtag, const char *fieldname, char **value) +static int __xiph_getFieldValue(Ogg::XiphComment *xtag, const char *fieldname, char **value) { - int ret = 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); - 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"); + metadata_editor_retvm_if(!fieldname, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid fieldname"); auto &fieldMap = xtag->fieldListMap(); auto it = fieldMap.find(fieldname); @@ -497,14 +461,10 @@ static int __xiph_getFieldValue(metadata_editor_s *_metadata, Ogg::XiphComment * return METADATA_EDITOR_ERROR_NONE; } -static int __xiph_updateFieldValue(metadata_editor_s *_metadata, Ogg::XiphComment *xtag, const char *fieldname, const char *value) +static int __xiph_updateFieldValue(Ogg::XiphComment *xtag, const char *fieldname, const char *value) { - int ret = METADATA_EDITOR_ERROR_NONE; - - ret = __check_metadata_set_parameter(_metadata); - metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret); - 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"); + metadata_editor_retvm_if(!fieldname, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid fieldname"); // Check if it is a request for deletion if ((value == NULL) || value[0] == '\0') { @@ -751,19 +711,19 @@ static int __metadata_editor_get_mp3_metadata(metadata_editor_s *metadata, metad auto 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); - case METADATA_EDITOR_ATTR_TITLE: return __ID3_getTwixFrameByName(metadata, tag1, tag2, "TIT2", value); - case METADATA_EDITOR_ATTR_ALBUM: return __ID3_getTwixFrameByName(metadata, tag1, tag2, "TALB", value); - case METADATA_EDITOR_ATTR_GENRE: return __ID3_getTwixFrameByName(metadata, tag1, tag2, "TCON", value); - case METADATA_EDITOR_ATTR_AUTHOR: return __ID3_getFrameByName(metadata, tag2, "TCOM", value); - case METADATA_EDITOR_ATTR_COPYRIGHT: return __ID3_getFrameByName(metadata, tag2, "TCOP", value); - case METADATA_EDITOR_ATTR_DATE: return __ID3_getTwixFrameByName(metadata, tag1, tag2, "TDRC", value); - case METADATA_EDITOR_ATTR_DESCRIPTION: return __ID3_getFrameByName(metadata, tag2, "TIT3", value); - case METADATA_EDITOR_ATTR_COMMENT: return __ID3_getTwixFrameByName(metadata, tag1, tag2, "COMM", value); - case METADATA_EDITOR_ATTR_TRACK_NUM: return __ID3_getTwixFrameByName(metadata, tag1, tag2, "TRCK", value); - case METADATA_EDITOR_ATTR_CONDUCTOR: return __ID3_getFrameByName(metadata, tag2, "TPE3", value); - case METADATA_EDITOR_ATTR_PICTURE_NUM: return __ID3_getNumberOfPictures(metadata, tag2, value); - case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __ID3_getLyricsFrame(metadata, tag2, value); + case METADATA_EDITOR_ATTR_ARTIST: return __ID3_getTwixFrameByName(tag1, tag2, "TPE1", value); + case METADATA_EDITOR_ATTR_TITLE: return __ID3_getTwixFrameByName(tag1, tag2, "TIT2", value); + case METADATA_EDITOR_ATTR_ALBUM: return __ID3_getTwixFrameByName(tag1, tag2, "TALB", value); + case METADATA_EDITOR_ATTR_GENRE: return __ID3_getTwixFrameByName(tag1, tag2, "TCON", value); + case METADATA_EDITOR_ATTR_AUTHOR: return __ID3_getFrameByName(tag2, "TCOM", value); + case METADATA_EDITOR_ATTR_COPYRIGHT: return __ID3_getFrameByName(tag2, "TCOP", value); + case METADATA_EDITOR_ATTR_DATE: return __ID3_getTwixFrameByName(tag1, tag2, "TDRC", value); + case METADATA_EDITOR_ATTR_DESCRIPTION: return __ID3_getFrameByName(tag2, "TIT3", value); + case METADATA_EDITOR_ATTR_COMMENT: return __ID3_getTwixFrameByName(tag1, tag2, "COMM", value); + case METADATA_EDITOR_ATTR_TRACK_NUM: return __ID3_getTwixFrameByName(tag1, tag2, "TRCK", value); + case METADATA_EDITOR_ATTR_CONDUCTOR: return __ID3_getFrameByName(tag2, "TPE3", value); + case METADATA_EDITOR_ATTR_PICTURE_NUM: return __ID3_getNumberOfPictures(tag2, value); + case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __ID3_getLyricsFrame(tag2, value); default: metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; @@ -814,18 +774,18 @@ static int __metadata_editor_get_flac_metadata(metadata_editor_s *metadata, meta return METADATA_EDITOR_ERROR_OPERATION_FAILED; } switch (attribute) { // Check which one of frame types was given to the function for processing - case METADATA_EDITOR_ATTR_ARTIST: return __xiph_getFieldValue(metadata, xtag, "ARTIST", value); - case METADATA_EDITOR_ATTR_TITLE: return __xiph_getFieldValue(metadata, xtag, "TITLE", value); - case METADATA_EDITOR_ATTR_ALBUM: return __xiph_getFieldValue(metadata, xtag, "ALBUM", value); - case METADATA_EDITOR_ATTR_GENRE: return __xiph_getFieldValue(metadata, xtag, "GENRE", value); - case METADATA_EDITOR_ATTR_AUTHOR: return __xiph_getFieldValue(metadata, xtag, "COMPOSER", value); - case METADATA_EDITOR_ATTR_COPYRIGHT: return __xiph_getFieldValue(metadata, xtag, "COPYRIGHT", value); - case METADATA_EDITOR_ATTR_DATE: return __xiph_getFieldValue(metadata, xtag, "DATE", value); - case METADATA_EDITOR_ATTR_DESCRIPTION: return __xiph_getFieldValue(metadata, xtag, "DESCRIPTION", value); - case METADATA_EDITOR_ATTR_COMMENT: return __xiph_getFieldValue(metadata, xtag, "COMMENT", value); - case METADATA_EDITOR_ATTR_TRACK_NUM: return __xiph_getFieldValue(metadata, xtag, "TRACKNUMBER", value); - case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_getFieldValue(metadata, xtag, "CONDUCTOR", value); - case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_getFieldValue(metadata, xtag, "LYRICS", value); + case METADATA_EDITOR_ATTR_ARTIST: return __xiph_getFieldValue(xtag, "ARTIST", value); + case METADATA_EDITOR_ATTR_TITLE: return __xiph_getFieldValue(xtag, "TITLE", value); + case METADATA_EDITOR_ATTR_ALBUM: return __xiph_getFieldValue(xtag, "ALBUM", value); + case METADATA_EDITOR_ATTR_GENRE: return __xiph_getFieldValue(xtag, "GENRE", value); + case METADATA_EDITOR_ATTR_AUTHOR: return __xiph_getFieldValue(xtag, "COMPOSER", value); + case METADATA_EDITOR_ATTR_COPYRIGHT: return __xiph_getFieldValue(xtag, "COPYRIGHT", value); + case METADATA_EDITOR_ATTR_DATE: return __xiph_getFieldValue(xtag, "DATE", value); + case METADATA_EDITOR_ATTR_DESCRIPTION: return __xiph_getFieldValue(xtag, "DESCRIPTION", value); + case METADATA_EDITOR_ATTR_COMMENT: return __xiph_getFieldValue(xtag, "COMMENT", value); + case METADATA_EDITOR_ATTR_TRACK_NUM: return __xiph_getFieldValue(xtag, "TRACKNUMBER", value); + case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_getFieldValue(xtag, "CONDUCTOR", value); + case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_getFieldValue(xtag, "LYRICS", value); case METADATA_EDITOR_ATTR_PICTURE_NUM: return __FLAC_getNumberOfPictures(metadata, value); default: metadata_editor_error("Invalid attribute [%d]", attribute); @@ -849,18 +809,18 @@ static int __metadata_editor_get_ogg_vorbis_metadata(metadata_editor_s *metadata return METADATA_EDITOR_ERROR_OPERATION_FAILED; } switch (attribute) { // Check which one of frame types was given to the function for processing - case METADATA_EDITOR_ATTR_ARTIST: return __xiph_getFieldValue(metadata, xtag, "ARTIST", value); - case METADATA_EDITOR_ATTR_TITLE: return __xiph_getFieldValue(metadata, xtag, "TITLE", value); - case METADATA_EDITOR_ATTR_ALBUM: return __xiph_getFieldValue(metadata, xtag, "ALBUM", value); - case METADATA_EDITOR_ATTR_GENRE: return __xiph_getFieldValue(metadata, xtag, "GENRE", value); - case METADATA_EDITOR_ATTR_AUTHOR: return __xiph_getFieldValue(metadata, xtag, "COMPOSER", value); - case METADATA_EDITOR_ATTR_COPYRIGHT: return __xiph_getFieldValue(metadata, xtag, "COPYRIGHT", value); - case METADATA_EDITOR_ATTR_DATE: return __xiph_getFieldValue(metadata, xtag, "DATE", value); - case METADATA_EDITOR_ATTR_DESCRIPTION: return __xiph_getFieldValue(metadata, xtag, "DESCRIPTION", value); - case METADATA_EDITOR_ATTR_COMMENT: return __xiph_getFieldValue(metadata, xtag, "COMMENT", value); - case METADATA_EDITOR_ATTR_TRACK_NUM: return __xiph_getFieldValue(metadata, xtag, "TRACKNUMBER", value); - case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_getFieldValue(metadata, xtag, "CONDUCTOR", value); - case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_getFieldValue(metadata, xtag, "LYRICS", value); + case METADATA_EDITOR_ATTR_ARTIST: return __xiph_getFieldValue(xtag, "ARTIST", value); + case METADATA_EDITOR_ATTR_TITLE: return __xiph_getFieldValue(xtag, "TITLE", value); + case METADATA_EDITOR_ATTR_ALBUM: return __xiph_getFieldValue(xtag, "ALBUM", value); + case METADATA_EDITOR_ATTR_GENRE: return __xiph_getFieldValue(xtag, "GENRE", value); + case METADATA_EDITOR_ATTR_AUTHOR: return __xiph_getFieldValue(xtag, "COMPOSER", value); + case METADATA_EDITOR_ATTR_COPYRIGHT: return __xiph_getFieldValue(xtag, "COPYRIGHT", value); + case METADATA_EDITOR_ATTR_DATE: return __xiph_getFieldValue(xtag, "DATE", value); + case METADATA_EDITOR_ATTR_DESCRIPTION: return __xiph_getFieldValue(xtag, "DESCRIPTION", value); + case METADATA_EDITOR_ATTR_COMMENT: return __xiph_getFieldValue(xtag, "COMMENT", value); + case METADATA_EDITOR_ATTR_TRACK_NUM: return __xiph_getFieldValue(xtag, "TRACKNUMBER", value); + case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_getFieldValue(xtag, "CONDUCTOR", value); + case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_getFieldValue(xtag, "LYRICS", value); default: metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; @@ -883,18 +843,18 @@ static int __metadata_editor_get_ogg_flac_metadata(metadata_editor_s *metadata, return METADATA_EDITOR_ERROR_OPERATION_FAILED; } switch (attribute) { // Check which one of frame types was given to the function for processing - case METADATA_EDITOR_ATTR_ARTIST: return __xiph_getFieldValue(metadata, xtag, "ARTIST", value); - case METADATA_EDITOR_ATTR_TITLE: return __xiph_getFieldValue(metadata, xtag, "TITLE", value); - case METADATA_EDITOR_ATTR_ALBUM: return __xiph_getFieldValue(metadata, xtag, "ALBUM", value); - case METADATA_EDITOR_ATTR_GENRE: return __xiph_getFieldValue(metadata, xtag, "GENRE", value); - case METADATA_EDITOR_ATTR_AUTHOR: return __xiph_getFieldValue(metadata, xtag, "COMPOSER", value); - case METADATA_EDITOR_ATTR_COPYRIGHT: return __xiph_getFieldValue(metadata, xtag, "COPYRIGHT", value); - case METADATA_EDITOR_ATTR_DATE: return __xiph_getFieldValue(metadata, xtag, "DATE", value); - case METADATA_EDITOR_ATTR_DESCRIPTION: return __xiph_getFieldValue(metadata, xtag, "DESCRIPTION", value); - case METADATA_EDITOR_ATTR_COMMENT: return __xiph_getFieldValue(metadata, xtag, "COMMENT", value); - case METADATA_EDITOR_ATTR_TRACK_NUM: return __xiph_getFieldValue(metadata, xtag, "TRACKNUMBER", value); - case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_getFieldValue(metadata, xtag, "CONDUCTOR", value); - case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_getFieldValue(metadata, xtag, "LYRICS", value); + case METADATA_EDITOR_ATTR_ARTIST: return __xiph_getFieldValue(xtag, "ARTIST", value); + case METADATA_EDITOR_ATTR_TITLE: return __xiph_getFieldValue(xtag, "TITLE", value); + case METADATA_EDITOR_ATTR_ALBUM: return __xiph_getFieldValue(xtag, "ALBUM", value); + case METADATA_EDITOR_ATTR_GENRE: return __xiph_getFieldValue(xtag, "GENRE", value); + case METADATA_EDITOR_ATTR_AUTHOR: return __xiph_getFieldValue(xtag, "COMPOSER", value); + case METADATA_EDITOR_ATTR_COPYRIGHT: return __xiph_getFieldValue(xtag, "COPYRIGHT", value); + case METADATA_EDITOR_ATTR_DATE: return __xiph_getFieldValue(xtag, "DATE", value); + case METADATA_EDITOR_ATTR_DESCRIPTION: return __xiph_getFieldValue(xtag, "DESCRIPTION", value); + case METADATA_EDITOR_ATTR_COMMENT: return __xiph_getFieldValue(xtag, "COMMENT", value); + case METADATA_EDITOR_ATTR_TRACK_NUM: return __xiph_getFieldValue(xtag, "TRACKNUMBER", value); + case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_getFieldValue(xtag, "CONDUCTOR", value); + case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_getFieldValue(xtag, "LYRICS", value); default: metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; @@ -919,19 +879,19 @@ static int __metadata_editor_get_wav_metadata(metadata_editor_s *metadata, metad } switch (attribute) { // Check which one of frame types was given to the function for processing - case METADATA_EDITOR_ATTR_ARTIST: return __ID3_getFrameByName(metadata, tag2, "TPE1", value); - case METADATA_EDITOR_ATTR_TITLE: return __ID3_getFrameByName(metadata, tag2, "TIT2", value); - case METADATA_EDITOR_ATTR_ALBUM: return __ID3_getFrameByName(metadata, tag2, "TALB", value); - case METADATA_EDITOR_ATTR_GENRE: return __ID3_getFrameByName(metadata, tag2, "TCON", value); - case METADATA_EDITOR_ATTR_AUTHOR: return __ID3_getFrameByName(metadata, tag2, "TCOM", value); - case METADATA_EDITOR_ATTR_COPYRIGHT: return __ID3_getFrameByName(metadata, tag2, "TCOP", value); - case METADATA_EDITOR_ATTR_DATE: return __ID3_getFrameByName(metadata, tag2, "TDRC", value); - case METADATA_EDITOR_ATTR_DESCRIPTION: return __ID3_getFrameByName(metadata, tag2, "TIT3", value); - case METADATA_EDITOR_ATTR_COMMENT: return __ID3_getFrameByName(metadata, tag2, "COMM", value); - case METADATA_EDITOR_ATTR_TRACK_NUM: return __ID3_getFrameByName(metadata, tag2, "TRCK", value); - case METADATA_EDITOR_ATTR_CONDUCTOR: return __ID3_getFrameByName(metadata, tag2, "TPE3", value); - case METADATA_EDITOR_ATTR_PICTURE_NUM: return __ID3_getNumberOfPictures(metadata, tag2, value); - case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __ID3_getLyricsFrame(metadata, tag2, value); + case METADATA_EDITOR_ATTR_ARTIST: return __ID3_getFrameByName(tag2, "TPE1", value); + case METADATA_EDITOR_ATTR_TITLE: return __ID3_getFrameByName(tag2, "TIT2", value); + case METADATA_EDITOR_ATTR_ALBUM: return __ID3_getFrameByName(tag2, "TALB", value); + case METADATA_EDITOR_ATTR_GENRE: return __ID3_getFrameByName(tag2, "TCON", value); + case METADATA_EDITOR_ATTR_AUTHOR: return __ID3_getFrameByName(tag2, "TCOM", value); + case METADATA_EDITOR_ATTR_COPYRIGHT: return __ID3_getFrameByName(tag2, "TCOP", value); + case METADATA_EDITOR_ATTR_DATE: return __ID3_getFrameByName(tag2, "TDRC", value); + case METADATA_EDITOR_ATTR_DESCRIPTION: return __ID3_getFrameByName(tag2, "TIT3", value); + case METADATA_EDITOR_ATTR_COMMENT: return __ID3_getFrameByName(tag2, "COMM", value); + case METADATA_EDITOR_ATTR_TRACK_NUM: return __ID3_getFrameByName(tag2, "TRCK", value); + case METADATA_EDITOR_ATTR_CONDUCTOR: return __ID3_getFrameByName(tag2, "TPE3", value); + case METADATA_EDITOR_ATTR_PICTURE_NUM: return __ID3_getNumberOfPictures(tag2, value); + case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __ID3_getLyricsFrame(tag2, value); default: metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; @@ -987,18 +947,18 @@ static int __metadata_editor_set_mp3_metadata(metadata_editor_s *metadata, metad metadata_editor_retvm_if(tag2 == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag was not created. Can not proceed metadata updating"); switch (attribute) { // Check which one of frame type was given for processing - case METADATA_EDITOR_ATTR_ARTIST: return __ID3_setTwixFrameByName(metadata, tag1, tag2, "TPE1", value); - case METADATA_EDITOR_ATTR_TITLE: return __ID3_setTwixFrameByName(metadata, tag1, tag2, "TIT2", value); - case METADATA_EDITOR_ATTR_ALBUM: return __ID3_setTwixFrameByName(metadata, tag1, tag2, "TALB", value); - case METADATA_EDITOR_ATTR_GENRE: return __ID3_setTwixFrameByName(metadata, tag1, tag2, "TCON", value); - case METADATA_EDITOR_ATTR_AUTHOR: return __ID3_setFrameByName(metadata, tag2, "TCOM", value); - case METADATA_EDITOR_ATTR_COPYRIGHT: return __ID3_setFrameByName(metadata, tag2, "TCOP", value); - case METADATA_EDITOR_ATTR_DATE: return __ID3_setTwixFrameByName(metadata, tag1, tag2, "TDRC", value); - case METADATA_EDITOR_ATTR_DESCRIPTION: return __ID3_setFrameByName(metadata, tag2, "TIT3", value); - case METADATA_EDITOR_ATTR_TRACK_NUM: return __ID3_setTwixFrameByName(metadata, tag1, tag2, "TRCK", value); - case METADATA_EDITOR_ATTR_CONDUCTOR: return __ID3_setFrameByName(metadata, tag2, "TPE3", value); - case METADATA_EDITOR_ATTR_COMMENT: return __ID3_setTwixCommentFrame(metadata, tag1, tag2, value); - case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __ID3_setLyricsFrame(metadata, tag2, value); + case METADATA_EDITOR_ATTR_ARTIST: return __ID3_setTwixFrameByName(tag1, tag2, "TPE1", value); + case METADATA_EDITOR_ATTR_TITLE: return __ID3_setTwixFrameByName(tag1, tag2, "TIT2", value); + case METADATA_EDITOR_ATTR_ALBUM: return __ID3_setTwixFrameByName(tag1, tag2, "TALB", value); + case METADATA_EDITOR_ATTR_GENRE: return __ID3_setTwixFrameByName(tag1, tag2, "TCON", value); + case METADATA_EDITOR_ATTR_AUTHOR: return __ID3_setFrameByName(tag2, "TCOM", value); + case METADATA_EDITOR_ATTR_COPYRIGHT: return __ID3_setFrameByName(tag2, "TCOP", value); + case METADATA_EDITOR_ATTR_DATE: return __ID3_setTwixFrameByName(tag1, tag2, "TDRC", value); + case METADATA_EDITOR_ATTR_DESCRIPTION: return __ID3_setFrameByName(tag2, "TIT3", value); + case METADATA_EDITOR_ATTR_TRACK_NUM: return __ID3_setTwixFrameByName(tag1, tag2, "TRCK", value); + case METADATA_EDITOR_ATTR_CONDUCTOR: return __ID3_setFrameByName(tag2, "TPE3", value); + case METADATA_EDITOR_ATTR_COMMENT: return __ID3_setTwixCommentFrame(tag1, tag2, value); + case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __ID3_setLyricsFrame(tag2, value); default: metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; @@ -1047,18 +1007,18 @@ static int __metadata_editor_set_flac_metadata(metadata_editor_s *metadata, meta return METADATA_EDITOR_ERROR_OPERATION_FAILED; } switch (attribute) { // Check which one of frame type was given for processing - case METADATA_EDITOR_ATTR_ARTIST: return __xiph_updateFieldValue(metadata, xtag, "ARTIST", value); - case METADATA_EDITOR_ATTR_TITLE: return __xiph_updateFieldValue(metadata, xtag, "TITLE", value); - case METADATA_EDITOR_ATTR_ALBUM: return __xiph_updateFieldValue(metadata, xtag, "ALBUM", value); - case METADATA_EDITOR_ATTR_GENRE: return __xiph_updateFieldValue(metadata, xtag, "GENRE", value); - case METADATA_EDITOR_ATTR_AUTHOR: return __xiph_updateFieldValue(metadata, xtag, "COMPOSER", value); - case METADATA_EDITOR_ATTR_COPYRIGHT: return __xiph_updateFieldValue(metadata, xtag, "COPYRIGHT", value); - case METADATA_EDITOR_ATTR_DATE: return __xiph_updateFieldValue(metadata, xtag, "DATE", value); - case METADATA_EDITOR_ATTR_DESCRIPTION: return __xiph_updateFieldValue(metadata, xtag, "DESCRIPTION", value); - case METADATA_EDITOR_ATTR_COMMENT: return __xiph_updateFieldValue(metadata, xtag, "COMMENT", value); - case METADATA_EDITOR_ATTR_TRACK_NUM: return __xiph_updateFieldValue(metadata, xtag, "TRACKNUMBER", value); - case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_updateFieldValue(metadata, xtag, "CONDUCTOR", value); - case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_updateFieldValue(metadata, xtag, "LYRICS", value); + case METADATA_EDITOR_ATTR_ARTIST: return __xiph_updateFieldValue(xtag, "ARTIST", value); + case METADATA_EDITOR_ATTR_TITLE: return __xiph_updateFieldValue(xtag, "TITLE", value); + case METADATA_EDITOR_ATTR_ALBUM: return __xiph_updateFieldValue(xtag, "ALBUM", value); + case METADATA_EDITOR_ATTR_GENRE: return __xiph_updateFieldValue(xtag, "GENRE", value); + case METADATA_EDITOR_ATTR_AUTHOR: return __xiph_updateFieldValue(xtag, "COMPOSER", value); + case METADATA_EDITOR_ATTR_COPYRIGHT: return __xiph_updateFieldValue(xtag, "COPYRIGHT", value); + case METADATA_EDITOR_ATTR_DATE: return __xiph_updateFieldValue(xtag, "DATE", value); + case METADATA_EDITOR_ATTR_DESCRIPTION: return __xiph_updateFieldValue(xtag, "DESCRIPTION", value); + case METADATA_EDITOR_ATTR_COMMENT: return __xiph_updateFieldValue(xtag, "COMMENT", value); + case METADATA_EDITOR_ATTR_TRACK_NUM: return __xiph_updateFieldValue(xtag, "TRACKNUMBER", value); + case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_updateFieldValue(xtag, "CONDUCTOR", value); + case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_updateFieldValue(xtag, "LYRICS", value); default: metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; @@ -1080,18 +1040,18 @@ static int __metadata_editor_set_ogg_vorbis_metadata(metadata_editor_s *metadata return METADATA_EDITOR_ERROR_OPERATION_FAILED; } switch (attribute) { // Check which one of frame type was given for processing - case METADATA_EDITOR_ATTR_ARTIST: return __xiph_updateFieldValue(metadata, xtag, "ARTIST", value); - case METADATA_EDITOR_ATTR_TITLE: return __xiph_updateFieldValue(metadata, xtag, "TITLE", value); - case METADATA_EDITOR_ATTR_ALBUM: return __xiph_updateFieldValue(metadata, xtag, "ALBUM", value); - case METADATA_EDITOR_ATTR_GENRE: return __xiph_updateFieldValue(metadata, xtag, "GENRE", value); - case METADATA_EDITOR_ATTR_AUTHOR: return __xiph_updateFieldValue(metadata, xtag, "COMPOSER", value); - case METADATA_EDITOR_ATTR_COPYRIGHT: return __xiph_updateFieldValue(metadata, xtag, "COPYRIGHT", value); - case METADATA_EDITOR_ATTR_DATE: return __xiph_updateFieldValue(metadata, xtag, "DATE", value); - case METADATA_EDITOR_ATTR_DESCRIPTION: return __xiph_updateFieldValue(metadata, xtag, "DESCRIPTION", value); - case METADATA_EDITOR_ATTR_COMMENT: return __xiph_updateFieldValue(metadata, xtag, "COMMENT", value); - case METADATA_EDITOR_ATTR_TRACK_NUM: return __xiph_updateFieldValue(metadata, xtag, "TRACKNUMBER", value); - case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_updateFieldValue(metadata, xtag, "CONDUCTOR", value); - case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_updateFieldValue(metadata, xtag, "LYRICS", value); + case METADATA_EDITOR_ATTR_ARTIST: return __xiph_updateFieldValue(xtag, "ARTIST", value); + case METADATA_EDITOR_ATTR_TITLE: return __xiph_updateFieldValue(xtag, "TITLE", value); + case METADATA_EDITOR_ATTR_ALBUM: return __xiph_updateFieldValue(xtag, "ALBUM", value); + case METADATA_EDITOR_ATTR_GENRE: return __xiph_updateFieldValue(xtag, "GENRE", value); + case METADATA_EDITOR_ATTR_AUTHOR: return __xiph_updateFieldValue(xtag, "COMPOSER", value); + case METADATA_EDITOR_ATTR_COPYRIGHT: return __xiph_updateFieldValue(xtag, "COPYRIGHT", value); + case METADATA_EDITOR_ATTR_DATE: return __xiph_updateFieldValue(xtag, "DATE", value); + case METADATA_EDITOR_ATTR_DESCRIPTION: return __xiph_updateFieldValue(xtag, "DESCRIPTION", value); + case METADATA_EDITOR_ATTR_COMMENT: return __xiph_updateFieldValue(xtag, "COMMENT", value); + case METADATA_EDITOR_ATTR_TRACK_NUM: return __xiph_updateFieldValue(xtag, "TRACKNUMBER", value); + case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_updateFieldValue(xtag, "CONDUCTOR", value); + case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_updateFieldValue(xtag, "LYRICS", value); default: metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; @@ -1113,18 +1073,18 @@ static int __metadata_editor_set_ogg_flac_metadata(metadata_editor_s *metadata, return METADATA_EDITOR_ERROR_OPERATION_FAILED; } switch (attribute) { // Check which one of frame type was given for processing - case METADATA_EDITOR_ATTR_ARTIST: return __xiph_updateFieldValue(metadata, xtag, "ARTIST", value); - case METADATA_EDITOR_ATTR_TITLE: return __xiph_updateFieldValue(metadata, xtag, "TITLE", value); - case METADATA_EDITOR_ATTR_ALBUM: return __xiph_updateFieldValue(metadata, xtag, "ALBUM", value); - case METADATA_EDITOR_ATTR_GENRE: return __xiph_updateFieldValue(metadata, xtag, "GENRE", value); - case METADATA_EDITOR_ATTR_AUTHOR: return __xiph_updateFieldValue(metadata, xtag, "COMPOSER", value); - case METADATA_EDITOR_ATTR_COPYRIGHT: return __xiph_updateFieldValue(metadata, xtag, "COPYRIGHT", value); - case METADATA_EDITOR_ATTR_DATE: return __xiph_updateFieldValue(metadata, xtag, "DATE", value); - case METADATA_EDITOR_ATTR_DESCRIPTION: return __xiph_updateFieldValue(metadata, xtag, "DESCRIPTION", value); - case METADATA_EDITOR_ATTR_COMMENT: return __xiph_updateFieldValue(metadata, xtag, "COMMENT", value); - case METADATA_EDITOR_ATTR_TRACK_NUM: return __xiph_updateFieldValue(metadata, xtag, "TRACKNUMBER", value); - case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_updateFieldValue(metadata, xtag, "CONDUCTOR", value); - case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_updateFieldValue(metadata, xtag, "LYRICS", value); + case METADATA_EDITOR_ATTR_ARTIST: return __xiph_updateFieldValue(xtag, "ARTIST", value); + case METADATA_EDITOR_ATTR_TITLE: return __xiph_updateFieldValue(xtag, "TITLE", value); + case METADATA_EDITOR_ATTR_ALBUM: return __xiph_updateFieldValue(xtag, "ALBUM", value); + case METADATA_EDITOR_ATTR_GENRE: return __xiph_updateFieldValue(xtag, "GENRE", value); + case METADATA_EDITOR_ATTR_AUTHOR: return __xiph_updateFieldValue(xtag, "COMPOSER", value); + case METADATA_EDITOR_ATTR_COPYRIGHT: return __xiph_updateFieldValue(xtag, "COPYRIGHT", value); + case METADATA_EDITOR_ATTR_DATE: return __xiph_updateFieldValue(xtag, "DATE", value); + case METADATA_EDITOR_ATTR_DESCRIPTION: return __xiph_updateFieldValue(xtag, "DESCRIPTION", value); + case METADATA_EDITOR_ATTR_COMMENT: return __xiph_updateFieldValue(xtag, "COMMENT", value); + case METADATA_EDITOR_ATTR_TRACK_NUM: return __xiph_updateFieldValue(xtag, "TRACKNUMBER", value); + case METADATA_EDITOR_ATTR_CONDUCTOR: return __xiph_updateFieldValue(xtag, "CONDUCTOR", value); + case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __xiph_updateFieldValue(xtag, "LYRICS", value); default: metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; @@ -1148,18 +1108,18 @@ static int __metadata_editor_set_wav_metadata(metadata_editor_s *metadata, metad } switch (attribute) { // Check which one of frame type was given for processing - case METADATA_EDITOR_ATTR_ARTIST: return __ID3_setFrameByName(metadata, tag2, "TPE1", value); - case METADATA_EDITOR_ATTR_TITLE: return __ID3_setFrameByName(metadata, tag2, "TIT2", value); - case METADATA_EDITOR_ATTR_ALBUM: return __ID3_setFrameByName(metadata, tag2, "TALB", value); - case METADATA_EDITOR_ATTR_GENRE: return __ID3_setFrameByName(metadata, tag2, "TCON", value); - case METADATA_EDITOR_ATTR_AUTHOR: return __ID3_setFrameByName(metadata, tag2, "TCOM", value); - case METADATA_EDITOR_ATTR_COPYRIGHT: return __ID3_setFrameByName(metadata, tag2, "TCOP", value); - case METADATA_EDITOR_ATTR_DATE: return __ID3_setFrameByName(metadata, tag2, "TDRC", value); - case METADATA_EDITOR_ATTR_DESCRIPTION: return __ID3_setFrameByName(metadata, tag2, "TIT3", value); - case METADATA_EDITOR_ATTR_TRACK_NUM: return __ID3_setFrameByName(metadata, tag2, "TRCK", value); - case METADATA_EDITOR_ATTR_CONDUCTOR: return __ID3_setFrameByName(metadata, tag2, "TPE3", value); - case METADATA_EDITOR_ATTR_COMMENT: return __ID3_setTwixCommentFrame(metadata, NULL, tag2, value); - case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __ID3_setLyricsFrame(metadata, tag2, value); + case METADATA_EDITOR_ATTR_ARTIST: return __ID3_setFrameByName(tag2, "TPE1", value); + case METADATA_EDITOR_ATTR_TITLE: return __ID3_setFrameByName(tag2, "TIT2", value); + case METADATA_EDITOR_ATTR_ALBUM: return __ID3_setFrameByName(tag2, "TALB", value); + case METADATA_EDITOR_ATTR_GENRE: return __ID3_setFrameByName(tag2, "TCON", value); + case METADATA_EDITOR_ATTR_AUTHOR: return __ID3_setFrameByName(tag2, "TCOM", value); + case METADATA_EDITOR_ATTR_COPYRIGHT: return __ID3_setFrameByName(tag2, "TCOP", value); + case METADATA_EDITOR_ATTR_DATE: return __ID3_setFrameByName(tag2, "TDRC", value); + case METADATA_EDITOR_ATTR_DESCRIPTION: return __ID3_setFrameByName(tag2, "TIT3", value); + case METADATA_EDITOR_ATTR_TRACK_NUM: return __ID3_setFrameByName(tag2, "TRCK", value); + case METADATA_EDITOR_ATTR_CONDUCTOR: return __ID3_setFrameByName(tag2, "TPE3", value); + case METADATA_EDITOR_ATTR_COMMENT: return __ID3_setTwixCommentFrame(NULL, tag2, value); + case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __ID3_setLyricsFrame(tag2, value); default: metadata_editor_error("Invalid attribute [%d]", attribute); return METADATA_EDITOR_ERROR_INVALID_PARAMETER; -- 2.7.4