[Messaging] loadMessageBody for sms
authorMaciek Blim <m.blim@samsung.com>
Mon, 12 Jan 2015 14:46:29 +0000 (15:46 +0100)
committerMaciek Blim <m.blim@samsung.com>
Tue, 13 Jan 2015 11:39:02 +0000 (12:39 +0100)
Change-Id: I559ac3774c76f5e6c1ac030b64fbaabd6f994f64
Signed-off-by: Maciek Blim <m.blim@samsung.com>
src/messaging/message.cc
src/messaging/message.h
src/messaging/message_service_short_msg.cc
src/messaging/messaging_api.js
src/messaging/messaging_util.cc
src/messaging/messaging_util.h

index 6bd2fa1474a3560cb432a9d8f2339863452b8764..4a774218233d7319c6d627c042b5b73029f3693a 100644 (file)
@@ -14,6 +14,7 @@
 #include "Ecore_File.h"
 #include "message_email.h"
 #include "message_sms.h"
+#include "short_message_manager.h"
 #include "messaging_util.h"
 
 namespace extension {
@@ -141,7 +142,7 @@ void Message::setId(int id)
 {
     m_id = id;
     m_id_set = true;
-//    m_body->setMessageId(m_id);
+    m_body->setMessageId(m_id);
 }
 
 void Message::setConversationId(int id)
@@ -1371,6 +1372,15 @@ Message* Message::convertPlatformShortMessageToObject(msg_struct_t msg){
     return message;
 }
 
+std::shared_ptr<Message> Message::findShortMessageById(const int id) {
+
+    msg_struct_t msg = ShortMsgManager::getInstance().getMessage(id);
+    std::shared_ptr<Message> message(
+            Message::convertPlatformShortMessageToObject(msg));
+
+   return message;
+}
+
 std::vector<std::string> Message::split(const std::string& input,
         char delimiter)
 {
index ae3d7f3e1cb044e96ec5ed18bb86cb241a6e0131..ce6269a725f4c5cee671e7784b986a8d3bd115d7 100644 (file)
@@ -129,6 +129,7 @@ public:
             int type);
     // function for filling Message attributes
     static Message* convertPlatformShortMessageToObject(msg_struct_t msg);
+    static std::shared_ptr<Message> findShortMessageById(const int id);
     static void addMMSBodyAndAttachmentsToStruct(const AttachmentPtrVector attach,
             msg_struct_t &mms_struct,
             Message* message);
index dc648babd8f78e541e573375716cca29c24bc1d6..463f27ae6e5f1754e2a444b8a84ca7b95187e1fa 100644 (file)
@@ -4,6 +4,7 @@
 //
 
 #include "message_service_short_msg.h"
+#include "messaging_instance.h"
 #include "common/logger.h"
 #include "common/platform_exception.h"
 
@@ -123,14 +124,22 @@ static gboolean loadMessageBodyTask(void* data)
     }
 
     try {
-        // TODO call success callback
-        //JSContextRef context = callback->getContext();
-        //JSObjectRef jsMessage = JSMessage::makeJSObject(context, callback->getMessage());
-        //callback->callSuccessCallback(jsMessage);
+        std::shared_ptr<MessageBody> body = callback->getMessage()->getBody();
+        body->setLoaded(true);
+        auto json = callback->getJson();
+        picojson::object& obj = json->get<picojson::object>();
+        obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
+
+        picojson::object args;
+        args[JSON_DATA_MESSAGE_BODY] = MessagingUtil::messageBodyToJson(body);
+        obj[JSON_DATA] = picojson::value(args);
+
+        MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
     } catch (...) {
         LoggerE("Couldn't create JSMessage object!");
-        // TODO call error callback
-        //callback->callErrorCallback();
+        common::UnknownException e("Loade message body failed");
+        callback->setError(e.name(), e.message());
+        MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
     }
 
     return FALSE;
