[messaging] Refactor functions used to get email converations from DB 37/199337/8
authorPawel Wasowski <p.wasowski2@samsung.com>
Sat, 9 Feb 2019 14:30:47 +0000 (15:30 +0100)
committerPawel Wasowski <p.wasowski2@samsung.com>
Wed, 6 Mar 2019 12:10:35 +0000 (12:10 +0000)
Implementation of the functions has been simplified.

[Verification] tct-messaging-email-tests pass rate did not
change after the change was applied

Change-Id: Id1e28b4c94b502d801dc5674a3fa7cf5f2844e16
Signed-off-by: Pawel Wasowski <p.wasowski2@samsung.com>
src/messaging/conversation_callback_data.cc
src/messaging/conversation_callback_data.h
src/messaging/email_manager.cc
src/messaging/messaging_database_manager.cc
src/messaging/messaging_database_manager.h

index 3267050..eaebee4 100644 (file)
@@ -55,7 +55,11 @@ void ConversationCallbackData::addConversation(std::shared_ptr<MessageConversati
   m_conversations.push_back(msg);
 }
 
-std::vector<std::shared_ptr<MessageConversation>> ConversationCallbackData::getConversations()
+void ConversationCallbackData::setConversations(ConversationPtrVector&& conversations) {
+  m_conversations = conversations;
+}
+
+ConversationPtrVector ConversationCallbackData::getConversations()
     const {
   return m_conversations;
 }
index b8203de..21ebedd 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "MsgCommon/AttributeFilter.h"
 #include "MsgCommon/SortMode.h"
+#include "message_conversation.h"
 #include "messaging/callback_user_data.h"
 #include "messaging_util.h"
 
