From a393b2b577810bc6e93996c50ac3a608367382c7 Mon Sep 17 00:00:00 2001 From: hj kim Date: Tue, 27 Aug 2019 11:01:07 +0900 Subject: [PATCH] Update code to reduce Cyclomatic Complexity and DC Change-Id: I2d9ea5df5687c41329981c77df0aa6be0c0592c5 --- src/metadata_editor.cpp | 981 ++++++++++++++++++++++++++---------------------- 1 file changed, 527 insertions(+), 454 deletions(-) diff --git a/src/metadata_editor.cpp b/src/metadata_editor.cpp index 92b73b4..be3c632 100755 --- a/src/metadata_editor.cpp +++ b/src/metadata_editor.cpp @@ -51,18 +51,49 @@ typedef enum { METADATA_EDITOR_FORMAT_NOTYPE = 0xFF /**< Error type. File type is not correct or not specified */ } metadata_editor_format_e; +static int __check_metadata_parameter(metadata_editor_s *metadata) +{ + metadata_editor_retvm_if(!metadata, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid metadata"); + metadata_editor_retvm_if(!metadata->file, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail"); + metadata_editor_retvm_if(!metadata->isOpen, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); + + return METADATA_EDITOR_ERROR_NONE; +} + +static int __check_metadata_set_parameter(metadata_editor_s *metadata) +{ + int ret = METADATA_EDITOR_ERROR_NONE; + + ret = __check_metadata_parameter(metadata); + metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_parameter"); + + metadata_editor_retvm_if(metadata->isReadOnly, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File is readonly. Unable to modify"); + + return METADATA_EDITOR_ERROR_NONE; +} + +static int __check_metadata_get_parameter(metadata_editor_s *metadata, char **value) +{ + int ret = METADATA_EDITOR_ERROR_NONE; + + ret = __check_metadata_parameter(metadata); + metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_parameter"); + + metadata_editor_retvm_if(!value, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid value"); + + 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) { - // Check if we have valid arguments to work with - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(frameID == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(value == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); + 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"); - // Check if the file, given through metadata, exists and is opened correctly *value = NULL; - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); // Check if the frame is empty (nothing to read) or ID3v2 tag does not exist if (!tag2 || tag2->frameListMap()[frameID].isEmpty()) { @@ -147,16 +178,12 @@ static int __ID3_getTwixFrameByName(metadata_editor_s* _metadata, TagLib::ID3v1: // *** 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) { - // Check if we have valid arguments to work with - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(frameID == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - - // Check if the file, given through metadata, exists and is opened correctly - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); - metadata_editor_retvm_if(_metadata->isReadOnly, METADATA_EDITOR_ERROR_OPERATION_FAILED, "File is readonly. Unable to modify"); + int ret = METADATA_EDITOR_ERROR_NONE; - // 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"); + 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"); // If the pointer is NULL or c-string is empty - handle as request for deletion if (!value || (*value == '\0')) { @@ -216,14 +243,13 @@ static int __ID3_setTwixFrameByName(metadata_editor_s* _metadata, TagLib::ID3v1: // *** 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) { - // Check if we have valid arguments to work with - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(frameID == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(value == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); + 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"); - // Check if the file, given through metadata, exists and is opened correctly *value = NULL; - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); // 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); @@ -245,16 +271,12 @@ static int __ID3_getFrameByName(metadata_editor_s* _metadata, TagLib::ID3v2::Tag // *** 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) { - // Check if we have valid arguments to work with - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(frameID == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - - // Check if the file, given through metadata, exists and is opened correctly - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); - metadata_editor_retvm_if(_metadata->isReadOnly, METADATA_EDITOR_ERROR_OPERATION_FAILED, "File is readonly. Unable to modify"); + int ret = METADATA_EDITOR_ERROR_NONE; - // Check if the valid tag pointer exist - metadata_editor_retvm_if(tag2 == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag was not created. Can not proceed metadata updating"); + 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"); // If the pointer is NULL or c-string is empty - handle as request for deletion if (!value || (*value == '\0')) { @@ -283,16 +305,11 @@ static int __ID3_setFrameByName(metadata_editor_s* _metadata, TagLib::ID3v2::Tag // *** 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) { - // Check if parameters are valid - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(value == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - - // Check if the file, given through metadata, exists and is opened correctly - *value = NULL; - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); + int ret = METADATA_EDITOR_ERROR_NONE; - // Check if the valid tag pointer exist - metadata_editor_retvm_if(tag2 == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag does not exist. Can not process further"); + 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 @@ -309,16 +326,11 @@ static int __ID3_getNumberOfPictures(metadata_editor_s* _metadata, TagLib::ID3v2 // *** 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) { - // Check if parameters are valid - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(value == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - - // Check if the file, given through metadata, exists and is opened correctly - *value = NULL; - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); + int ret = METADATA_EDITOR_ERROR_NONE; - // Check if the valid tag pointer exist - metadata_editor_retvm_if(tag2 == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag does not exist. Can not process further"); + 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 @@ -340,15 +352,11 @@ static int __ID3_getLyricsFrame(metadata_editor_s* _metadata, TagLib::ID3v2::Tag // *** 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) { - // Check if we have a valid argument to work with - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - - // Check if the file, given through metadata, exists and is opened correctly - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); - metadata_editor_retvm_if(_metadata->isReadOnly, METADATA_EDITOR_ERROR_OPERATION_FAILED, "File is readonly. Unable to modify"); + int ret = METADATA_EDITOR_ERROR_NONE; - // Check if the valid tag pointer exist - metadata_editor_retvm_if(tag2 == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag was not created. Can not proceed metadata updating"); + 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 if (!value || (*value == '\0')) { @@ -382,15 +390,11 @@ static int __ID3_setTwixCommentFrame(metadata_editor_s* _metadata, TagLib::ID3v1 // *** 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) { - // Check if we have a valid argument to work with - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); + int ret = METADATA_EDITOR_ERROR_NONE; - // Check if the file, given through metadata, exists and is opened correctly - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); - metadata_editor_retvm_if(_metadata->isReadOnly, METADATA_EDITOR_ERROR_OPERATION_FAILED, "File is readonly. Unable to modify"); - - // Check if the valid tag pointer exist - metadata_editor_retvm_if(tag2 == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag was not created. Can not proceed metadata updating"); + 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"); TagLib::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 @@ -421,16 +425,12 @@ static int __ID3_setLyricsFrame(metadata_editor_s* _metadata, TagLib::ID3v2::Tag } // *** This function extracts string values from tag in MP4 file *** // -static int __MP4_getStringItem(metadata_editor_s* _metadata, const char* itemname, char** value) { - // Check if parameters are valid - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(itemname == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(value == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(_metadata->file == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail."); - - // Check if the file, given through metadata, exists and is opened correctly - *value = NULL; - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); +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(); @@ -458,15 +458,11 @@ 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) { - // Check if parameters are valid - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(itemname == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(value == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(_metadata->file == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail."); + int ret = METADATA_EDITOR_ERROR_NONE; - // Check if the file, given through metadata, exists and is opened correctly - *value = NULL; - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); + 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(); @@ -492,14 +488,11 @@ 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) { - // Check if parameters are valid - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(itemname == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(_metadata->file == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail."); + int ret = METADATA_EDITOR_ERROR_NONE; - // Check if the file, given through metadata, exists and is opened correctly - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); - metadata_editor_retvm_if(_metadata->isReadOnly, METADATA_EDITOR_ERROR_OPERATION_FAILED, "File is readonly. Unable to modify"); + 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(); @@ -523,14 +516,11 @@ static int __MP4_updateStringItem(metadata_editor_s* _metadata, const char* item // *** This function adds (or changes) integer item of itemname type *** // static int __MP4_updateIntegerItem(metadata_editor_s* _metadata, const char* itemname, const char* value) { - // Check if parameters are valid - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(itemname == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(_metadata->file == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail."); + int ret = METADATA_EDITOR_ERROR_NONE; - // Check if the file, given through metadata, exists and is opened correctly - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); - metadata_editor_retvm_if(_metadata->isReadOnly, METADATA_EDITOR_ERROR_OPERATION_FAILED, "File is readonly. Unable to modify"); + 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(); @@ -560,14 +550,10 @@ 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) { - // Check if parameters are valid - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(value == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(_metadata->file == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail."); + int ret = METADATA_EDITOR_ERROR_NONE; - // Check if the file, given through metadata, exists and is opened correctly - *value = NULL; - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); + 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(); @@ -590,14 +576,11 @@ static int __MP4_getNumberOfPictures(metadata_editor_s* _metadata, char** value) #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) { - // Check if we have a valid argument to work with - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(fieldname == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(value == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID Value Pointer"); + int ret = METADATA_EDITOR_ERROR_NONE; - // Check if the file, given through metadata, exists and is opened correctly - *value = NULL; - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); + 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"); const TagLib::Ogg::FieldListMap& fieldMap = xtag->fieldListMap(); @@ -623,14 +606,11 @@ 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) { - // Check if we have a valid argument to work with - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(fieldname == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); + int ret = METADATA_EDITOR_ERROR_NONE; - // Check if the file, given through metadata, exists and is opened correctly - *value = NULL; - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); - metadata_editor_retvm_if(_metadata->isReadOnly, METADATA_EDITOR_ERROR_OPERATION_FAILED, "File is readonly. Unable to modify"); + 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"); // Check if it is a request for deletion @@ -647,14 +627,10 @@ static int __xiph_updateFieldValue(metadata_editor_s* _metadata, TagLib::Ogg::Xi // *** This function is used to receive the number of pictures in FLAC file *** // static int __FLAC_getNumberOfPictures(metadata_editor_s* _metadata, char** value) { - // Check if parameters are valid - metadata_editor_retvm_if(_metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID Handle"); - metadata_editor_retvm_if(value == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID Value Pointer"); - metadata_editor_retvm_if(_metadata->file == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail"); + int ret = METADATA_EDITOR_ERROR_NONE; - // Check if the file, given through metadata, exists and is opened correctly - *value = NULL; - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); + 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()) { @@ -1039,339 +1015,449 @@ extern "C" int metadata_editor_set_path(metadata_editor_h metadata, const char * } } +static int __metadata_editor_get_mp3_metadata(metadata_editor_s *metadata, metadata_editor_attr_e attribute, 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); + + // 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(); + + 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); + default: + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } +} + +static int __metadata_editor_get_mp4_metadata(metadata_editor_s *metadata, metadata_editor_attr_e attribute, 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); + + switch (attribute) { // Check which one of frame types was given to the function for processing + case METADATA_EDITOR_ATTR_ARTIST: return __MP4_getStringItem(metadata, "\xA9""ART", value); + case METADATA_EDITOR_ATTR_TITLE: return __MP4_getStringItem(metadata, "\xA9""nam", value); + case METADATA_EDITOR_ATTR_ALBUM: return __MP4_getStringItem(metadata, "\xA9""alb", value); + case METADATA_EDITOR_ATTR_GENRE: return __MP4_getStringItem(metadata, "\xA9""gen", value); + case METADATA_EDITOR_ATTR_AUTHOR: return __MP4_getStringItem(metadata, "\xA9""wrt", value); + case METADATA_EDITOR_ATTR_COPYRIGHT: return __MP4_getStringItem(metadata, "cprt", value); + case METADATA_EDITOR_ATTR_DATE: return __MP4_getStringItem(metadata, "\xA9""day", value); + case METADATA_EDITOR_ATTR_DESCRIPTION: return __MP4_getStringItem(metadata, "desc", value); + case METADATA_EDITOR_ATTR_COMMENT: return __MP4_getStringItem(metadata, "\xA9""cmt", value); + case METADATA_EDITOR_ATTR_TRACK_NUM: return __MP4_getIntegerItem(metadata, "trkn", value); + case METADATA_EDITOR_ATTR_CONDUCTOR: return __MP4_getStringItem(metadata, "cond", value); + case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __MP4_getStringItem(metadata, "\xA9""lyr", value); + case METADATA_EDITOR_ATTR_PICTURE_NUM: return __MP4_getNumberOfPictures(metadata, value); + default: + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; +} +} + +#if 0 +static int __metadata_editor_get_flac_metadata(metadata_editor_s *metadata, metadata_editor_attr_e attribute, 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); + + // 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); + if (!xtag) { // Check if we have a valid tag for processing + metadata_editor_error("Tag does not exist"); + *value = NULL; + 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_PICTURE_NUM: return __FLAC_getNumberOfPictures(metadata, value); + default: + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } +} + +static int __metadata_editor_get_ogg_vorbis_metadata(metadata_editor_s *metadata, metadata_editor_attr_e attribute, 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); + + // 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(); + if (!xtag) { // Check if we have a valid tag for processing + metadata_editor_error("Tag does not exist"); + *value = NULL; + 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); + default: + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } +} + +static int __metadata_editor_get_ogg_flac_metadata(metadata_editor_s *metadata, metadata_editor_attr_e attribute, 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); + + // 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(); + if (!xtag) { // Check if we have a valid tag for processing + metadata_editor_error("Tag does not exist"); + *value = NULL; + 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); + default: + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } +} + +static int __metadata_editor_get_wav_metadata(metadata_editor_s *metadata, metadata_editor_attr_e attribute, 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); + + // 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(); + + 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"); + *value = NULL; + 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 __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); + default: + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } +} +#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) { - // Check if we have valid arguments to work with - metadata_editor_retvm_if(metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID Handle"); - metadata_editor_retvm_if(value == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID Value Pointer"); metadata_editor_s *_metadata = (metadata_editor_s*)metadata; - metadata_editor_retvm_if(_metadata->file == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail"); - - // Check if the file, given through metadata, exists and is opened correctly - *value = NULL; - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); + metadata_editor_retvm_if(!_metadata, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid metadata"); 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 tag pointers - TagLib::MPEG::File* _file = (TagLib::MPEG::File*)_metadata->file; - TagLib::ID3v1::Tag* tag1 = _file->ID3v1Tag(); - TagLib::ID3v2::Tag* tag2 = _file->ID3v2Tag(); + case METADATA_EDITOR_FORMAT_MP3: + return __metadata_editor_get_mp3_metadata(_metadata, attribute, value); + + case METADATA_EDITOR_FORMAT_MP4: + return __metadata_editor_get_mp4_metadata(_metadata, attribute, value); - 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); - default: - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } - } - case METADATA_EDITOR_FORMAT_MP4: { - switch (attribute) { // Check which one of frame types was given to the function for processing - case METADATA_EDITOR_ATTR_ARTIST: return __MP4_getStringItem(_metadata, "\xA9""ART", value); - case METADATA_EDITOR_ATTR_TITLE: return __MP4_getStringItem(_metadata, "\xA9""nam", value); - case METADATA_EDITOR_ATTR_ALBUM: return __MP4_getStringItem(_metadata, "\xA9""alb", value); - case METADATA_EDITOR_ATTR_GENRE: return __MP4_getStringItem(_metadata, "\xA9""gen", value); - case METADATA_EDITOR_ATTR_AUTHOR: return __MP4_getStringItem(_metadata, "\xA9""wrt", value); - case METADATA_EDITOR_ATTR_COPYRIGHT: return __MP4_getStringItem(_metadata, "cprt", value); - case METADATA_EDITOR_ATTR_DATE: return __MP4_getStringItem(_metadata, "\xA9""day", value); - case METADATA_EDITOR_ATTR_DESCRIPTION: return __MP4_getStringItem(_metadata, "desc", value); - case METADATA_EDITOR_ATTR_COMMENT: return __MP4_getStringItem(_metadata, "\xA9""cmt", value); - case METADATA_EDITOR_ATTR_TRACK_NUM: return __MP4_getIntegerItem(_metadata, "trkn", value); - case METADATA_EDITOR_ATTR_CONDUCTOR: return __MP4_getStringItem(_metadata, "cond", value); - case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __MP4_getStringItem(_metadata, "\xA9""lyr", value); - case METADATA_EDITOR_ATTR_PICTURE_NUM: return __MP4_getNumberOfPictures(_metadata, value); - default: - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } - } #if 0 case METADATA_EDITOR_FORMAT_FLAC: { - // 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); - if (!xtag) { // Check if we have a valid tag for processing - metadata_editor_error("Tag does not exist"); - *value = NULL; - 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_PICTURE_NUM: return __FLAC_getNumberOfPictures(_metadata, value); - default: - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } + return __metadata_editor_get_flac_metadata(_metadata, attribute, value); } case METADATA_EDITOR_FORMAT_OGG_VORBIS: { - // 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(); - if (!xtag) { // Check if we have a valid tag for processing - metadata_editor_error("Tag does not exist"); - *value = NULL; - 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); - default: - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } + return __metadata_editor_get_ogg_vorbis_metadata(_metadata, attribute, value); } case METADATA_EDITOR_FORMAT_OGG_FLAC: { - // 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(); - if (!xtag) { // Check if we have a valid tag for processing - metadata_editor_error("Tag does not exist"); - *value = NULL; - 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); - default: - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } + return __metadata_editor_get_ogg_flac_metadata(_metadata, attribute, value); } case METADATA_EDITOR_FORMAT_WAV: { - // 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(); - - 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"); - *value = NULL; - 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 __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); - default: - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } + return __metadata_editor_get_wav_metadata(_metadata, attribute, value); } #endif default: - metadata_editor_error("Wrong file type"); + metadata_editor_error("Wrong file type [%d]", _metadata->filetype); + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } +} + +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; + + ret = __check_metadata_set_parameter(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::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"); + + 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); + default: + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } +} + +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; + + 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 (attribute) { // Check which one of frame type was given for processing + case METADATA_EDITOR_ATTR_ARTIST: return __MP4_updateStringItem(metadata, "\xA9""ART", value); + case METADATA_EDITOR_ATTR_TITLE: return __MP4_updateStringItem(metadata, "\xA9""nam", value); + case METADATA_EDITOR_ATTR_ALBUM: return __MP4_updateStringItem(metadata, "\xA9""alb", value); + case METADATA_EDITOR_ATTR_GENRE: return __MP4_updateStringItem(metadata, "\xA9""gen", value); + case METADATA_EDITOR_ATTR_AUTHOR: return __MP4_updateStringItem(metadata, "\xA9""wrt", value); + case METADATA_EDITOR_ATTR_COPYRIGHT: return __MP4_updateStringItem(metadata, "cprt", value); + case METADATA_EDITOR_ATTR_DATE: return __MP4_updateStringItem(metadata, "\xA9""day", value); + case METADATA_EDITOR_ATTR_DESCRIPTION: return __MP4_updateStringItem(metadata, "desc", value); + case METADATA_EDITOR_ATTR_COMMENT: return __MP4_updateStringItem(metadata, "\xA9""cmt", value); + case METADATA_EDITOR_ATTR_TRACK_NUM: return __MP4_updateIntegerItem(metadata, "trkn", value); + case METADATA_EDITOR_ATTR_CONDUCTOR: return __MP4_updateStringItem(metadata, "cond", value); + case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __MP4_updateStringItem(metadata, "\xA9""lyr", value); + default: + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } +} + +#if 0 +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; + + ret = __check_metadata_set_parameter(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::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; + } + 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); + default: + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } +} + +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; + + ret = __check_metadata_set_parameter(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(); + 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; + } + 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); + default: + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } +} + +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; + + ret = __check_metadata_set_parameter(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(); + 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; + } + 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); + default: + return METADATA_EDITOR_ERROR_INVALID_PARAMETER; + } +} + +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; + + ret = __check_metadata_set_parameter(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::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"); + return METADATA_EDITOR_ERROR_OPERATION_FAILED; + } + + 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); + default: return METADATA_EDITOR_ERROR_INVALID_PARAMETER; } } +#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) { - // Check if we have valid arguments to work with - metadata_editor_retvm_if(metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID Handle"); metadata_editor_s* _metadata = (metadata_editor_s*) metadata; - - metadata_editor_retvm_if(_metadata->file == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail"); - - // Check if the file, given through metadata, exists and is opened correctly - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); - metadata_editor_retvm_if(_metadata->isReadOnly, METADATA_EDITOR_ERROR_OPERATION_FAILED, "File is readonly. Unable to modify"); + metadata_editor_retvm_if(!_metadata, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid metadata"); 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::ID3v1::Tag* tag1 = _file->ID3v1Tag(); - TagLib::ID3v2::Tag* tag2 = _file->ID3v2Tag(true); + case METADATA_EDITOR_FORMAT_MP3: + return __metadata_editor_set_mp3_metadata(_metadata, attribute, value); - metadata_editor_retvm_if(tag2 == NULL, METADATA_EDITOR_ERROR_OPERATION_FAILED, "Error. ID3v2 tag was not created. Can not proceed metadata updating"); + case METADATA_EDITOR_FORMAT_MP4: + return __metadata_editor_set_mp4_metadata(_metadata, attribute, value); - 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); - default: - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } - } - case METADATA_EDITOR_FORMAT_MP4: { - switch (attribute) { // Check which one of frame type was given for processing - case METADATA_EDITOR_ATTR_ARTIST: return __MP4_updateStringItem(_metadata, "\xA9""ART", value); - case METADATA_EDITOR_ATTR_TITLE: return __MP4_updateStringItem(_metadata, "\xA9""nam", value); - case METADATA_EDITOR_ATTR_ALBUM: return __MP4_updateStringItem(_metadata, "\xA9""alb", value); - case METADATA_EDITOR_ATTR_GENRE: return __MP4_updateStringItem(_metadata, "\xA9""gen", value); - case METADATA_EDITOR_ATTR_AUTHOR: return __MP4_updateStringItem(_metadata, "\xA9""wrt", value); - case METADATA_EDITOR_ATTR_COPYRIGHT: return __MP4_updateStringItem(_metadata, "cprt", value); - case METADATA_EDITOR_ATTR_DATE: return __MP4_updateStringItem(_metadata, "\xA9""day", value); - case METADATA_EDITOR_ATTR_DESCRIPTION: return __MP4_updateStringItem(_metadata, "desc", value); - case METADATA_EDITOR_ATTR_COMMENT: return __MP4_updateStringItem(_metadata, "\xA9""cmt", value); - case METADATA_EDITOR_ATTR_TRACK_NUM: return __MP4_updateIntegerItem(_metadata, "trkn", value); - case METADATA_EDITOR_ATTR_CONDUCTOR: return __MP4_updateStringItem(_metadata, "cond", value); - case METADATA_EDITOR_ATTR_UNSYNCLYRICS: return __MP4_updateStringItem(_metadata, "\xA9""lyr", value); - default: - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } - } #if 0 - case METADATA_EDITOR_FORMAT_FLAC: { - // 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); - 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; - } - 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); - default: - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } - } - case METADATA_EDITOR_FORMAT_OGG_VORBIS: { - // 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(); - 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; - } - 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); - default: - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } - } - case METADATA_EDITOR_FORMAT_OGG_FLAC: { - // 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(); - 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; - } - 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); - default: - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } - } - 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 exist - if (tag2 == NULL) { - metadata_editor_error("Error. ID3v2 tag was not created. Can not proceed metadata updating"); - return METADATA_EDITOR_ERROR_OPERATION_FAILED; - } + case METADATA_EDITOR_FORMAT_FLAC: + return __metadata_editor_set_flac_metadata(_metadata, attribute, value); + + case METADATA_EDITOR_FORMAT_OGG_VORBIS: + return __metadata_editor_set_ogg_vorbis_metadata(_metadata, attribute, value); + + case METADATA_EDITOR_FORMAT_OGG_FLAC: + return __metadata_editor_set_ogg_flac_metadata(_metadata, attribute, value); + + case METADATA_EDITOR_FORMAT_WAV: + return __metadata_editor_set_wav_metadata(_metadata, attribute, value); - 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); - default: - return METADATA_EDITOR_ERROR_INVALID_PARAMETER; - } - } #endif default: metadata_editor_error("Wrong file type"); @@ -1381,15 +1467,11 @@ 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) { - // Check if we have a valid argument to work with - metadata_editor_retvm_if(metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID Handle"); - - metadata_editor_s *_metadata = (metadata_editor_s*)metadata; - metadata_editor_retvm_if(_metadata->file == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail"); + int ret = METADATA_EDITOR_ERROR_NONE; + metadata_editor_s* _metadata = (metadata_editor_s*) metadata; - // Check if the file, given through metadata, exists and is opened correctly - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); - metadata_editor_retvm_if(_metadata->isReadOnly, METADATA_EDITOR_ERROR_OPERATION_FAILED, "File is readonly. Unable to modify"); + 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: { @@ -1454,21 +1536,20 @@ extern "C" int metadata_editor_update_metadata(metadata_editor_h metadata) { extern "C" int metadata_editor_get_picture(metadata_editor_h metadata, int index, void **picture, int *size, char **mime_type) { const char *TYPE_JPEG = "image/jpeg"; const char *TYPE_PNG = "image/png"; - // Check if we have valid arguments to work with - metadata_editor_retvm_if(metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID Handle"); - metadata_editor_retvm_if(picture == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); - metadata_editor_retvm_if(size == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); + + int ret = METADATA_EDITOR_ERROR_NONE; metadata_editor_s* _metadata = (metadata_editor_s*) metadata; - metadata_editor_retvm_if(_metadata->file == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail"); - // Check if the file, given through metadata, exists and is opened correctly + 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); + metadata_editor_retvm_if(!picture, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid picture"); + metadata_editor_retvm_if(!size, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid size"); + *picture = NULL; *size = 0; *mime_type = NULL; - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, 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: { TagLib::MPEG::File* _file = (TagLib::MPEG::File*)_metadata->file; // Bring the pointer to actual file type @@ -1647,16 +1728,12 @@ extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const int size = 0; char *type = NULL; - // Check if we have valid arguments to work with - metadata_editor_retvm_if(metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); metadata_editor_retvm_if(path == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID PARAMETER"); metadata_editor_s* _metadata = (metadata_editor_s*) metadata; - metadata_editor_retvm_if(_metadata->file == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail"); - // Check if the file, given through metadata, exists and is opened correctly - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); - metadata_editor_retvm_if(_metadata->isReadOnly, METADATA_EDITOR_ERROR_OPERATION_FAILED, "File is readonly. Unable to modify"); + ret = __check_metadata_set_parameter(_metadata); + metadata_editor_retvm_if(ret != METADATA_EDITOR_ERROR_NONE, ret, "fail to __check_metadata_set_parameter() [%d]", ret); ret = __metadata_editor_get_picture_info(path, &picture, &size, &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"); @@ -1792,15 +1869,11 @@ extern "C" int metadata_editor_append_picture(metadata_editor_h metadata, const // *** This function is used to delete picture with specified index *** // extern "C" int metadata_editor_remove_picture(metadata_editor_h metadata, int index) { - // Check if we have a valid argument to work with - metadata_editor_retvm_if(metadata == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "INVALID handler."); - + int ret = METADATA_EDITOR_ERROR_NONE; metadata_editor_s* _metadata = (metadata_editor_s*) metadata; - metadata_editor_retvm_if(_metadata->file == NULL, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "File loading fail"); - // Check if the file, given through metadata, exists and is opened correctly - metadata_editor_retvm_if(_metadata->file && _metadata->isOpen == false, METADATA_EDITOR_ERROR_PERMISSION_DENIED, "File does not exist or you have no rights to open it"); - metadata_editor_retvm_if(_metadata->isReadOnly, METADATA_EDITOR_ERROR_OPERATION_FAILED, "File is readonly. Unable to modify"); + 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: { -- 2.7.4