From f2b4a3ed0b873855c5281b177277a8d110ab522a Mon Sep 17 00:00:00 2001 From: Michal Michalski Date: Mon, 2 Dec 2019 17:34:10 +0100 Subject: [PATCH] [messaging] MessageFolderType as string. + Remove getType() and getId() methods from MessageFolder. + Replace MessageFolderType enum with strings everywhere. + Remove unused messageFolderTypeToString() function. + Add MessageFolderTypeStr string array of folder type values. + Align code using old folder type implementation. + Inline MessageFolder::toJSON() calls and remove this method. [Verification] tct-messaging-*-tizen-tests 100% pass. Signed-off-by: Michal Michalski Change-Id: I96b8a76508c9e6b1a807e773ab08dca3da851585 --- src/messaging/DBus/MessageProxy.cpp | 3 +- src/messaging/email_manager.cc | 3 +- src/messaging/folders_change_callback.cc | 4 +- src/messaging/message_folder.cc | 86 +++++++--------------- src/messaging/message_folder.h | 13 +--- src/messaging/message_storage_email.cc | 2 +- src/messaging/message_storage_short_msg.cc | 12 ++- 7 files changed, 41 insertions(+), 82 deletions(-) diff --git a/src/messaging/DBus/MessageProxy.cpp b/src/messaging/DBus/MessageProxy.cpp index 91d01f42..a52bd628 100644 --- a/src/messaging/DBus/MessageProxy.cpp +++ b/src/messaging/DBus/MessageProxy.cpp @@ -261,7 +261,8 @@ PlatformResult MessageProxy::handleMailboxEvent(int account_id, int mailbox_id, "", // content_type "", // name "", // path - MessageFolderType::MESSAGE_FOLDER_TYPE_NOTSTANDARD, false)); + "", // type + false)); } else { email_mailbox_t* mail_box = NULL; int ntv_ret = email_get_mailbox_by_mailbox_id(mailbox_id, &mail_box); diff --git a/src/messaging/email_manager.cc b/src/messaging/email_manager.cc index a5382b89..167ed1fd 100644 --- a/src/messaging/email_manager.cc +++ b/src/messaging/email_manager.cc @@ -751,7 +751,8 @@ void EmailManager::syncFolder(SyncFolderCallbackData* callback) { email_mailbox_t* mailbox = NULL; - const std::string folder_id_str = callback->getMessageFolder()->getId(); + const std::string folder_id_str = + callback->getMessageFolder()->attributes.at("id").get(); int folder_id = 0; std::istringstream(folder_id_str) >> folder_id; diff --git a/src/messaging/folders_change_callback.cc b/src/messaging/folders_change_callback.cc index 0c4dd0b9..7db98676 100644 --- a/src/messaging/folders_change_callback.cc +++ b/src/messaging/folders_change_callback.cc @@ -53,7 +53,9 @@ void FoldersChangeCallback::Handler(const FolderPtrVector& folders, const char* } picojson::array array; - auto each = [&array](std::shared_ptr f) -> void { array.push_back(f->toJSON()); }; + auto each = [&array](std::shared_ptr f) -> void { + array.push_back(picojson::value(f->attributes)); + }; for_each(filtered.begin(), filtered.end(), each); LoggerD("Calling:%s with:%zu added folders", action, filtered.size()); diff --git a/src/messaging/message_folder.cc b/src/messaging/message_folder.cc index 09eb68d9..88c5783a 100644 --- a/src/messaging/message_folder.cc +++ b/src/messaging/message_folder.cc @@ -23,6 +23,10 @@ namespace messaging { using namespace tizen; +const char* MessageFolderTypeStr[] = { + "INBOX", "OUTBOX", "DRAFTS", "SENTBOX", +}; + namespace { const char* MESSAGE_FOLDER_ATTRIBUTE_ID = "id"; @@ -34,50 +38,28 @@ const char* MESSAGE_FOLDER_ATTRIBUTE_PATH = "path"; const char* MESSAGE_FOLDER_ATTRIBUTE_TYPE = "type"; const char* MESSAGE_FOLDER_ATTRIBUTE_SYNCHRONIZABLE = "synchronizable"; -const std::string FOLDER_TYPE_INBOX = "INBOX"; -const std::string FOLDER_TYPE_OUTBOX = "OUTBOX"; -const std::string FOLDER_TYPE_DRAFTS = "DRAFTS"; -const std::string FOLDER_TYPE_SENTBOX = "SENTBOX"; - -MessageFolderType convertPlatformFolderType(email_mailbox_type_e folderType) { +std::string convertPlatformFolderType(email_mailbox_type_e folderType) { ScopeLogger(); switch (folderType) { - case email_mailbox_type_e::EMAIL_MAILBOX_TYPE_INBOX: - return MessageFolderType::MESSAGE_FOLDER_TYPE_INBOX; - case email_mailbox_type_e::EMAIL_MAILBOX_TYPE_SENTBOX: - return MessageFolderType::MESSAGE_FOLDER_TYPE_SENTBOX; - case email_mailbox_type_e::EMAIL_MAILBOX_TYPE_DRAFT: - return MessageFolderType::MESSAGE_FOLDER_TYPE_DRAFTS; - case email_mailbox_type_e::EMAIL_MAILBOX_TYPE_OUTBOX: - return MessageFolderType::MESSAGE_FOLDER_TYPE_OUTBOX; - case email_mailbox_type_e::EMAIL_MAILBOX_TYPE_ALL_EMAILS: - return MessageFolderType::MESSAGE_FOLDER_TYPE_NOTSTANDARD; - default: - return MessageFolderType::MESSAGE_FOLDER_TYPE_NOTSTANDARD; - } -} -} // namespace - -std::string messageFolderTypeToString(MessageFolderType type) { - ScopeLogger(); - switch (type) { - case MessageFolderType::MESSAGE_FOLDER_TYPE_INBOX: - return FOLDER_TYPE_INBOX; - case MessageFolderType::MESSAGE_FOLDER_TYPE_OUTBOX: - return FOLDER_TYPE_OUTBOX; - case MessageFolderType::MESSAGE_FOLDER_TYPE_DRAFTS: - return FOLDER_TYPE_DRAFTS; - case MessageFolderType::MESSAGE_FOLDER_TYPE_SENTBOX: - return FOLDER_TYPE_SENTBOX; + case EMAIL_MAILBOX_TYPE_INBOX: + return MessageFolderTypeStr[MESSAGE_FOLDER_TYPE_INBOX]; + case EMAIL_MAILBOX_TYPE_SENTBOX: + return MessageFolderTypeStr[MESSAGE_FOLDER_TYPE_SENTBOX]; + case EMAIL_MAILBOX_TYPE_DRAFT: + return MessageFolderTypeStr[MESSAGE_FOLDER_TYPE_DRAFTS]; + case EMAIL_MAILBOX_TYPE_OUTBOX: + return MessageFolderTypeStr[MESSAGE_FOLDER_TYPE_OUTBOX]; default: return ""; } } +} // namespace + MessageFolder::MessageFolder(const std::string& id, const std::string& parent_id, const std::string& service_id, const std::string& content_type, const std::string& name, const std::string& path, - MessageFolderType type, bool synchronizable) { + const std::string& type, bool synchronizable) { ScopeLogger(); attributes[MESSAGE_FOLDER_ATTRIBUTE_ID] = picojson::value(id); attributes[MESSAGE_FOLDER_ATTRIBUTE_PARENT_ID] = picojson::value(parent_id); @@ -85,7 +67,7 @@ MessageFolder::MessageFolder(const std::string& id, const std::string& parent_id attributes[MESSAGE_FOLDER_ATTRIBUTE_CONTENT_TYPE] = picojson::value(content_type); attributes[MESSAGE_FOLDER_ATTRIBUTE_NAME] = picojson::value(name); attributes[MESSAGE_FOLDER_ATTRIBUTE_PATH] = picojson::value(path); - attributes[MESSAGE_FOLDER_ATTRIBUTE_TYPE] = picojson::value(static_cast(type)); + attributes[MESSAGE_FOLDER_ATTRIBUTE_TYPE] = picojson::value(type); attributes[MESSAGE_FOLDER_ATTRIBUTE_SYNCHRONIZABLE] = picojson::value(synchronizable); } @@ -101,32 +83,16 @@ MessageFolder::MessageFolder(const picojson::value& json) { attributes = json.get(); } -std::string MessageFolder::getId() const { - return attributes.at(MESSAGE_FOLDER_ATTRIBUTE_ID).get(); -} - -MessageFolderType MessageFolder::getType() const { - return static_cast( - static_cast(attributes.at(MESSAGE_FOLDER_ATTRIBUTE_TYPE).get())); -} - -picojson::value MessageFolder::toJSON() const { - picojson::value json(attributes); - json.get()[MESSAGE_FOLDER_ATTRIBUTE_TYPE] = - picojson::value(messageFolderTypeToString(getType())); - return json; -} - bool MessageFolder::isMatchingAttribute(const std::string& attribute_name, const common::AttributeMatchFlag match_flag, AnyPtr match_value) const { ScopeLogger(); - LoggerD("attribute_name: (%s), match_flag: (%s), match_value: (%s)", attribute_name.c_str(), + LoggerD("Attribute: (%s), Operator: (%s), Value: (%s)", attribute_name.c_str(), common::AttributeMatchFlagToString(match_flag).c_str(), match_value->toString().c_str()); const auto attr = attributes.find(attribute_name); if (attr == attributes.end()) { - LoggerD("attribute: %s is NOT SUPPORTED", attribute_name.c_str()); + LoggerD("Attribute does not exist."); return false; } @@ -134,10 +100,6 @@ bool MessageFolder::isMatchingAttribute(const std::string& attribute_name, return true; } - if (MESSAGE_FOLDER_ATTRIBUTE_TYPE == attribute_name) { - return FilterUtils::isMatching(*match_value, messageFolderTypeToString(getType()), match_flag); - } - return FilterUtils::isMatching(*match_value, attr->second, match_flag); } @@ -159,12 +121,14 @@ FolderPtrVector filterFolders(tizen::AbstractFilterPtr filter, FolderPtrVector filtered_folders; for (const auto& fp : source_folders) { if (filter->isMatching(fp.get())) { - LoggerD("folder id:%s, folder name: %s, match: %s", fp->getId().c_str(), - fp->attributes.at(MESSAGE_FOLDER_ATTRIBUTE_NAME).get().c_str(), "true"); + LoggerD("folder id: %s, folder name: %s, match: yes", + fp->attributes.at("id").get().c_str(), + fp->attributes.at(MESSAGE_FOLDER_ATTRIBUTE_NAME).get().c_str()); filtered_folders.push_back(fp); } else { - LoggerD("folder id:%s, folder name: %s, match: %s", fp->getId().c_str(), - fp->attributes.at(MESSAGE_FOLDER_ATTRIBUTE_NAME).get().c_str(), "false"); + LoggerD("folder id: %s, folder name: %s, match: no", + fp->attributes.at("id").get().c_str(), + fp->attributes.at(MESSAGE_FOLDER_ATTRIBUTE_NAME).get().c_str()); } } diff --git a/src/messaging/message_folder.h b/src/messaging/message_folder.h index 9e819019..ede4914a 100644 --- a/src/messaging/message_folder.h +++ b/src/messaging/message_folder.h @@ -30,26 +30,23 @@ namespace extension { namespace messaging { enum MessageFolderType { - MESSAGE_FOLDER_TYPE_INBOX = 1, + MESSAGE_FOLDER_TYPE_INBOX, MESSAGE_FOLDER_TYPE_OUTBOX, MESSAGE_FOLDER_TYPE_DRAFTS, MESSAGE_FOLDER_TYPE_SENTBOX, MESSAGE_FOLDER_TYPE_NOTSTANDARD }; +extern const char* MessageFolderTypeStr[MESSAGE_FOLDER_TYPE_NOTSTANDARD]; class MessageFolder : public tizen::FilterableObject { public: MessageFolder(const std::string& id, const std::string& parent_id, const std::string& service_id, const std::string& content_type, const std::string& name, const std::string& path, - MessageFolderType type, bool synchronizable); + const std::string& type, bool synchronizable); MessageFolder(email_mailbox_t mailbox); MessageFolder(const picojson::value& json); - std::string getId() const; - MessageFolderType getType() const; - picojson::value toJSON() const; - virtual bool isMatchingAttribute(const std::string& attribute_name, const common::AttributeMatchFlag match_flag, tizen::AnyPtr match_value) const override; @@ -60,15 +57,11 @@ class MessageFolder : public tizen::FilterableObject { picojson::object attributes; }; -std::string messageFolderTypeToString(MessageFolderType); - typedef std::vector> FolderPtrVector; - FolderPtrVector filterFolders(tizen::AbstractFilterPtr filter, const FolderPtrVector& source_folders); class MessagingInstance; - struct FindFoldersTaskParams { int account_id, callback_id; std::string message_type; diff --git a/src/messaging/message_storage_email.cc b/src/messaging/message_storage_email.cc index 49be8234..72dca01a 100644 --- a/src/messaging/message_storage_email.cc +++ b/src/messaging/message_storage_email.cc @@ -231,7 +231,7 @@ static gboolean FindFoldersGlibTask(void* data) { auto& folders_list = json.get(); for (const auto& folder : folders) { if (params->filter->isMatching(&folder)) { - folders_list.push_back(folder.toJSON()); + folders_list.push_back(picojson::value(folder.attributes)); } } diff --git a/src/messaging/message_storage_short_msg.cc b/src/messaging/message_storage_short_msg.cc index c1dd350e..5bce2028 100644 --- a/src/messaging/message_storage_short_msg.cc +++ b/src/messaging/message_storage_short_msg.cc @@ -209,17 +209,15 @@ static gboolean findFoldersCB(void* data) { std::unique_ptr params(static_cast(data)); std::string content_type = params->message_type; - std::shared_ptr folder; picojson::object response; picojson::array array; - for (int i = MESSAGE_FOLDER_TYPE_INBOX; i < MESSAGE_FOLDER_TYPE_NOTSTANDARD; ++i) { - MessageFolder folder(std::to_string(i), "", std::to_string(params->account_id), content_type, - messageFolderTypeToString(static_cast(i)), "", - static_cast(i), false); - + for (std::string type : MessageFolderTypeStr) { + auto id = std::to_string(array.size() + 1); + auto service_id = std::to_string(params->account_id); + MessageFolder folder(id, "", service_id, content_type, type, "", type, false); if (params->filter->isMatching(&folder)) { - array.push_back(folder.toJSON()); + array.push_back(picojson::value(folder.attributes)); } } -- 2.34.1