From ac5053c3ecdf1ae6ac77b281f41a26c295ba0281 Mon Sep 17 00:00:00 2001 From: Pawel Andruszkiewicz Date: Mon, 5 Oct 2015 14:02:50 +0200 Subject: [PATCH] [Messaging] Fixed handling folder IDs for SMS/MMS. [Verification] TCT pass rate (r47): 100% (184/184/0/0/0) (SMS) 100% (123/123/0/0/0) (MMS) Change-Id: I858a204fd0125d81aed56032453ef379ae1252e8 Signed-off-by: Pawel Andruszkiewicz --- src/messaging/message.cc | 37 ++++++++++++++++++--- src/messaging/message.h | 1 + src/messaging/message_email.cc | 9 ++++- src/messaging/message_email.h | 2 ++ src/messaging/messaging_database_manager.cc | 30 +++++++++++++++++ src/messaging/messaging_util.cc | 2 +- 6 files changed, 74 insertions(+), 7 deletions(-) diff --git a/src/messaging/message.cc b/src/messaging/message.cc index 129b1c7d..a5711b21 100755 --- a/src/messaging/message.cc +++ b/src/messaging/message.cc @@ -77,10 +77,37 @@ int Message::getConversationId() const return m_conversation_id; } -int Message::getFolderId() const -{ - // TODO: folderId is supported different way in SMS/MMS and email - return m_folder_id; +int Message::getFolderId() const { + LoggerD("Entered"); + return m_folder_id; +} + +int Message::getFolderIdForUser() const { + LoggerD("Entered"); + // WIDL states: + // For SMS and MMS, folderId can be one of these values: + // - INBOX = 1, + // - OUTBOX = 2, + // - DRAFTS = 3, + // - SENTBOX = 4 + + switch (m_folder_id) { + case MSG_INBOX_ID: + return 1; + + case MSG_OUTBOX_ID: + return 2; + + case MSG_DRAFT_ID: + return 3; + + case MSG_SENTBOX_ID: + return 4; + + default: + LoggerE("Unexpected folder id: %d", m_folder_id); + return -1; + } } MessageType Message::getType() const @@ -1685,7 +1712,7 @@ bool Message::isMatchingAttribute(const std::string& attribute_name, } } else if (FOLDER_ID == attribute_name) { - return FilterUtils::isStringMatching(key, std::to_string(getFolderId()), + return FilterUtils::isStringMatching(key, std::to_string(getFolderIdForUser()), match_flag); } else if (TYPE == attribute_name) { diff --git a/src/messaging/message.h b/src/messaging/message.h index 5b130a1e..7bccf995 100755 --- a/src/messaging/message.h +++ b/src/messaging/message.h @@ -63,6 +63,7 @@ public: int getOldId() const; int getConversationId() const; int getFolderId() const; + virtual int getFolderIdForUser() const; MessageType getType() const; std::string getTypeString() const; time_t getTimestamp() const; diff --git a/src/messaging/message_email.cc b/src/messaging/message_email.cc index bbb4f085..bd0f06cd 100755 --- a/src/messaging/message_email.cc +++ b/src/messaging/message_email.cc @@ -36,7 +36,14 @@ MessageEmail::~MessageEmail() LoggerD("MessageEmail destructor."); } -// *** overrided methods +// *** overridden methods + +int MessageEmail::getFolderIdForUser() const { + LoggerD("Entered"); + // in case of e-mails we're using platform IDs directly + return m_folder_id; +} + void MessageEmail::setCC(std::vector &cc) { LoggerD("Entered"); diff --git a/src/messaging/message_email.h b/src/messaging/message_email.h index 0ca9f6a4..092834f6 100755 --- a/src/messaging/message_email.h +++ b/src/messaging/message_email.h @@ -29,6 +29,8 @@ public: ~MessageEmail(); //overrided base class functions + virtual int getFolderIdForUser() const override; + void setCC(std::vector &cc); void setBCC(std::vector &bcc); void setSubject(std::string subject); diff --git a/src/messaging/messaging_database_manager.cc b/src/messaging/messaging_database_manager.cc index 8731c7f6..9307b1c9 100755 --- a/src/messaging/messaging_database_manager.cc +++ b/src/messaging/messaging_database_manager.cc @@ -472,6 +472,36 @@ PlatformResult MessagingDatabaseManager::getAttributeFilterQuery(AbstractFilterP } else if (ENDSWITH == match_flag) { match_value = "%<%" + match_value + ">%"; } + } else if ("folderId" == attribute_name && + (MessageType::SMS == msgType || MessageType::MMS == msgType)) { + LoggerD("Non-email folder ID"); + + // need to convert from values presented to user to _MSG_FOLDER_ID_E + auto folder_id = attr_filter->getMatchValue()->toLong(); + switch (folder_id) { + case 1: + folder_id = MSG_INBOX_ID; + break; + + case 2: + folder_id = MSG_OUTBOX_ID; + break; + + case 3: + folder_id = MSG_DRAFT_ID; + break; + + case 4: + folder_id = MSG_SENTBOX_ID; + break; + + default: + LoggerE("Unexpected folder ID: %d", folder_id); + folder_id = -1; + break; + } + + match_value = std::to_string(folder_id); } switch (match_flag) { diff --git a/src/messaging/messaging_util.cc b/src/messaging/messaging_util.cc index f1a7aa5e..af718183 100755 --- a/src/messaging/messaging_util.cc +++ b/src/messaging/messaging_util.cc @@ -582,7 +582,7 @@ picojson::value MessagingUtil::messageToJson(std::shared_ptr message) : picojson::value(); o[MESSAGE_ATTRIBUTE_FOLDER_ID] = message->is_folder_id_set() - ? picojson::value(std::to_string(message->getFolderId())) + ? picojson::value(std::to_string(message->getFolderIdForUser())) : picojson::value(); o[MESSAGE_ATTRIBUTE_TYPE] = picojson::value(message->getTypeString()); o[MESSAGE_ATTRIBUTE_TIMESTAMP] = -- 2.34.1