[Messaging] Fixed handling folder IDs for SMS/MMS.
authorPawel Andruszkiewicz <p.andruszkie@samsung.com>
Mon, 5 Oct 2015 12:02:50 +0000 (14:02 +0200)
committerPawel Andruszkiewicz <p.andruszkie@samsung.com>
Mon, 5 Oct 2015 12:02:50 +0000 (14:02 +0200)
[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 <p.andruszkie@samsung.com>
src/messaging/message.cc
src/messaging/message.h
src/messaging/message_email.cc
src/messaging/message_email.h
src/messaging/messaging_database_manager.cc
src/messaging/messaging_util.cc

index 129b1c7df4b91620d0026104a56fa02e95406a6f..a5711b2126cee0b1c69907b6987f18747a98be47 100755 (executable)
@@ -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) {
index 5b130a1e55c178397aca9aa03a8e3b6319a79ea8..7bccf995b25012f6ab21a5e06898be11611b0549 100755 (executable)
@@ -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;
index bbb4f0854c6448b6ec64baf71a25a08f811e0510..bd0f06cdf9c37121109403546b24ecadbd5097c3 100755 (executable)
@@ -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<std::string> &cc)
 {
     LoggerD("Entered");
index 0ca9f6a44fb8e90b041fcabc405d944e6d147b75..092834f649712d7bf5fad10de5c8abf8eacf4a99 100755 (executable)
@@ -29,6 +29,8 @@ public:
     ~MessageEmail();
 
 //overrided base class functions
+    virtual int getFolderIdForUser() const override;
+
     void setCC(std::vector<std::string> &cc);
     void setBCC(std::vector<std::string> &bcc);
     void setSubject(std::string subject);
index 8731c7f611737b8e56f852f42e61e18dd185e896..9307b1c98173c72cdc2a574b9c3811d476c2527f 100755 (executable)
@@ -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) {
index f1a7aa5ec0bdfb5c79dbeba1cc94ba31b1ddb587..af718183eeb238b11cb0b7396abdaa5ea2b1210d 100755 (executable)
@@ -582,7 +582,7 @@ picojson::value MessagingUtil::messageToJson(std::shared_ptr<Message> 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] =