[messaging] MessageFolderType as string. 62/219162/6
authorMichal Michalski <m.michalski2@partner.samsung.com>
Mon, 2 Dec 2019 16:34:10 +0000 (17:34 +0100)
committerMichal Michalski <m.michalski2@partner.samsung.com>
Fri, 6 Dec 2019 08:38:06 +0000 (09:38 +0100)
+ 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 <m.michalski2@partner.samsung.com>
Change-Id: I96b8a76508c9e6b1a807e773ab08dca3da851585

src/messaging/DBus/MessageProxy.cpp
src/messaging/email_manager.cc
src/messaging/folders_change_callback.cc
src/messaging/message_folder.cc
src/messaging/message_folder.h
src/messaging/message_storage_email.cc
src/messaging/message_storage_short_msg.cc

index 91d01f4..a52bd62 100644 (file)
@@ -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);
index a5382b8..167ed1f 100644 (file)
@@ -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<std::string>();
   int folder_id = 0;
   std::istringstream(folder_id_str) >> folder_id;
 
index 0c4dd0b..7db9867 100644 (file)
@@ -53,7 +53,9 @@ void FoldersChangeCallback::Handler(const FolderPtrVector& folders, const char*
   }
 
   picojson::array array;
-  auto each = [&array](std::shared_ptr<MessageFolder> f) -> void { array.push_back(f->toJSON()); };
+  auto each = [&array](std::shared_ptr<MessageFolder> 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());
index 09eb68d..88c5783 100644 (file)
@@ -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<double>(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<picojson::object>();
 }
 
-std::string MessageFolder::getId() const {
-  return attributes.at(MESSAGE_FOLDER_ATTRIBUTE_ID).get<std::string>();
-}
-
-MessageFolderType MessageFolder::getType() const {
-  return static_cast<MessageFolderType>(
-      static_cast<int>(attributes.at(MESSAGE_FOLDER_ATTRIBUTE_TYPE).get<double>()));
-}
-
-picojson::value MessageFolder::toJSON() const {
-  picojson::value json(attributes);
-  json.get<picojson::object>()[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<std::string>().c_str(), "true");
+      LoggerD("folder id: %s, folder name: %s, match: yes",
+              fp->attributes.at("id").get<std::string>().c_str(),
+              fp->attributes.at(MESSAGE_FOLDER_ATTRIBUTE_NAME).get<std::string>().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<std::string>().c_str(), "false");
+      LoggerD("folder id: %s, folder name: %s, match: no",
+              fp->attributes.at("id").get<std::string>().c_str(),
+              fp->attributes.at(MESSAGE_FOLDER_ATTRIBUTE_NAME).get<std::string>().c_str());
     }
   }
 
index 9e81901..ede4914 100644 (file)
@@ -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<std::shared_ptr<MessageFolder>> FolderPtrVector;
-
 FolderPtrVector filterFolders(tizen::AbstractFilterPtr filter,
                               const FolderPtrVector& source_folders);
 
 class MessagingInstance;
-
 struct FindFoldersTaskParams {
   int account_id, callback_id;
   std::string message_type;
index 49be823..72dca01 100644 (file)
@@ -231,7 +231,7 @@ static gboolean FindFoldersGlibTask(void* data) {
   auto& folders_list = json.get<picojson::array>();
   for (const auto& folder : folders) {
     if (params->filter->isMatching(&folder)) {
-      folders_list.push_back(folder.toJSON());
+      folders_list.push_back(picojson::value(folder.attributes));
     }
   }
 
index c1dd350..5bce202 100644 (file)
@@ -209,17 +209,15 @@ static gboolean findFoldersCB(void* data) {
   std::unique_ptr<FindFoldersTaskParams> params(static_cast<FindFoldersTaskParams*>(data));
 
   std::string content_type = params->message_type;
-  std::shared_ptr<MessageFolder> 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<MessageFolderType>(i)), "",
-                         static_cast<MessageFolderType>(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));
     }
   }