[Messaging] findMessages implementation
authorRobert Karolak <r.karolak@samsung.com>
Mon, 29 Dec 2014 13:11:11 +0000 (14:11 +0100)
committerRobert Karolak <r.karolak@samsung.com>
Mon, 29 Dec 2014 14:03:23 +0000 (15:03 +0100)
[Verification] Code compiles without errors.
Functionality tested in node console

Change-Id: Ia2dcedb82a33e6065fa393f216c03a0ac381eb40
Signed-off-by: Robert Karolak <r.karolak@samsung.com>
src/messaging/email_manager.cc
src/messaging/message_storage.h
src/messaging/message_storage_email.cc
src/messaging/message_storage_email.h
src/messaging/messaging_api.js
src/messaging/messaging_instance.cc

index 09b5f97c2a74114777ddd227240db4678ff52415..95351fd87e9e1d36f562a05c1c99808beaa47b4f 100644 (file)
@@ -1079,25 +1079,23 @@ void EmailManager::findMessages(FindMsgCallbackUserData* callback)
     LoggerD("callback: %p error: %d messages.size() = %d", callback, callback->isError(),
             callback->getMessages().size());
 
-//    JSContextRef context = callback->getContext();
-//    if (!GlobalContextManager::getInstance()->isAliveGlobalContext(context)) {
-//        LoggerE("context was closed");
-//        delete callback;
-//        callback = NULL;
-//        return;
-//    }
-
     try {
         if (callback->isError()) {
             LoggerD("Calling error callback");
-//            JSObjectRef errobj = JSWebAPIErrorFactory::makeErrorObject(context, TODO
-//                    callback->getErrorName(),
-//                    callback->getErrorMessage());
-//            callback->callErrorCallback(errobj);
+            MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
         } else {
             LoggerD("Calling success callback");
-//            callback->callSuccessCallback(JSMessage::messageVectorToJSObjectArray(context, TODO
-//                    callback->getMessages()));
+            auto json = callback->getJson();
+            picojson::object& obj = json->get<picojson::object>();
+
+            std::vector<picojson::value> response;
+            auto messages = callback->getMessages();
+            std::for_each(messages.begin(), messages.end(), [&response](MessagePtr &message){
+                response.push_back(MessagingUtil::messageToJson(message));
+            });
+            obj[JSON_DATA] = picojson::value(response);
+            obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
+            MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
         }
     } catch (const PlatformException& err) {
         LoggerE("Error while calling findMessages callback: %s (%s)",
index 2214d2935a33ca13a28f47f7ccd18db5f8639b56..b0a04b469d044646163dfc403e0857ccc0f6a285 100644 (file)
@@ -13,6 +13,7 @@
 #include "message_callback_user_data.h"
 #include "messages_callback_user_data.h"
 #include "conversation_callback_data.h"
+#include "find_msg_callback_user_data.h"
 
 namespace extension {
 namespace messaging {
@@ -33,7 +34,7 @@ public:
     virtual void addDraftMessage(MessageCallbackUserData* callback) = 0;
     virtual void removeMessages(MessagesCallbackUserData* callback) = 0;
     virtual void updateMessages(MessagesCallbackUserData* callback) = 0;
-    virtual void findMessages() = 0;
+    virtual void findMessages(FindMsgCallbackUserData* callback) = 0;
     virtual void findConversations() = 0;
     virtual void removeConversations(ConversationCallbackData* callback) = 0;
     virtual void findFolders() = 0;
index f694fe216a7ee5fedc1a6d9533a56cf6b45e26d4..f0878858689dffb3701d247cf282e45b0bd99cb1 100644 (file)
@@ -136,10 +136,33 @@ void MessageStorageEmail::updateMessages(MessagesCallbackUserData* callback)
     }
 }
 
-void MessageStorageEmail::findMessages()
+static gboolean findMessagesTask(void* data)
 {
     LoggerD("Entered");
-    //TODO add implementation
+
+    FindMsgCallbackUserData *callback = static_cast<FindMsgCallbackUserData*>(data);
+    EmailManager::getInstance().findMessages(callback);
+
+    return FALSE;
+}
+
+void MessageStorageEmail::findMessages(FindMsgCallbackUserData* callback)
+{
+    LoggerD("Entered");
+
+    if (!callback) {
+        LoggerE("Callback is null");
+        throw common::UnknownException("Callback is null");
+    }
+
+    callback->setAccountId(m_id);
+    callback->setMessageServiceType(m_msg_type);
+    guint id = g_idle_add(findMessagesTask, static_cast<void*>(callback));
+    if (!id) {
+        LoggerE("g_idle_add failed");
+        delete callback;
+        callback = NULL;
+    }
 }
 
 void MessageStorageEmail::findConversations()
index 4218c6ee5b58c302c5f975b352dccb4c56e756a5..76bd6a380c6caaa7ffae7b04f05119a69bb6aa0a 100644 (file)
@@ -18,7 +18,7 @@ public:
     virtual void addDraftMessage(MessageCallbackUserData* callback);
     virtual void removeMessages(MessagesCallbackUserData* callback);
     virtual void updateMessages(MessagesCallbackUserData* callback);
-    virtual void findMessages();
+    virtual void findMessages(FindMsgCallbackUserData* callback);
     virtual void findConversations();
     virtual void removeConversations(ConversationCallbackData* callback);
     virtual void findFolders();
index 4442fd21f99342f17263224c49f3421e2fa710ef..1051c035df720dc44d7dc91ecb414a6d6dc04325 100644 (file)
@@ -789,13 +789,14 @@ MessageStorage.prototype.findMessages = function () {
             filter: args.filter,
             sort: args.sort,
             limit: args.limit,
-            offset: args.offset
+            offset: args.offset,
+            serviceId: this.service.id
         }
     }).then({
         success: function (data) {
             var messages = [];
             data.forEach(function (el) {
-                messages.push(new tizen.Message(el));
+                messages.push(new tizen.Message(el.type, new MessageInit_(el)));
             });
             args.successCallback.call(null, messages);
         },
index c8be033061e7f708e36e6e9715ff774d3cb35e43..bb39cb8fac992cb0efc746fe80520ee1cd0c1b0e 100644 (file)
@@ -12,6 +12,7 @@
 #include "MsgCommon/AbstractFilter.h"
 #include "messages_change_callback.h"
 #include "messages_callback_user_data.h"
+#include "find_msg_callback_user_data.h"
 #include "messaging_manager.h"
 #include "messaging_util.h"
 #include "message_storage.h"
@@ -356,27 +357,28 @@ void MessagingInstance::MessageStorageFindMessages(const picojson::value& args,
     picojson::object data = args.get(JSON_DATA).get<picojson::object>();
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
 
-    LoggerD("Received: %s", args.serialize().c_str());
-    // get filter object - platform object
-    // FIND_FOLDERS_ARGS_FILTER
-
     auto filter = MessagingUtil::jsonToAttributeFilter(data);
-
-    // get sort object - platform object
-    // FIND_FOLDERS_ARGS_SORT
     auto sortMode = MessagingUtil::jsonToSortMode(data);
-
-    // get limit object - unsigned long
-    unsigned long limit = static_cast<unsigned long>
+    long limit = static_cast<long>
             (MessagingUtil::getValueFromJSONObject<double>(data, FIND_FOLDERS_ARGS_LIMIT));
+    long offset = static_cast<long>
+            (MessagingUtil::getValueFromJSONObject<double>(data, FIND_FOLDERS_ARGS_OFFSET));
 
-    LoggerD("Limit: %u", limit);
+    int serviceId = static_cast<int>(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get<double>());
+    auto storage = MessagingManager::getInstance().getMessageServiceEmail(serviceId)->getMsgStorage();
 
-    // get offset object - unsigned long
-    unsigned long offset = static_cast<unsigned long>
-            (MessagingUtil::getValueFromJSONObject<double>(data, FIND_FOLDERS_ARGS_OFFSET));
+    FindMsgCallbackUserData* callback = new FindMsgCallbackUserData();
+    callback->setFilter(filter);
+    callback->setLimit(limit);
+    callback->setOffset(offset);
+    callback->setAccountId(serviceId);
+
+    auto json = std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
+    picojson::object& obj = json->get<picojson::object>();
+    obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
+    callback->setJson(json);
 
-    LoggerD("Offset: %u", offset);
+    storage->findMessages(callback);
 }
 
 void MessagingInstance::MessageStorageRemoveMessages(const picojson::value& args,