From 452dfff3c3eecd63e38295ad0455b961d400d1cb Mon Sep 17 00:00:00 2001 From: Pawel Wasowski Date: Sat, 9 Feb 2019 15:30:47 +0100 Subject: [PATCH] [messaging] Refactor functions used to get email converations from DB 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 --- src/messaging/conversation_callback_data.cc | 6 +++- src/messaging/conversation_callback_data.h | 4 ++- src/messaging/email_manager.cc | 40 +++++++-------------- src/messaging/messaging_database_manager.cc | 28 ++++++++------- src/messaging/messaging_database_manager.h | 8 ++--- 5 files changed, 37 insertions(+), 49 deletions(-) diff --git a/src/messaging/conversation_callback_data.cc b/src/messaging/conversation_callback_data.cc index 32670505..eaebee40 100644 --- a/src/messaging/conversation_callback_data.cc +++ b/src/messaging/conversation_callback_data.cc @@ -55,7 +55,11 @@ void ConversationCallbackData::addConversation(std::shared_ptr> ConversationCallbackData::getConversations() +void ConversationCallbackData::setConversations(ConversationPtrVector&& conversations) { + m_conversations = conversations; +} + +ConversationPtrVector ConversationCallbackData::getConversations() const { return m_conversations; } diff --git a/src/messaging/conversation_callback_data.h b/src/messaging/conversation_callback_data.h index b8203dee..21ebeddb 100644 --- a/src/messaging/conversation_callback_data.h +++ b/src/messaging/conversation_callback_data.h @@ -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 msg); + void setConversations(ConversationPtrVector&& conversations); std::vector> getConversations() const; @@ -63,7 +65,7 @@ class ConversationCallbackData : public CallbackUserData { SortModePtr m_sort; long m_limit; long m_offset; - std::vector> m_conversations; + ConversationPtrVector m_conversations; int m_account_id; MessageType m_service_type; }; diff --git a/src/messaging/email_manager.cc b/src/messaging/email_manager.cc index 8c1207bc..04b6310a 100644 --- a/src/messaging/email_manager.cc +++ b/src/messaging/email_manager.cc @@ -1070,24 +1070,6 @@ void EmailManager::findMessages(FindMsgCallbackUserData* callback) { callback = NULL; } -PlatformResult EmailManager::FindConversationsPlatform(ConversationCallbackData* callback) { - ScopeLogger(); - - std::lock_guard lock(m_mutex); - std::vector> 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(ret.error_code()), (ret.message()).c_str()); - callback->SetError(ret); + PlatformResult result{ErrorCode::NO_ERROR}; + { + std::lock_guard lock(m_mutex); + result = MessagingDatabaseManager::getInstance().findEmailConversations(callback); + } + + if (result.IsError()) { + LoggerE("%d (%s)", static_cast(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 response; - auto messages = callback->getConversations(); - std::for_each(messages.begin(), messages.end(), - [&response](std::shared_ptr& conversation) { - response.push_back(MessagingUtil::conversationToJson(conversation)); - }); + for (ConversationPtr& conversation : callback->getConversations()) { + response.push_back(MessagingUtil::conversationToJson(conversation)); + } callback->SetSuccess(picojson::value(response)); } diff --git a/src/messaging/messaging_database_manager.cc b/src/messaging/messaging_database_manager.cc index 25a6bba1..4bfd947c 100644 --- a/src/messaging/messaging_database_manager.cc +++ b/src/messaging/messaging_database_manager.cc @@ -727,24 +727,24 @@ template using SharedPtrVector = std::vector>; template -void filterVector(const AbstractFilter& filter, SharedPtrVector* vec) { +void filterVector(const AbstractFilterPtr& filter, SharedPtrVector* vec) { ScopeLogger(); auto toBeFilteredOut = [&filter](const std::shared_ptr& 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 -void sortVector(const SortMode& sortMode, SharedPtrVector* vec) { +void sortVector(const SortModePtr& sortMode, SharedPtrVector* 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); } diff --git a/src/messaging/messaging_database_manager.h b/src/messaging/messaging_database_manager.h index 5ab55738..f88537e7 100644 --- a/src/messaging/messaging_database_manager.h +++ b/src/messaging/messaging_database_manager.h @@ -85,8 +85,8 @@ class MessagingDatabaseManager { std::pair* result); common::PlatformResult findShortMessageConversations(ConversationCallbackData* callback, std::vector* 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; }; -- 2.34.1