From: Maciek Blim Date: Fri, 9 Jan 2015 11:13:34 +0000 (+0100) Subject: [Messaging] SMS addDraftMessage X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~604^2~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=379d25fafe0edc3455f89c96cd9397e45725b6cf;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Messaging] SMS addDraftMessage Change-Id: I9379b29f70e6546fa89feaf562cdff27024232d9 Signed-off-by: Maciek Blim --- diff --git a/src/messaging/message.cc b/src/messaging/message.cc index f080bd00..6bd2fa14 100644 --- a/src/messaging/message.cc +++ b/src/messaging/message.cc @@ -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 recp_list = message->getTO(); -// if (!recp_list.empty()) { -// message->addSMSRecipientsToStruct(recp_list, msg); -// } + std::vector 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 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 recp_list = message->getSMSRecipientsFromStruct(msg); -// message->setTO(recp_list); + message = new MessageSMS(); + // get SMS body + std::shared_ptr 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 recp_list = message->getSMSRecipientsFromStruct(msg); + message->setTO(recp_list); } else if (infoInt == MSG_TYPE_MMS) { // message = new MessageMMS(); // diff --git a/src/messaging/message_service.cc b/src/messaging/message_service.cc index 34fa0f35..6b9b18e4 100644 --- a/src/messaging/message_service.cc +++ b/src/messaging/message_service.cc @@ -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)); diff --git a/src/messaging/message_storage_short_msg.cc b/src/messaging/message_storage_short_msg.cc index 35625c4b..7ccb1287 100644 --- a/src/messaging/message_storage_short_msg.cc +++ b/src/messaging/message_storage_short_msg.cc @@ -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(data); - // TODO - //ShortMsgManager::getInstance().addDraftMessage(callback); + ShortMsgManager::getInstance().addDraftMessage(callback); return false; } diff --git a/src/messaging/messaging_instance.cc b/src/messaging/messaging_instance.cc index a961fae8..df48c660 100644 --- a/src/messaging/messaging_instance.cc +++ b/src/messaging/messaging_instance.cc @@ -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(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(op_id)); ReportSuccess(v_op_id, out); @@ -345,7 +345,7 @@ void MessagingInstance::MessageServiceStopSync(const picojson::value& args, op_id = static_cast(v_op_id.get()); } - 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(data, FIND_FOLDERS_ARGS_OFFSET)); int serviceId = static_cast(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get()); - 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(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get()); - 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 (MessagingUtil::getValueFromJSONObject(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(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get()); - 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(args.get(JSON_CALLBACK_ID).get()); int serviceId = static_cast(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get()); - auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId); + auto service = MessagingManager::getInstance().getMessageService(serviceId); std::shared_ptr callback(new MessagesChangeCallback( callbackId, serviceId, service->getMsgServiceType())); @@ -603,7 +603,7 @@ void MessagingInstance::MessageStorageAddConversationsChangeListener(const picoj const long callbackId = static_cast(args.get(JSON_CALLBACK_ID).get()); int serviceId = static_cast(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get()); - auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId); + auto service = MessagingManager::getInstance().getMessageService(serviceId); std::shared_ptr callback(new ConversationsChangeCallback( callbackId, serviceId, service->getMsgServiceType())); @@ -625,7 +625,7 @@ void MessagingInstance::MessageStorageAddFolderChangeListener(const picojson::va const long callbackId = static_cast(args.get(JSON_CALLBACK_ID).get()); int serviceId = static_cast(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get()); - auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId); + auto service = MessagingManager::getInstance().getMessageService(serviceId); std::shared_ptr 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()); int serviceId = static_cast(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get()); - auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId); + auto service = MessagingManager::getInstance().getMessageService(serviceId); service->getMsgStorage()->removeChangeListener(watchId); ReportSuccess(out); diff --git a/src/messaging/messaging_manager.cc b/src/messaging/messaging_manager.cc index 5111a1b8..cc272aea 100755 --- a/src/messaging/messaging_manager.cc +++ b/src/messaging/messaging_manager.cc @@ -18,18 +18,27 @@ #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& 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& 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& 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(new MsgManagerCallbackData()); user_data->json = json; user_data->services_map = &m_email_services; + user_data->sms_service = &m_sms_service; common::TaskQueue::GetInstance().Queue (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 diff --git a/src/messaging/messaging_manager.h b/src/messaging/messaging_manager.h index a9de957e..77e47212 100755 --- a/src/messaging/messaging_manager.h +++ b/src/messaging/messaging_manager.h @@ -19,13 +19,14 @@ class MsgManagerCallbackData { public: std::shared_ptr json; std::map* services_map; + std::pair* 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 m_email_services; + std::pair m_sms_service; }; } // namespace messaging diff --git a/src/messaging/messaging_util.cc b/src/messaging/messaging_util.cc index 3a718c65..ef55856b 100644 --- a/src/messaging/messaging_util.cc +++ b/src/messaging/messaging_util.cc @@ -12,6 +12,7 @@ #include #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) 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 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(new MessageSMS()); + // TODO check if id exists break; case MessageType::MMS: LoggerD("Currently unsupported"); diff --git a/src/messaging/short_message_manager.cc b/src/messaging/short_message_manager.cc index d529f598..3cf62f6c 100644 --- a/src/messaging/short_message_manager.cc +++ b/src/messaging/short_message_manager.cc @@ -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 -//#include -//#include #include #include #include @@ -14,10 +11,10 @@ #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(); + 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)",