index 70480e4ee81e65a5e683f0ae6f4eefced77bc19f..87e0e01192748cef89dc926188e84ad9a0f14141 100644 (file)
@@ -297,7 +297,7 @@ function Message(type, data) {
         {
             get: function () {return _internal.body;},
             set: function (value) {
-                if (value instanceof InternalValues_) value = value.body;
+                if (value instanceof InternalValues_) _internal.body = new MessageBody(value.body);
                 if (value instanceof MessageBody) _internal.body = value;
             },
             enumerable: true
@@ -612,7 +612,7 @@ MessageService.prototype.loadMessageBody = function () {
         success: function (data) {
             var body = data.messageBody;
             if (body) {
-                args.message.body = new MessageBody(data.messageBody);
+                args.message.body = new MessageBody(body);
             }
 
             args.successCallback.call(
index ef55856bbf349d804a6dacc1ce02edccbe29a521..3fa07b1af5eb03652748fbb7b27fd185d9759def 100644 (file)
@@ -466,8 +466,13 @@ std::shared_ptr<Message> MessagingUtil::jsonToMessage(const picojson::value& jso
     switch (mtype) {
     case MessageType::SMS:
         LoggerD("SMS type");
-        message = std::shared_ptr<Message>(new MessageSMS());
-        // TODO check if id exists
+        if (!data.at(MESSAGE_ATTRIBUTE_ID).is<picojson::null>()) {
+            std::string mid = data.at(MESSAGE_ATTRIBUTE_ID).get<std::string>();
+            int message_id = std::atoi(mid.c_str());
+            message = Message::findShortMessageById(message_id);
+        } else {
+            message = std::shared_ptr<Message>(new MessageSMS());
+        }
         break;
     case MessageType::MMS:
         LoggerD("Currently unsupported");
@@ -522,22 +527,8 @@ std::shared_ptr<Message> MessagingUtil::jsonToMessage(const picojson::value& jso
             MESSAGE_ATTRIBUTE_IS_HIGH_PRIORITY);
     message->setIsHighPriority(priority);
 
-    std::shared_ptr<MessageBody> body = std::shared_ptr<MessageBody>(new MessageBody());
-    picojson::object mb = MessagingUtil::getValueFromJSONObject<picojson::object>(
-            data, MESSAGE_ATTRIBUTE_MESSAGE_BODY);
-
-    bool loaded = MessagingUtil::getValueFromJSONObject<bool>(mb,
-            MESSAGE_BODY_ATTRIBUTE_LOADED);
-    body->setLoaded(loaded);
-
-    std::string html = MessagingUtil::getValueFromJSONObject<std::string>(mb,
-            MESSAGE_BODY_ATTRIBUTE_HTML_BODY);
-    body->setHtmlBody(html);
-
-    std::string plain = MessagingUtil::getValueFromJSONObject<std::string>(mb,
-            MESSAGE_BODY_ATTRIBUTE_PLAIN_BODY);
-    body->setPlainBody(plain);
-
+    std::shared_ptr<MessageBody> body = MessagingUtil::jsonToMessageBody(
+            data[MESSAGE_ATTRIBUTE_MESSAGE_BODY]);
     message->setBody(body);
 
     AttachmentPtrVector attachments;
@@ -575,6 +566,34 @@ std::shared_ptr<Message> MessagingUtil::jsonToMessage(const picojson::value& jso
 
 }
 
+std::shared_ptr<MessageBody> MessagingUtil::jsonToMessageBody(const picojson::value& json)
+{
+    LoggerD("Entered");
+
+    std::shared_ptr<MessageBody> body = std::shared_ptr<MessageBody>(new MessageBody());
+    picojson::object data = json.get<picojson::object>();
+
+    bool loaded = MessagingUtil::getValueFromJSONObject<bool>(data,
+            MESSAGE_BODY_ATTRIBUTE_LOADED);
+    body->setLoaded(loaded);
+
+    std::string html = MessagingUtil::getValueFromJSONObject<std::string>(data,
+            MESSAGE_BODY_ATTRIBUTE_HTML_BODY);
+    body->setHtmlBody(html);
+
+    std::string plain = MessagingUtil::getValueFromJSONObject<std::string>(data,
+            MESSAGE_BODY_ATTRIBUTE_PLAIN_BODY);
+    body->setPlainBody(plain);
+
+    if (!data.at(MESSAGE_BODY_ATTRIBUTE_MESSAGE_ID).is<picojson::null>()) {
+        int messageId = std::atoi(MessagingUtil::getValueFromJSONObject<std::string>(data,
+                    MESSAGE_BODY_ATTRIBUTE_MESSAGE_ID).c_str());
+        body->setMessageId(messageId);
+    }
+
+    return body;
+}
+
 std::shared_ptr<MessageFolder> MessagingUtil::jsonToMessageFolder(const picojson::value& json)
 {
     LoggerD("Entered");
index 60e10c58124539e9c8975a11c1e124a73add3d8a..694431e7d5081837509df4fdaaf03394f5ad806e 100644 (file)
@@ -120,6 +120,7 @@ public:
     static picojson::value conversationToJson(std::shared_ptr<MessageConversation> conversation);
     static picojson::value folderToJson(std::shared_ptr<MessageFolder> folder);
     static std::shared_ptr<Message> jsonToMessage(const picojson::value& json);
+    static std::shared_ptr<MessageBody> jsonToMessageBody(const picojson::value& json);
     static std::shared_ptr<MessageFolder> jsonToMessageFolder(const picojson::value& json);
     static tizen::SortModePtr jsonToSortMode(const picojson::object& json);
     static tizen::AttributeFilterPtr jsonToAttributeFilter(const picojson::object& json);