From: Pawel Wasowski
Date: Fri, 19 Oct 2018 10:03:02 +0000 (+0200)
Subject: [Messaging] Refactor MessageConversation related code
X-Git-Tag: submit/tizen/20181023.123309~4
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=75b4ba2724b511382fc797cd264d3c3982dd6001;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[Messaging] Refactor MessageConversation related code
Refactoring was requested to get rid of duplicated and unnecessary
code.
[Verification] TCT pass rate: 100%
Change-Id: Iee2eacf50ca89ea60e89b283d3aac24111cfd5e5
Signed-off-by: Pawel Wasowski
---
diff --git a/src/messaging/message.cc b/src/messaging/message.cc
index 21681995..305985da 100644
--- a/src/messaging/message.cc
+++ b/src/messaging/message.cc
@@ -1520,6 +1520,11 @@ std::vector Message::split(const std::string& input, char delimiter
std::vector Message::getEmailRecipientsFromStruct(const char* recipients) {
ScopeLogger();
+
+ if (!recipients) {
+ return {};
+ }
+
std::vector tmp = Message::split(recipients, ';');
for (std::vector::iterator it = tmp.begin(); it != tmp.end(); ++it) {
*it = MessagingUtil::ltrim(*it);
diff --git a/src/messaging/message_conversation.cc b/src/messaging/message_conversation.cc
index 21d3798d..168ebaf1 100644
--- a/src/messaging/message_conversation.cc
+++ b/src/messaging/message_conversation.cc
@@ -43,77 +43,19 @@ MessageConversation::MessageConversation()
ScopeLogger("Message Conversation constructor.");
}
-namespace {
-
-std::string SanitizeUtf8String(const std::string& input) {
- ScopeLogger();
-
- std::string result = input;
- const gchar* end = nullptr;
-
- while (FALSE == g_utf8_validate(result.c_str(), -1, &end)) {
- result = result.substr(0, end - result.c_str());
- }
-
- return result;
-}
-
-std::vector SanitizeUtf8StringVector(const std::vector& string_vector) {
- ScopeLogger();
-
- std::vector sanitized_strings;
- for (const auto& string : string_vector) {
- sanitized_strings.push_back(SanitizeUtf8String(string));
- }
-
- return sanitized_strings;
-}
-
-std::vector GetSanitizedEmailRecipientsFromCString(const char* recipients_c_string) {
- ScopeLogger();
-
- if (!recipients_c_string) {
- return {};
- }
-
- return SanitizeUtf8StringVector(Message::getEmailRecipientsFromStruct(recipients_c_string));
-}
-
-std::string GetSanitizedStringFromCString(const char* c_string) {
- ScopeLogger();
-
- if (!c_string) {
- return "";
- }
-
- return SanitizeUtf8String(c_string);
-}
-
-std::string GetSingleSanitizedEmailAddressFromCString(const char* address_c_string) {
- ScopeLogger();
-
- if (!address_c_string) {
- return "";
- }
-
- return SanitizeUtf8String(MessagingUtil::extractSingleEmailAddress(address_c_string));
-}
-
-} // namespace
-
MessageConversation::MessageConversation(const email_mail_data_t& mail_data)
: m_conversation_id(mail_data.thread_id),
m_conversation_type(MessageType::EMAIL),
m_timestamp(mail_data.date_time),
m_count(mail_data.thread_item_count),
m_unread_messages(0),
- m_preview(GetSanitizedStringFromCString(mail_data.preview_text)),
- m_conversation_subject(GetSanitizedStringFromCString(mail_data.subject)),
+ m_preview(MessagingUtil::SanitizeUtf8String(mail_data.preview_text)),
+ m_conversation_subject(MessagingUtil::SanitizeUtf8String(mail_data.subject)),
m_is_read(mail_data.flags_seen_field),
- m_from(GetSingleSanitizedEmailAddressFromCString(mail_data.full_address_from)),
- m_to(GetSanitizedEmailRecipientsFromCString(mail_data.full_address_to)),
- m_cc(GetSanitizedEmailRecipientsFromCString(mail_data.full_address_cc)),
- m_bcc(GetSanitizedEmailRecipientsFromCString(mail_data.full_address_bcc)),
+ m_from(MessagingUtil::extractSingleEmailAddress(mail_data.full_address_from)),
+ m_to(Message::getEmailRecipientsFromStruct(mail_data.full_address_to)),
+ m_cc(Message::getEmailRecipientsFromStruct(mail_data.full_address_cc)),
+ m_bcc(Message::getEmailRecipientsFromStruct(mail_data.full_address_bcc)),
m_last_message_id(mail_data.mail_id) {
ScopeLogger();
auto result = initializeUnreadMessagesCount();
@@ -406,20 +348,12 @@ PlatformResult MessageConversation::convertEmailConversationToObject(
if (resultMail->full_address_from[0] != '\0') {
conversation->m_from =
- GetSingleSanitizedEmailAddressFromCString(resultMail->full_address_from);
+ MessagingUtil::extractSingleEmailAddress(resultMail->full_address_from);
}
- if (mailData->full_address_to != NULL) {
- conversation->m_to = GetSanitizedEmailRecipientsFromCString(mailData->full_address_to);
- }
-
- if (mailData->full_address_cc != NULL) {
- conversation->m_cc = GetSanitizedEmailRecipientsFromCString(mailData->full_address_cc);
- }
-
- if (mailData->full_address_bcc != NULL) {
- conversation->m_bcc = GetSanitizedEmailRecipientsFromCString(mailData->full_address_bcc);
- }
+ conversation->m_to = Message::getEmailRecipientsFromStruct(mailData->full_address_to);
+ conversation->m_cc = Message::getEmailRecipientsFromStruct(mailData->full_address_cc);
+ conversation->m_bcc = Message::getEmailRecipientsFromStruct(mailData->full_address_bcc);
conversation->m_last_message_id = resultMail->mail_id;
@@ -457,11 +391,11 @@ void MessageConversation::setUnreadMessages(int unread_messages) {
}
void MessageConversation::setPreview(std::string preview) {
- m_preview = SanitizeUtf8String(preview);
+ m_preview = MessagingUtil::SanitizeUtf8String(preview);
}
void MessageConversation::setSubject(std::string conversation_subject) {
- m_conversation_subject = SanitizeUtf8String(conversation_subject);
+ m_conversation_subject = MessagingUtil::SanitizeUtf8String(conversation_subject);
}
void MessageConversation::setIsRead(bool is_read) {
@@ -589,6 +523,15 @@ common::PlatformResult MessageConversation::initializeUnreadMessagesCount() {
return PlatformResult{ErrorCode::NO_ERROR};
}
+namespace {
+
+bool defaultConversationComparator(const ConversationPtr&, const ConversationPtr&) {
+ return false;
+}
+
+} // namespace
+
+// clang-format off
const MessageConversation::MessageConversationComparatorMap
MessageConversation::m_message_conversation_comparators = {
{
@@ -653,24 +596,19 @@ const MessageConversation::MessageConversationComparatorMap
},
{
/* Every record has EMAIL type - no element is "greater than" any other. */
- "type", [] (const ConversationPtr& a, const ConversationPtr& b) {
- return false;
- }
+ "type", defaultConversationComparator
}
};
+// clang-format on
MessageConversation::MessageConversationComparator MessageConversation::getComparator(
- const std::string& attribute) {
+ const std::string& attribute) {
auto comparator_it = m_message_conversation_comparators.find(attribute);
if (std::end(m_message_conversation_comparators) != comparator_it) {
return comparator_it->second;
}
- auto default_comparator = [](const ConversationPtr& a, const ConversationPtr& b) {
- return false;
- };
-
- return default_comparator;
+ return defaultConversationComparator;
}
} // messaging
diff --git a/src/messaging/messaging_database_manager.cc b/src/messaging/messaging_database_manager.cc
index 4345c68f..711252e9 100644
--- a/src/messaging/messaging_database_manager.cc
+++ b/src/messaging/messaging_database_manager.cc
@@ -20,8 +20,8 @@
#include
#include
#include
-#include
#include
+#include
#include
#include
@@ -934,6 +934,7 @@ PlatformResult MessagingDatabaseManager::retrieveEmailThreadsFromDatabase(
return result;
}
+ // clang-format off
const std::string isLastMessageInThread =
"(MAIL_ID IN "
"(SELECT MAIL_ID "
@@ -941,6 +942,7 @@ PlatformResult MessagingDatabaseManager::retrieveEmailThreadsFromDatabase(
"(SELECT MAIL_ID, MAX(DATE_TIME) "
"FROM MAIL_TBL "
"GROUP BY THREAD_ID)))";
+ // clang-format on
const std::string isServiceAccountId =
"account_id = " + std::to_string(findEmailConversationsData.getAccountId());
diff --git a/src/messaging/messaging_util.cc b/src/messaging/messaging_util.cc
index e4b17e79..5884f0d4 100644
--- a/src/messaging/messaging_util.cc
+++ b/src/messaging/messaging_util.cc
@@ -239,13 +239,23 @@ std::string MessagingUtil::extractSingleEmailAddress(const std::string& address)
// then extract email address from the inside
if (found_begin != std::string::npos && found_end != std::string::npos &&
found_begin < found_end) {
- return address.substr(found_begin + 1, found_end - found_begin - 1);
+ return SanitizeUtf8String(address.substr(found_begin + 1, found_end - found_begin - 1));
} else {
// return unmodified source string
- return address;
+ return SanitizeUtf8String(address);
}
}
+std::string MessagingUtil::extractSingleEmailAddress(const char* address) {
+ ScopeLogger();
+
+ if (!address) {
+ return {};
+ }
+
+ return extractSingleEmailAddress(std::string{address});
+}
+
std::vector MessagingUtil::extractEmailAddresses(
const std::vector& addresses) {
ScopeLogger();
@@ -1138,6 +1148,29 @@ PlatformResult MessagingUtil::jsonToMessageConversation(
return PlatformResult(ErrorCode::NO_ERROR);
}
+std::string MessagingUtil::SanitizeUtf8String(const std::string& input) {
+ ScopeLogger();
+
+ std::string result = input;
+ const gchar* end = nullptr;
+
+ while (FALSE == g_utf8_validate(result.c_str(), -1, &end)) {
+ result = result.substr(0, end - result.c_str());
+ }
+
+ return result;
+}
+
+std::string MessagingUtil::SanitizeUtf8String(const char* input) {
+ ScopeLogger();
+
+ if (!input) {
+ return {};
+ }
+
+ return SanitizeUtf8String(std::string{input});
+}
+
PostQueue::PostQueue(MessagingInstance& instance) : instance_(instance) {
ScopeLogger("this: [%p]", this);
}
diff --git a/src/messaging/messaging_util.h b/src/messaging/messaging_util.h
index 996a5b8f..a4c2cbd0 100644
--- a/src/messaging/messaging_util.h
+++ b/src/messaging/messaging_util.h
@@ -121,6 +121,7 @@ class MessagingUtil {
static std::string messageTypeToString(MessageType type);
static std::string ltrim(const std::string& input);
static std::string extractSingleEmailAddress(const std::string& address);
+ static std::string extractSingleEmailAddress(const char* address);
static std::vector extractEmailAddresses(const std::vector& addresses);
static picojson::value messageBodyToJson(std::shared_ptr body);
@@ -165,6 +166,8 @@ class MessagingUtil {
static common::PlatformResult loadFileContentToString(const std::string& file_path,
std::string* result);
static std::string messageStatusToString(MessageStatus status);
+ static std::string SanitizeUtf8String(const std::string& input);
+ static std::string SanitizeUtf8String(const char* input);
private:
static common::PlatformResult jsonFilterToAbstractFilter(const picojson::object& json,