@@ -45,6 +46,7 @@ class ConversationCallbackData : public CallbackUserData {
   void setLimit(long limit);
   void setOffset(long offset);
   void addConversation(std::shared_ptr<MessageConversation> msg);
+  void setConversations(ConversationPtrVector&& conversations);
 
   std::vector<std::shared_ptr<MessageConversation>> getConversations() const;
 
@@ -63,7 +65,7 @@ class ConversationCallbackData : public CallbackUserData {
   SortModePtr m_sort;
   long m_limit;
   long m_offset;
-  std::vector<std::shared_ptr<MessageConversation>> m_conversations;
+  ConversationPtrVector m_conversations;
   int m_account_id;
   MessageType m_service_type;
 };
index 8c1207b..04b6310 100644 (file)
@@ -1070,24 +1070,6 @@ void EmailManager::findMessages(FindMsgCallbackUserData* callback) {
   callback = NULL;
 }
 
-PlatformResult EmailManager::FindConversationsPlatform(ConversationCallbackData* callback) {
-  ScopeLogger();
-
-  std::lock_guard<std::mutex> lock(m_mutex);
-  std::vector<std::shared_ptr<MessageConversation>> conversationsInfo;
-  PlatformResult ret =
-      MessagingDatabaseManager::getInstance().findEmailConversations(*callback, &conversationsInfo);
-  if (ret.IsError()) return ret;
-
-  LoggerD("Found %zu conversations", conversationsInfo.size());
-
-  for (const auto& conversation : conversationsInfo) {
-    callback->addConversation(conversation);
-  }
-
-  return PlatformResult(ErrorCode::NO_ERROR);
-}
-
 void EmailManager::findConversations(ConversationCallbackData* callback) {
   ScopeLogger();
 
@@ -1096,13 +1078,17 @@ void EmailManager::findConversations(ConversationCallbackData* callback) {
     return;
   }
 
-  PlatformResult ret = FindConversationsPlatform(callback);
-  if (ret.IsError()) {
-    LoggerE("%d (%s)", static_cast<int>(ret.error_code()), (ret.message()).c_str());
-    callback->SetError(ret);
+  PlatformResult result{ErrorCode::NO_ERROR};
+  {
+    std::lock_guard<std::mutex> lock(m_mutex);
+    result = MessagingDatabaseManager::getInstance().findEmailConversations(callback);
+  }
+
+  if (result.IsError()) {
+    LoggerE("%d (%s)", static_cast<int>(result.error_code()), (result.message()).c_str());
+    callback->SetError(result);
   }
 
-  // Complete task
   LoggerD("callback: %p error:%d conversations.size()=%zu", callback, callback->IsError(),
           callback->getConversations().size());
 
@@ -1112,11 +1098,9 @@ void EmailManager::findConversations(ConversationCallbackData* callback) {
     LoggerD("Calling success callback");
 
     std::vector<picojson::value> response;
-    auto messages = callback->getConversations();
-    std::for_each(messages.begin(), messages.end(),
-                  [&response](std::shared_ptr<MessageConversation>& conversation) {
-                    response.push_back(MessagingUtil::conversationToJson(conversation));
-                  });
+    for (ConversationPtr& conversation : callback->getConversations()) {
+      response.push_back(MessagingUtil::conversationToJson(conversation));
+    }
 
     callback->SetSuccess(picojson::value(response));
   }
index 25a6bba..4bfd947 100644 (file)
@@ -727,24 +727,24 @@ template <typename T>
 using SharedPtrVector = std::vector<std::shared_ptr<T>>;
 
 template <typename T>
-void filterVector(const AbstractFilter& filter, SharedPtrVector<T>* vec) {
+void filterVector(const AbstractFilterPtr& filter, SharedPtrVector<T>* vec) {
   ScopeLogger();
 
   auto toBeFilteredOut = [&filter](const std::shared_ptr<T>& object_ptr) {
-    return !filter.isMatching(object_ptr.get());
+    return !filter->isMatching(object_ptr.get());
   };
 
   vec->erase(std::remove_if(vec->begin(), vec->end(), toBeFilteredOut), vec->end());
 }
 
 template <typename T>
-void sortVector(const SortMode& sortMode, SharedPtrVector<T>* vec) {
+void sortVector(const SortModePtr& sortMode, SharedPtrVector<T>* vec) {
   ScopeLogger();
 
-  const std::string attribute = sortMode.getAttributeName();
+  const std::string attribute = sortMode->getAttributeName();
   auto comparator = T::getComparator(attribute);
 
-  if (SortModeOrder::ASC == sortMode.getOrder()) {
+  if (SortModeOrder::ASC == sortMode->getOrder()) {
     std::sort(vec->begin(), vec->end(), comparator);
   } else {
     std::sort(vec->rbegin(), vec->rend(), comparator);
@@ -945,9 +945,8 @@ void convertToMessageConversations(const email_mail_data_t* mailData, int mailDa
   }
 }
 
-}  // namespace
 
-PlatformResult MessagingDatabaseManager::retrieveEmailThreadsFromDatabase(
+PlatformResult retrieveEmailThreadsFromDatabase(
     const ConversationCallbackData& findEmailConversationsData,
     ConversationPtrVector* conversations) {
   ScopeLogger();
@@ -996,22 +995,25 @@ PlatformResult MessagingDatabaseManager::retrieveEmailThreadsFromDatabase(
   return PlatformResult{ErrorCode::NO_ERROR};
 }
 
+}  // namespace
+
 PlatformResult MessagingDatabaseManager::findEmailConversations(
-    const ConversationCallbackData& findEmailConversationsData,
-    ConversationPtrVector* conversations) {
+    ConversationCallbackData* findEmailConversationsData) {
   ScopeLogger();
 
-  auto result = retrieveEmailThreadsFromDatabase(findEmailConversationsData, conversations);
+  ConversationPtrVector conversations;
+  auto result = retrieveEmailThreadsFromDatabase(*findEmailConversationsData, &conversations);
   if (result.IsError()) {
     return result;
   }
 
-  filterVector(*findEmailConversationsData.getFilter(), conversations);
+  filterVector(findEmailConversationsData->getFilter(), &conversations);
 
-  if (findEmailConversationsData.getSortMode()) {
-    sortVector(*findEmailConversationsData.getSortMode(), conversations);
+  if (findEmailConversationsData->getSortMode()) {
+    sortVector(findEmailConversationsData->getSortMode(), &conversations);
   }
 
+  findEmailConversationsData->setConversations(std::move(conversations));
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
index 5ab5573..f88537e 100644 (file)
@@ -85,8 +85,8 @@ class MessagingDatabaseManager {
                                     std::pair<int, email_mail_data_t*>* result);
   common::PlatformResult findShortMessageConversations(ConversationCallbackData* callback,
                                                        std::vector<int>* result);
-  common::PlatformResult findEmailConversations(const ConversationCallbackData& callback,
-                                                ConversationPtrVector* conversations);
+  common::PlatformResult findEmailConversations(
+      ConversationCallbackData* findEmailConversationsData);
 
  private:
   MessagingDatabaseManager();
@@ -112,13 +112,9 @@ class MessagingDatabaseManager {
   common::PlatformResult addFilters(tizen::AbstractFilterPtr filter, tizen::SortModePtr sortMode,
                                     long limit, long offset, AttributeInfoMap& attributeMap,
                                     MessageType msgType, std::string* result);
-  common::PlatformResult retrieveEmailThreadsFromDatabase(
-      const ConversationCallbackData& findEmailConversationsData,
-      ConversationPtrVector* conversations);
 
   AttributeInfoMap m_msg_attr_map;
   AttributeInfoMap m_email_attr_map;
-
   AttributeInfoMap m_msg_conv_attr_map;
 };