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<std::string> SanitizeUtf8StringVector(const std::vector<std::string>& string_vector) {
- ScopeLogger();
-
- std::vector<std::string> sanitized_strings;
- for (const auto& string : string_vector) {
- sanitized_strings.push_back(SanitizeUtf8String(string));
- }
-
- return sanitized_strings;
-}
-
-std::vector<std::string> 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();
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;
}
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) {
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 = {
{
},
{
/* 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
// 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<std::string> MessagingUtil::extractEmailAddresses(
const std::vector<std::string>& addresses) {
ScopeLogger();
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);
}