Update code to reduce Cyclomatic Complexity and DC 88/212788/2 accepted/tizen/unified/20190901.225917 submit/tizen/20190829.010946 submit/tizen/20190830.003130
authorhj kim <backto.kim@samsung.com>
Tue, 27 Aug 2019 02:01:07 +0000 (11:01 +0900)
committerhj kim <backto.kim@samsung.com>
Tue, 27 Aug 2019 06:40:43 +0000 (15:40 +0900)
Change-Id: I2d9ea5df5687c41329981c77df0aa6be0c0592c5

src/metadata_editor.cpp

index 92b73b4..be3c632 100755 (executable)
@@ -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: {