[Messaging] SMS addDraftMessage
authorMaciek Blim <m.blim@samsung.com>
Fri, 9 Jan 2015 11:13:34 +0000 (12:13 +0100)
committerMaciek Blim <m.blim@samsung.com>
Tue, 13 Jan 2015 11:38:53 +0000 (12:38 +0100)
Change-Id: I9379b29f70e6546fa89feaf562cdff27024232d9
Signed-off-by: Maciek Blim <m.blim@samsung.com>
src/messaging/message.cc
src/messaging/message_service.cc
src/messaging/message_storage_short_msg.cc
src/messaging/messaging_instance.cc
src/messaging/messaging_manager.cc
src/messaging/messaging_manager.h
src/messaging/messaging_util.cc
src/messaging/short_message_manager.cc

index f080bd0..6bd2fa1 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "Ecore_File.h"
 #include "message_email.h"
+#include "message_sms.h"
 #include "messaging_util.h"
 
 namespace extension {
@@ -767,10 +768,10 @@ msg_struct_t Message::convertPlatformShortMessageToStruct(Message* message,
         }
 
         // Set SMS recipients
-//        std::vector<std::string> recp_list = message->getTO();
-//        if (!recp_list.empty()) {
-//            message->addSMSRecipientsToStruct(recp_list, msg);
-//        }
+        std::vector<std::string> recp_list = message->getTO();
+        if (!recp_list.empty()) {
+            message->addSMSRecipientsToStruct(recp_list, msg);
+        }
 
     } else if (type == MSG_TYPE_MMS) {
         // Set message type to MMS
@@ -1220,16 +1221,16 @@ Message* Message::convertPlatformShortMessageToObject(msg_struct_t msg){
     //get type
     msg_get_int_value(msg, MSG_MESSAGE_TYPE_INT, &infoInt);
     if (infoInt == MSG_TYPE_SMS) {
-//        message = new MessageSMS();
-//        // get SMS body
-//        std::shared_ptr<MessageBody> body(new MessageBody());
-//        char msgInfoStr[MAX_MSG_TEXT_LEN + 1];
-//        msg_get_str_value(msg, MSG_MESSAGE_SMS_DATA_STR, msgInfoStr, MAX_MSG_TEXT_LEN);
-//        body->setPlainBody(std::string(msgInfoStr));
-//        message->setBody(body);
-//        // get recipients
-//        std::vector<std::string> recp_list = message->getSMSRecipientsFromStruct(msg);
-//        message->setTO(recp_list);
+        message = new MessageSMS();
+        // get SMS body
+        std::shared_ptr<MessageBody> body(new MessageBody());
+        char msgInfoStr[MAX_MSG_TEXT_LEN + 1];
+        msg_get_str_value(msg, MSG_MESSAGE_SMS_DATA_STR, msgInfoStr, MAX_MSG_TEXT_LEN);
+        body->setPlainBody(std::string(msgInfoStr));
+        message->setBody(body);
+        // get recipients
+        std::vector<std::string> recp_list = message->getSMSRecipientsFromStruct(msg);
+        message->setTO(recp_list);
     } else if (infoInt == MSG_TYPE_MMS) {
 //        message = new MessageMMS();
 //
index 34fa0f3..6b9b18e 100644 (file)
@@ -11,6 +11,7 @@
 
 #include "messaging_util.h"
 #include "message_storage_email.h"
+#include "message_storage_short_msg.h"
 #include "message.h"
 
 namespace extension {
@@ -378,8 +379,7 @@ MessageService::MessageService(int id,
     switch (msgType) {
         case MessageType::SMS:
         case MessageType::MMS:
-            // TODO need to add class representing message storage for short messages
-            //m_storage.reset(new MessageStorageShortMsg(id, msgType));
+            m_storage.reset(new MessageStorageShortMsg(id, msgType));
             break;
         case MessageType::EMAIL:
             m_storage.reset(new MessageStorageEmail(id));
index 35625c4..7ccb128 100644 (file)
@@ -2,14 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-//#include "JSMessageFolder.h"
-//#include "ShortMsgManager.h"
-
 #include "common/logger.h"
 #include "common/platform_exception.h"
 
 #include "messaging_util.h"
 #include "message_sms.h"
+#include "short_message_manager.h"
 #include "message_storage_short_msg.h"
 
 namespace extension {
@@ -28,8 +26,7 @@ static gboolean addDraftMessageTask(void* data) {
     LoggerD("Entered");
 
     MessageCallbackUserData *callback = static_cast<MessageCallbackUserData*>(data);
-    // TODO
-    //ShortMsgManager::getInstance().addDraftMessage(callback);
+    ShortMsgManager::getInstance().addDraftMessage(callback);
 
     return false;
 }
index a961fae..df48c66 100644 (file)
@@ -216,7 +216,7 @@ void MessagingInstance::MessageServiceSendMessage(const picojson::value& args,
 
     callback->setJson(json);
 
-    auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId);
+    auto service = MessagingManager::getInstance().getMessageService(serviceId);
     service->sendMessage(callback);
 }
 
@@ -240,7 +240,7 @@ void MessagingInstance::MessageServiceLoadMessageBody(const picojson::value& arg
     obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
     callback->setJson(json);
 
-    auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId);
+    auto service = MessagingManager::getInstance().getMessageService(serviceId);
     service->loadMessageBody(callback);
 }
 
@@ -262,7 +262,7 @@ void MessagingInstance::MessageServiceLoadMessageAttachment(const picojson::valu
     obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
     callback->setJson(json);
 
-    auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId);
+    auto service = MessagingManager::getInstance().getMessageService(serviceId);
     service->loadMessageAttachment(callback);
 }
 
@@ -291,7 +291,7 @@ void MessagingInstance::MessageServiceSync(const picojson::value& args,
     callback->setAccountId(id);
     callback->setLimit(limit);
 
-    long op_id = MessagingManager::getInstance().getMessageServiceEmail(id)->sync(callback);
+    long op_id = MessagingManager::getInstance().getMessageService(id)->sync(callback);
 
     picojson::value v_op_id(static_cast<double>(op_id));
     ReportSuccess(v_op_id, out);
@@ -324,7 +324,7 @@ void MessagingInstance::MessageServiceSyncFolder(const picojson::value& args,
     callback->setMessageFolder(MessagingUtil::jsonToMessageFolder(v_folder));
     callback->setLimit(limit);
 
-    long op_id = MessagingManager::getInstance().getMessageServiceEmail(id)->syncFolder(callback);
+    long op_id = MessagingManager::getInstance().getMessageService(id)->syncFolder(callback);
 
     picojson::value v_op_id(static_cast<double>(op_id));
     ReportSuccess(v_op_id, out);
@@ -345,7 +345,7 @@ void MessagingInstance::MessageServiceStopSync(const picojson::value& args,
         op_id = static_cast<long>(v_op_id.get<double>());
     }
 
-    MessagingManager::getInstance().getMessageServiceEmail(id)->stopSync(op_id);
+    MessagingManager::getInstance().getMessageService(id)->stopSync(op_id);
 
     ReportSuccess(out);
 }
@@ -394,7 +394,7 @@ void MessagingInstance::MessageStorageAddDraft(const picojson::value& args,
     obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
     callback->setJson(json);
 
-    auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId);
+    auto service = MessagingManager::getInstance().getMessageService(serviceId);
     service->getMsgStorage()->addDraftMessage(callback);
 }
 
@@ -417,7 +417,7 @@ void MessagingInstance::MessageStorageFindMessages(const picojson::value& args,
             (MessagingUtil::getValueFromJSONObject<double>(data, FIND_FOLDERS_ARGS_OFFSET));
 
     int serviceId = static_cast<int>(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get<double>());
-    auto storage = MessagingManager::getInstance().getMessageServiceEmail(serviceId)->getMsgStorage();
+    auto storage = MessagingManager::getInstance().getMessageService(serviceId)->getMsgStorage();
 
     FindMsgCallbackUserData* callback = new FindMsgCallbackUserData();
     callback->setFilter(filter);
@@ -456,7 +456,7 @@ void MessagingInstance::MessageStorageRemoveMessages(const picojson::value& args
     callback->setJson(json);
 
     int serviceId = static_cast<int>(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get<double>());
-    auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId);
+    auto service = MessagingManager::getInstance().getMessageService(serviceId);
 
     service->getMsgStorage()->removeMessages(callback);
 }
@@ -485,7 +485,7 @@ void MessagingInstance::MessageStorageUpdateMessages(const picojson::value& args
 
     int serviceId = static_cast<int>
             (MessagingUtil::getValueFromJSONObject<double>(data,FUNCTIONS_HIDDEN_ARGS_SERVICE_ID));
-    auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId);
+    auto service = MessagingManager::getInstance().getMessageService(serviceId);
 
     service->getMsgStorage()->updateMessages(callback);
 }
@@ -519,7 +519,7 @@ void MessagingInstance::MessageStorageFindConversations(const picojson::value& a
     obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
     callback->setJson(json);
 
-    auto storage = MessagingManager::getInstance().getMessageServiceEmail(serviceId)->getMsgStorage();
+    auto storage = MessagingManager::getInstance().getMessageService(serviceId)->getMsgStorage();
     storage->findConversations(callback);
 }
 
@@ -544,7 +544,7 @@ void MessagingInstance::MessageStorageRemoveConversations(const picojson::value&
     callback->setJson(json);
 
     int serviceId = static_cast<int>(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get<double>());
-    auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId);
+    auto service = MessagingManager::getInstance().getMessageService(serviceId);
 
     service->getMsgStorage()->removeConversations(callback);
 }
@@ -569,7 +569,7 @@ void MessagingInstance::MessageStorageFindFolders(const picojson::value& args,
     obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
     callback->setJson(json);
 
-    auto storage = MessagingManager::getInstance().getMessageServiceEmail(serviceId)->getMsgStorage();
+    auto storage = MessagingManager::getInstance().getMessageService(serviceId)->getMsgStorage();
     storage->findFolders(callback);
 }
 
@@ -581,7 +581,7 @@ void MessagingInstance::MessageStorageAddMessagesChangeListener(const picojson::
     const long callbackId = static_cast<long>(args.get(JSON_CALLBACK_ID).get<double>());
 
     int serviceId = static_cast<int>(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get<double>());
-    auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId);
+    auto service = MessagingManager::getInstance().getMessageService(serviceId);
 
     std::shared_ptr<MessagesChangeCallback> callback(new MessagesChangeCallback(
                 callbackId, serviceId, service->getMsgServiceType()));
@@ -603,7 +603,7 @@ void MessagingInstance::MessageStorageAddConversationsChangeListener(const picoj
     const long callbackId = static_cast<long>(args.get(JSON_CALLBACK_ID).get<double>());
 
     int serviceId = static_cast<int>(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get<double>());
-    auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId);
+    auto service = MessagingManager::getInstance().getMessageService(serviceId);
 
     std::shared_ptr<ConversationsChangeCallback> callback(new ConversationsChangeCallback(
                 callbackId, serviceId, service->getMsgServiceType()));
@@ -625,7 +625,7 @@ void MessagingInstance::MessageStorageAddFolderChangeListener(const picojson::va
     const long callbackId = static_cast<long>(args.get(JSON_CALLBACK_ID).get<double>());
 
     int serviceId = static_cast<int>(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get<double>());
-    auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId);
+    auto service = MessagingManager::getInstance().getMessageService(serviceId);
 
     std::shared_ptr<FoldersChangeCallback> callback(new FoldersChangeCallback(
                 callbackId, serviceId, service->getMsgServiceType()));
@@ -648,7 +648,7 @@ void MessagingInstance::MessageStorageRemoveChangeListener(const picojson::value
             data.at(REMOVE_CHANGE_LISTENER_ARGS_WATCHID).get<double>());
 
     int serviceId = static_cast<int>(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get<double>());
-    auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId);
+    auto service = MessagingManager::getInstance().getMessageService(serviceId);
 
     service->getMsgStorage()->removeChangeListener(watchId);
     ReportSuccess(out);
index 5111a1b..cc272ae 100755 (executable)
 #include "common/task-queue.h"
 
 #include "messaging_instance.h"
+#include "short_message_manager.h"
 #include "messaging_util.h"
 
 namespace extension {
 namespace messaging {
 
+namespace {
+const int UNDEFINED_MESSAGE_SERVICE = -1;
+}
+
 MessagingManager::MessagingManager()
 {
     LoggerD("Entered");
     int ret = msg_open_msg_handle(&m_msg_handle);
     if (ret != MSG_SUCCESS) {
         LoggerE("Cannot get message handle: %d", ret);
+    } else {
+        ShortMsgManager::getInstance().registerStatusCallback(m_msg_handle);
     }
+
+    m_sms_service = std::make_pair(UNDEFINED_MESSAGE_SERVICE, nullptr);
 }
 
 MessagingManager::~MessagingManager()
@@ -46,6 +55,10 @@ MessagingManager::~MessagingManager()
         }
     );
     m_email_services.clear();
+
+    if (m_sms_service.second) {
+        delete m_sms_service.second;
+    }
 }
 
 MessagingManager& MessagingManager::getInstance()
@@ -82,6 +95,8 @@ static void* getMsgServicesThread(const std::shared_ptr<MsgManagerCallbackData>&
         case MessageType::SMS:
             LoggerD("MessageService for SMS");
             {
+                if (user_data->sms_service->second) delete user_data->sms_service->second;
+
                 MessageService* service = new(std::nothrow) MessageServiceShortMsg(
                         MessageServiceAccountId::SMS_ACCOUNT_ID,
                         MessageType::SMS);
@@ -89,6 +104,7 @@ static void* getMsgServicesThread(const std::shared_ptr<MsgManagerCallbackData>&
                     LoggerE("MessageService for SMS creation failed");
                     throw common::UnknownException("MessageService for email creation failed");
                 }
+                *(user_data->sms_service) = std::make_pair(service->getMsgServiceId(), service);
 
                 // TODO FIXME
                 picojson::array array;
@@ -96,7 +112,6 @@ static void* getMsgServicesThread(const std::shared_ptr<MsgManagerCallbackData>&
                 obj[JSON_DATA] = picojson::value(array);
                 obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
 
-                delete service;
                 service = NULL;
             }
             break;
@@ -186,14 +201,18 @@ void MessagingManager::getMessageServices(const std::string& type, double callba
     auto user_data = std::shared_ptr<MsgManagerCallbackData>(new MsgManagerCallbackData());
     user_data->json = json;
     user_data->services_map = &m_email_services;
+    user_data->sms_service = &m_sms_service;
 
     common::TaskQueue::GetInstance().Queue<MsgManagerCallbackData>
         (getMsgServicesThread, callbackCompleted, user_data);
 }
 
-MessageService* MessagingManager::getMessageServiceEmail(int id){
-    LoggerD("Entered");
-    return m_email_services[id];
+MessageService* MessagingManager::getMessageService(const int id) {
+    if (id == m_sms_service.first) {
+        return m_sms_service.second;
+    } else {
+        return m_email_services[id];
+    }
 }
 
 } // namespace messaging
index a9de957..77e4721 100755 (executable)
@@ -19,13 +19,14 @@ class MsgManagerCallbackData {
 public:
     std::shared_ptr<picojson::value> json;
     std::map<int, MessageService*>* services_map;
+    std::pair<int, MessageService*>* sms_service;
 };
 
 class MessagingManager {
 public:
     static MessagingManager& getInstance();
     void getMessageServices(const std::string& type, double callbackId);
-    MessageService* getMessageServiceEmail(int id);
+    MessageService* getMessageService(const int id);
 
 private:
     MessagingManager();
@@ -35,6 +36,7 @@ private:
 
     msg_handle_t m_msg_handle;
     std::map<int, MessageService*> m_email_services;
+    std::pair<int, MessageService*> m_sms_service;
 };
 
 } // namespace messaging
index 3a718c6..ef55856 100644 (file)
@@ -12,6 +12,7 @@
 
 #include <email-api-account.h>
 #include "message_email.h"
+#include "message_sms.h"
 #include "message_conversation.h"
 
 #include "tizen/tizen.h"
@@ -288,8 +289,6 @@ picojson::value MessagingUtil::messageToJson(std::shared_ptr<Message> message)
 
     switch (message->getType()) {
     case MessageType::SMS:
-        LoggerD("Currently unsupported");
-        // TODO add class which will extended message_service and call message_service_short_msg
         break;
     case MessageType::MMS:
         LoggerD("Currently unsupported");
@@ -466,8 +465,9 @@ std::shared_ptr<Message> MessagingUtil::jsonToMessage(const picojson::value& jso
 
     switch (mtype) {
     case MessageType::SMS:
-        LoggerD("Currently unsupported");
-        // TODO add class which will extended message_service and call message_service_short_msg
+        LoggerD("SMS type");
+        message = std::shared_ptr<Message>(new MessageSMS());
+        // TODO check if id exists
         break;
     case MessageType::MMS:
         LoggerD("Currently unsupported");
index d529f59..3cf62f6 100644 (file)
@@ -2,9 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-//#include <JSWebAPIErrorFactory.h>
-//#include <JSWebAPIError.h>
-//#include <JSUtil.h>
 #include <msg.h>
 #include <msg_transport.h>
 #include <msg_storage.h>
 #include "common/logger.h"
 
 #include "messaging_util.h"
+#include "messaging_instance.h"
 #include "message_service.h"
 #include "message_sms.h"
 //#include "MessageMMS.h"
-//#include "JSMessage.h"
 //#include "JSMessageConversation.h"
 #include "messaging_database_manager.h"
 
@@ -96,15 +93,21 @@ static gboolean addDraftMessageCompleteCB(void *data)
     try {
         if (callback->isError()) {
             LoggerD("Calling error callback");
-            // TODO call error
-            //JSObjectRef errobj = JSWebAPIErrorFactory::makeErrorObject(context,
-                    //callback->getErrorName(), callback->getErrorMessage());
-            //callback->callErrorCallback(errobj);
-            //callback->getMessage()->setMessageStatus(MessageStatus::STATUS_FAILED);
+
+            MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+            callback->getMessage()->setMessageStatus(MessageStatus::STATUS_FAILED);
         } else {
             LoggerD("Calling success callback");
-            // TODO call success
-            //callback->callSuccessCallback();
+
+            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] = MessagingUtil::messageToJson(callback->getMessage());
+            obj[JSON_DATA] = picojson::value(args);
+
+            MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
         }
     } catch (const common::PlatformException& err) {
         LoggerE("Error while calling addDraftMessage callback: %s (%s)",