From 9cf8b200ff1cbcecb29a24a73504b01f5ade7fba Mon Sep 17 00:00:00 2001 From: Lukasz Bardeli Date: Tue, 14 Apr 2015 09:08:59 +0200 Subject: [PATCH] [Messaging] Allow to create multiple instances of MessagingInstance class. Change-Id: I64862e45301f295d45bebe81741dcd9efae2e1cf Signed-off-by: Lukasz Bardeli --- src/messaging/DBus/LoadAttachmentProxy.cpp | 4 +- src/messaging/DBus/LoadBodyProxy.cpp | 4 +- src/messaging/DBus/SyncProxy.cpp | 8 +- src/messaging/conversation_callback_data.cc | 10 +- src/messaging/conversation_callback_data.h | 6 +- .../conversations_change_callback.cc | 11 +- src/messaging/conversations_change_callback.h | 3 +- src/messaging/email_manager.cc | 35 +++--- src/messaging/find_msg_callback_user_data.cc | 5 +- src/messaging/find_msg_callback_user_data.h | 4 +- src/messaging/folders_callback_data.cc | 11 +- src/messaging/folders_callback_data.h | 7 +- src/messaging/folders_change_callback.cc | 11 +- src/messaging/folders_change_callback.h | 3 +- src/messaging/message_callback_user_data.cc | 5 +- src/messaging/message_callback_user_data.h | 7 +- src/messaging/message_service.cc | 21 ++-- src/messaging/message_service.h | 19 +++- src/messaging/message_service_email.cc | 2 +- src/messaging/message_service_short_msg.cc | 2 +- src/messaging/message_storage_email.cc | 2 +- src/messaging/message_storage_short_msg.cc | 2 +- src/messaging/messages_callback_user_data.cc | 10 +- src/messaging/messages_callback_user_data.h | 7 +- src/messaging/messages_change_callback.cc | 11 +- src/messaging/messages_change_callback.h | 3 +- src/messaging/messaging_extension.cc | 2 +- src/messaging/messaging_instance.cc | 102 +++++++++--------- src/messaging/messaging_instance.h | 12 ++- src/messaging/messaging_manager.cc | 22 ++-- src/messaging/messaging_manager.h | 18 ++-- src/messaging/messaging_util.cc | 11 +- src/messaging/messaging_util.h | 9 +- src/messaging/short_message_manager.cc | 28 ++--- 34 files changed, 232 insertions(+), 185 deletions(-) diff --git a/src/messaging/DBus/LoadAttachmentProxy.cpp b/src/messaging/DBus/LoadAttachmentProxy.cpp index 31624797..df4105ba 100644 --- a/src/messaging/DBus/LoadAttachmentProxy.cpp +++ b/src/messaging/DBus/LoadAttachmentProxy.cpp @@ -215,7 +215,7 @@ void LoadAttachmentProxy::handleEmailSignal(const int status, callback->getMessageAttachment()); obj[JSON_DATA] = picojson::value(args); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); @@ -227,7 +227,7 @@ void LoadAttachmentProxy::handleEmailSignal(const int status, if (ret.IsError()) { LoggerE("Exception in signal callback"); callback->setError(ret); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( callback->getJson()->get().at(JSON_CALLBACK_ID).get(), callback->getJson()->serialize() ); diff --git a/src/messaging/DBus/LoadBodyProxy.cpp b/src/messaging/DBus/LoadBodyProxy.cpp index 5c0d8cb9..e6dfeaaa 100644 --- a/src/messaging/DBus/LoadBodyProxy.cpp +++ b/src/messaging/DBus/LoadBodyProxy.cpp @@ -196,7 +196,7 @@ void LoadBodyProxy::handleEmailSignal(const int status, callback->getMessage()->getBody()); obj[JSON_DATA] = picojson::value(args); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); @@ -208,7 +208,7 @@ void LoadBodyProxy::handleEmailSignal(const int status, if (ret.IsError()) { callback->setError(ret); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( callback->getJson()->get().at(JSON_CALLBACK_ID).get(), callback->getJson()->serialize() ); diff --git a/src/messaging/DBus/SyncProxy.cpp b/src/messaging/DBus/SyncProxy.cpp index 63d98900..070e16f9 100644 --- a/src/messaging/DBus/SyncProxy.cpp +++ b/src/messaging/DBus/SyncProxy.cpp @@ -108,7 +108,7 @@ void SyncProxy::handleEmailSignal(const int status, return; } - common::CallbackUserData* callback = NULL; + SyncCallbackData* callback = NULL; CallbackMap::iterator callback_it; PlatformResult ret = findSyncCallbackByOpHandle(op_handle, &callback_it); @@ -117,7 +117,7 @@ void SyncProxy::handleEmailSignal(const int status, return; } - callback = callback_it->second; + callback = dynamic_cast(callback_it->second); if (!callback) { LoggerE("Callback is null"); return; @@ -129,7 +129,7 @@ void SyncProxy::handleEmailSignal(const int status, case NOTI_DOWNLOAD_FINISH: LoggerD("Sync finished!"); obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), response->serialize() ); @@ -140,7 +140,7 @@ void SyncProxy::handleEmailSignal(const int status, LoggerD("Sync failed!"); common::UnknownException err("Sync failed!"); callback->setError(err.name(), err.message()); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), response->serialize() ); diff --git a/src/messaging/conversation_callback_data.cc b/src/messaging/conversation_callback_data.cc index e23eb66e..5e9ff716 100644 --- a/src/messaging/conversation_callback_data.cc +++ b/src/messaging/conversation_callback_data.cc @@ -8,25 +8,27 @@ namespace extension { namespace messaging { -ConversationCallbackData::ConversationCallbackData(): +ConversationCallbackData::ConversationCallbackData(PostQueue& queue): m_filter(), m_sort(), m_limit(0), m_offset(0), m_is_error(false), m_account_id(0), - m_service_type(UNDEFINED) + m_service_type(UNDEFINED), + queue_(queue) { } -ConversationCallbackData::ConversationCallbackData(long cid, bool keep): +ConversationCallbackData::ConversationCallbackData(long cid, PostQueue& queue, bool keep): m_filter(), m_sort(), m_limit(0), m_offset(0), m_is_error(false), m_account_id(0), - m_service_type(UNDEFINED) + m_service_type(UNDEFINED), + queue_(queue) { auto json = std::shared_ptr(new picojson::value(picojson::object())); picojson::object& o = json->get(); diff --git a/src/messaging/conversation_callback_data.h b/src/messaging/conversation_callback_data.h index 235306db..e8d69641 100644 --- a/src/messaging/conversation_callback_data.h +++ b/src/messaging/conversation_callback_data.h @@ -23,8 +23,8 @@ class MessageConversation; class ConversationCallbackData: public common::CallbackUserData { public: - ConversationCallbackData(); - ConversationCallbackData(long cid, bool keep = false); + ConversationCallbackData(PostQueue& queue); + ConversationCallbackData(long cid, PostQueue& queue, bool keep = false); virtual ~ConversationCallbackData(); void setFilter(AbstractFilterPtr filter); @@ -52,6 +52,7 @@ public: long getLimit() const; long getOffset() const; + PostQueue& getQueue() { return queue_;}; private: AbstractFilterPtr m_filter; SortModePtr m_sort; @@ -63,6 +64,7 @@ private: std::vector> m_conversations; int m_account_id; MessageType m_service_type; + PostQueue& queue_; }; }//messaging diff --git a/src/messaging/conversations_change_callback.cc b/src/messaging/conversations_change_callback.cc index 1d3048c5..a47a58da 100644 --- a/src/messaging/conversations_change_callback.cc +++ b/src/messaging/conversations_change_callback.cc @@ -30,8 +30,9 @@ const char* CONVERSATIONSREMOVED = "conversationsremoved"; ConversationsChangeCallback::ConversationsChangeCallback( long cid, int service_id, - MessageType service_type) : - m_callback_data(cid, true), + MessageType service_type, + PostQueue& queue) : + m_callback_data(cid, queue, true), m_id(service_id), m_msg_type(service_type), m_is_act(true) @@ -99,7 +100,7 @@ void ConversationsChangeCallback::added( obj[JSON_ACTION] = picojson::value(CONVERSATIONSADDED); obj[JSON_DATA] = picojson::value(array); - PostQueue::getInstance().addAndResolve(obj.at( + m_callback_data.getQueue().addAndResolve(obj.at( JSON_CALLBACK_ID).get(), PostPriority::MEDIUM, json->serialize()); } @@ -127,7 +128,7 @@ void ConversationsChangeCallback::updated( obj[JSON_ACTION] = picojson::value(CONVERSATIONSUPDATED); obj[JSON_DATA] = picojson::value(array); - PostQueue::getInstance().addAndResolve(obj.at( + m_callback_data.getQueue().addAndResolve(obj.at( JSON_CALLBACK_ID).get(), PostPriority::LOW, json->serialize()); } @@ -155,7 +156,7 @@ void ConversationsChangeCallback::removed( obj[JSON_ACTION] = picojson::value(CONVERSATIONSREMOVED); obj[JSON_DATA] = picojson::value(array); - PostQueue::getInstance().addAndResolve(obj.at( + m_callback_data.getQueue().addAndResolve(obj.at( JSON_CALLBACK_ID).get(), PostPriority::LAST, json->serialize()); } diff --git a/src/messaging/conversations_change_callback.h b/src/messaging/conversations_change_callback.h index 2894e8f2..b13ca5e8 100644 --- a/src/messaging/conversations_change_callback.h +++ b/src/messaging/conversations_change_callback.h @@ -22,7 +22,8 @@ public: ConversationsChangeCallback( long cid, int service_id, - MessageType service_type); + MessageType service_type, + PostQueue& queue); virtual ~ConversationsChangeCallback(); void added(const ConversationPtrVector& conversations); diff --git a/src/messaging/email_manager.cc b/src/messaging/email_manager.cc index 62aef82f..7f430021 100644 --- a/src/messaging/email_manager.cc +++ b/src/messaging/email_manager.cc @@ -312,7 +312,7 @@ static gboolean addDraftMessageCompleteCB(void *data) if (json->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); callback->getMessage()->setMessageStatus(MessageStatus::STATUS_FAILED); @@ -324,7 +324,7 @@ static gboolean addDraftMessageCompleteCB(void *data) args[JSON_DATA_MESSAGE] = MessagingUtil::messageToJson(callback->getMessage()); obj[JSON_DATA] = picojson::value(args); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); @@ -381,7 +381,7 @@ static gboolean sendEmailCompleteCB(void* data) picojson::object& obj = json->get(); if (json->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { if (callback->isError()) { - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); callback->getMessage()->setMessageStatus(MessageStatus::STATUS_FAILED); @@ -408,7 +408,7 @@ static gboolean sendEmailCompleteCB(void* data) data[JSON_DATA_MESSAGE] = MessagingUtil::messageToJson(callback->getMessage()); obj[JSON_DATA] = picojson::value(data); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); @@ -532,6 +532,7 @@ void EmailManager::sendStatusCallback(int mail_id, LoggerE("Unknown error %d", error_code); common::UnknownException ex("Failed to send message"); callback->setError(ex.name(),ex.message()); + break; } } else if (NOTI_SEND_FINISH == status) { LoggerD("Message sent successfully"); @@ -832,7 +833,7 @@ void EmailManager::stopSync(long op_id) if (response->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { callback->setError(PlatformResult(ErrorCode::ABORT_ERR, "Sync aborted by user")); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), response->serialize()); m_proxy_sync->removeCallback(op_id); } else { @@ -855,14 +856,14 @@ void removeEmailCompleteCB(MessagesCallbackUserData* callback) if (json->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); } else { LoggerD("Calling success callback"); obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); } @@ -1063,7 +1064,7 @@ void EmailManager::updateMessages(MessagesCallbackUserData* callback) if (json->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize()); } else { LoggerD("Calling success callback"); @@ -1076,7 +1077,7 @@ void EmailManager::updateMessages(MessagesCallbackUserData* callback) } obj[JSON_DATA] = picojson::value(array); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); } @@ -1144,7 +1145,7 @@ void EmailManager::findMessages(FindMsgCallbackUserData* callback) if (json->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve( obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize()); } else { LoggerD("Calling success callback"); @@ -1156,7 +1157,7 @@ void EmailManager::findMessages(FindMsgCallbackUserData* callback) obj[JSON_DATA] = picojson::value(response); obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize()); } } else { @@ -1216,7 +1217,7 @@ void EmailManager::findConversations(ConversationCallbackData* callback) if (json->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize()); } else { LoggerD("Calling success callback"); @@ -1231,7 +1232,7 @@ void EmailManager::findConversations(ConversationCallbackData* callback) obj[JSON_DATA] = picojson::value(response); obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); } @@ -1355,7 +1356,7 @@ void EmailManager::findFolders(FoldersCallbackData* callback) if (json->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize()); } else { LoggerD("Calling success callback"); @@ -1370,7 +1371,7 @@ void EmailManager::findFolders(FoldersCallbackData* callback) obj[JSON_DATA] = picojson::value(response); obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize()); } } else { @@ -1445,13 +1446,13 @@ void EmailManager::removeConversations(ConversationCallbackData* callback) if (json->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize()); } else { LoggerD("Calling success callback"); obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS); - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize()); } } else { diff --git a/src/messaging/find_msg_callback_user_data.cc b/src/messaging/find_msg_callback_user_data.cc index b23f5bf2..6aa8174b 100644 --- a/src/messaging/find_msg_callback_user_data.cc +++ b/src/messaging/find_msg_callback_user_data.cc @@ -25,13 +25,14 @@ namespace extension { namespace messaging { -FindMsgCallbackUserData::FindMsgCallbackUserData(): +FindMsgCallbackUserData::FindMsgCallbackUserData(PostQueue& queue): CallbackUserData(), m_limit(0), m_offset(0), m_is_error(false), m_account_id(0), - m_service_type(UNDEFINED) + m_service_type(UNDEFINED), + queue_(queue) { } diff --git a/src/messaging/find_msg_callback_user_data.h b/src/messaging/find_msg_callback_user_data.h index 262aaa57..58d80d1a 100644 --- a/src/messaging/find_msg_callback_user_data.h +++ b/src/messaging/find_msg_callback_user_data.h @@ -40,7 +40,7 @@ class Message; class FindMsgCallbackUserData: public common::CallbackUserData { public: - FindMsgCallbackUserData(); + FindMsgCallbackUserData(PostQueue& queue); virtual ~FindMsgCallbackUserData(); void setFilter(AbstractFilterPtr filter); @@ -67,6 +67,7 @@ public: long getLimit() const; long getOffset() const; + PostQueue& getQueue() { return queue_;}; private: AbstractFilterPtr m_filter; SortModePtr m_sort; @@ -78,6 +79,7 @@ private: std::vector> m_messages; int m_account_id; MessageType m_service_type; + PostQueue& queue_; }; }//Messaging diff --git a/src/messaging/folders_callback_data.cc b/src/messaging/folders_callback_data.cc index fa787ef4..e63557d0 100644 --- a/src/messaging/folders_callback_data.cc +++ b/src/messaging/folders_callback_data.cc @@ -16,21 +16,22 @@ // #include "folders_callback_data.h" -#include "messaging_util.h" namespace extension { namespace messaging { -FoldersCallbackData::FoldersCallbackData(): +FoldersCallbackData::FoldersCallbackData(PostQueue& queue): m_filter(), - m_is_error(false) + m_is_error(false), + queue_(queue) { } -FoldersCallbackData::FoldersCallbackData(long cid, bool keep): +FoldersCallbackData::FoldersCallbackData(long cid, PostQueue& queue, bool keep): m_filter(), - m_is_error(false) + m_is_error(false), + queue_(queue) { auto json = std::shared_ptr(new picojson::value(picojson::object())); picojson::object& o = json->get(); diff --git a/src/messaging/folders_callback_data.h b/src/messaging/folders_callback_data.h index b453192b..4a3ed8bb 100644 --- a/src/messaging/folders_callback_data.h +++ b/src/messaging/folders_callback_data.h @@ -28,6 +28,7 @@ #include "MsgCommon/AbstractFilter.h" #include "message_folder.h" +#include "messaging_util.h" namespace extension { namespace messaging { @@ -36,8 +37,8 @@ class MessageFolder; class FoldersCallbackData: public common::CallbackUserData { public: - FoldersCallbackData(); - FoldersCallbackData(long cid, bool keep = false); + FoldersCallbackData(PostQueue& queue); + FoldersCallbackData(long cid, PostQueue& queue, bool keep = false); virtual ~FoldersCallbackData(); void addFolder(std::shared_ptr folder); @@ -53,12 +54,14 @@ public: std::string getErrorName() const; std::string getErrorMessage() const; + PostQueue& getQueue() { return queue_;}; private: std::vector> m_folders; tizen::AbstractFilterPtr m_filter; bool m_is_error; std::string m_err_name; std::string m_err_message; + PostQueue& queue_; }; diff --git a/src/messaging/folders_change_callback.cc b/src/messaging/folders_change_callback.cc index bc526c9e..22916653 100644 --- a/src/messaging/folders_change_callback.cc +++ b/src/messaging/folders_change_callback.cc @@ -29,8 +29,9 @@ const char* FOLDERSREMOVED = "foldersremoved"; FoldersChangeCallback::FoldersChangeCallback( long cid, int service_id, - MessageType service_type): - m_callback_data(cid, true), + MessageType service_type, + PostQueue& queue): + m_callback_data(cid, queue, true), m_id(service_id), m_msg_type(service_type), m_is_act(true) @@ -95,7 +96,7 @@ void FoldersChangeCallback::added(const FolderPtrVector& folders) obj[JSON_DATA] = picojson::value(array); if (json->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { - PostQueue::getInstance().addAndResolve(obj.at( + m_callback_data.getQueue().addAndResolve(obj.at( JSON_CALLBACK_ID).get(), PostPriority::MEDIUM, json->serialize()); } else { LoggerE("Callback id is missing"); @@ -126,7 +127,7 @@ void FoldersChangeCallback::updated(const FolderPtrVector& folders) obj[JSON_DATA] = picojson::value(array); if (json->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { - PostQueue::getInstance().addAndResolve(obj.at( + m_callback_data.getQueue().addAndResolve(obj.at( JSON_CALLBACK_ID).get(), PostPriority::LOW, json->serialize()); } else { LoggerE("Callback id is missing"); @@ -157,7 +158,7 @@ void FoldersChangeCallback::removed(const FolderPtrVector& folders) obj[JSON_DATA] = picojson::value(array); if (json->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { - PostQueue::getInstance().addAndResolve(obj.at( + m_callback_data.getQueue().addAndResolve(obj.at( JSON_CALLBACK_ID).get(), PostPriority::LAST, json->serialize()); } else { LoggerE("Callback id is missing"); diff --git a/src/messaging/folders_change_callback.h b/src/messaging/folders_change_callback.h index f2eb4663..37d72846 100644 --- a/src/messaging/folders_change_callback.h +++ b/src/messaging/folders_change_callback.h @@ -28,7 +28,8 @@ public: FoldersChangeCallback( long cid, int service_id, - MessageType service_type); + MessageType service_type, + PostQueue& queue); virtual ~FoldersChangeCallback(); void added(const FolderPtrVector& folders); diff --git a/src/messaging/message_callback_user_data.cc b/src/messaging/message_callback_user_data.cc index 4fab0554..7483214b 100644 --- a/src/messaging/message_callback_user_data.cc +++ b/src/messaging/message_callback_user_data.cc @@ -8,9 +8,10 @@ namespace extension { namespace messaging { -MessageCallbackUserData::MessageCallbackUserData(): +MessageCallbackUserData::MessageCallbackUserData(PostQueue& queue): common::CallbackUserData(), - m_is_error(false) + m_is_error(false), + queue_(queue) { } diff --git a/src/messaging/message_callback_user_data.h b/src/messaging/message_callback_user_data.h index a3447098..3a7fa3bd 100644 --- a/src/messaging/message_callback_user_data.h +++ b/src/messaging/message_callback_user_data.h @@ -15,10 +15,11 @@ namespace extension { namespace messaging { class Message; +class PostQueue; class MessageCallbackUserData: public common::CallbackUserData { public: - MessageCallbackUserData(); + MessageCallbackUserData(PostQueue& queue); virtual ~MessageCallbackUserData(); void setMessage(std::shared_ptr message); @@ -34,12 +35,16 @@ public: std::string getErrorName() const; std::string getErrorMessage() const; + PostQueue& getQueue() { return queue_;}; + private: bool m_is_error; + PostQueue& queue_; std::string m_err_name; std::string m_err_message; std::shared_ptr m_message; int m_account_id; + }; }//messaging diff --git a/src/messaging/message_service.cc b/src/messaging/message_service.cc index 17211124..7d6c0418 100644 --- a/src/messaging/message_service.cc +++ b/src/messaging/message_service.cc @@ -29,11 +29,12 @@ const char* JSON_SERVICE_STORAGE = "messageStorage"; //#################### MessageRecipientsCallbackData #################### -MessageRecipientsCallbackData::MessageRecipientsCallbackData(): +MessageRecipientsCallbackData::MessageRecipientsCallbackData(PostQueue& queue): m_is_error(false), m_account_id(-1), m_sim_index(TAPI_NETWORK_DEFAULT_DATA_SUBS_UNKNOWN), - m_default_sim_index(TAPI_NETWORK_DEFAULT_DATA_SUBS_UNKNOWN) + m_default_sim_index(TAPI_NETWORK_DEFAULT_DATA_SUBS_UNKNOWN), + queue_(queue) { LoggerD("Entered"); m_msg_recipients = std::vector(); @@ -239,7 +240,8 @@ double BaseMessageServiceCallbackData::getCallbackId() const //#################### MessageBodyCallbackData #################### -MessageBodyCallbackData::MessageBodyCallbackData() +MessageBodyCallbackData::MessageBodyCallbackData(PostQueue& queue): + queue_(queue) { LoggerD("Entered"); } @@ -261,8 +263,9 @@ std::shared_ptr MessageBodyCallbackData::getMessage() const //#################### MessageAttachmentCallbackData #################### -MessageAttachmentCallbackData::MessageAttachmentCallbackData(): - m_nth(0) +MessageAttachmentCallbackData::MessageAttachmentCallbackData(PostQueue& queue): + m_nth(0), + queue_(queue) { LoggerD("Entered"); } @@ -296,12 +299,13 @@ int MessageAttachmentCallbackData::getNth() const //#################### SyncCallbackData #################### -SyncCallbackData::SyncCallbackData(): +SyncCallbackData::SyncCallbackData(PostQueue& queue): // BaseMessageServiceCallbackData(globalCtx), m_is_limit(false), m_limit(0), m_op_id(-1), - m_account_id(-1) + m_account_id(-1), + queue_(queue) { LoggerD("Entered"); } @@ -349,7 +353,8 @@ int SyncCallbackData::getAccountId() const //#################### SyncFolderCallbackData #################### -SyncFolderCallbackData::SyncFolderCallbackData() +SyncFolderCallbackData::SyncFolderCallbackData(PostQueue& queue): + SyncCallbackData(queue) { LoggerD("Entered"); } diff --git a/src/messaging/message_service.h b/src/messaging/message_service.h index c0dfe361..0369c549 100755 --- a/src/messaging/message_service.h +++ b/src/messaging/message_service.h @@ -30,7 +30,7 @@ enum MessageServiceAccountId class MessageRecipientsCallbackData : public common::CallbackUserData { public: - MessageRecipientsCallbackData(); + MessageRecipientsCallbackData(PostQueue& queue); virtual ~MessageRecipientsCallbackData(); void setMessage(std::shared_ptr message); @@ -53,6 +53,8 @@ public: TelNetworkDefaultDataSubs_t getDefaultSimIndex() const; bool isSetSimIndex() const; + PostQueue& getQueue() { return queue_;}; + private: std::shared_ptr m_message; bool m_is_error; @@ -60,6 +62,7 @@ private: int m_account_id; TelNetworkDefaultDataSubs_t m_sim_index; TelNetworkDefaultDataSubs_t m_default_sim_index; + PostQueue& queue_; }; class BaseMessageServiceCallbackData : public common::CallbackUserData { @@ -94,19 +97,21 @@ protected: class MessageBodyCallbackData : public BaseMessageServiceCallbackData { public: - MessageBodyCallbackData(); + MessageBodyCallbackData(PostQueue& queue); virtual ~MessageBodyCallbackData(); void setMessage(std::shared_ptr message); std::shared_ptr getMessage() const; + PostQueue& getQueue() { return queue_;}; private: std::shared_ptr m_message; + PostQueue& queue_; }; class MessageAttachmentCallbackData : public BaseMessageServiceCallbackData { public: - MessageAttachmentCallbackData(); + MessageAttachmentCallbackData(PostQueue& queue); virtual ~MessageAttachmentCallbackData(); void setMessageAttachment(std::shared_ptr messageAttachment); @@ -122,14 +127,16 @@ public: void setNth(const int nth); int getNth() const; + PostQueue& getQueue() { return queue_;}; private: std::shared_ptr m_message_attachment; int m_nth; + PostQueue& queue_; }; class SyncCallbackData : public BaseMessageServiceCallbackData { public: - SyncCallbackData(); + SyncCallbackData(PostQueue& queue); virtual ~SyncCallbackData(); void setLimit(const unsigned long limit); @@ -141,17 +148,19 @@ public: void setAccountId(int account_id); int getAccountId() const; + PostQueue& getQueue() { return queue_;}; protected: bool m_is_limit; unsigned long m_limit; long m_op_id; int m_account_id; + PostQueue& queue_; }; class SyncFolderCallbackData : public SyncCallbackData { public: - SyncFolderCallbackData(); + SyncFolderCallbackData(PostQueue& queue); virtual ~SyncFolderCallbackData(); void setMessageFolder(std::shared_ptr message_folder); diff --git a/src/messaging/message_service_email.cc b/src/messaging/message_service_email.cc index 0ae93aa1..e04d36c7 100644 --- a/src/messaging/message_service_email.cc +++ b/src/messaging/message_service_email.cc @@ -107,7 +107,7 @@ static gboolean loadMessageAttachmentTask(void* data) args[JSON_DATA_MESSAGE_ATTACHMENT] = MessagingUtil::messageAttachmentToJson(att); obj[JSON_DATA] = picojson::value(args); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); diff --git a/src/messaging/message_service_short_msg.cc b/src/messaging/message_service_short_msg.cc index d45e6690..fe780677 100644 --- a/src/messaging/message_service_short_msg.cc +++ b/src/messaging/message_service_short_msg.cc @@ -133,7 +133,7 @@ static gboolean loadMessageBodyTask(void* data) args[JSON_DATA_MESSAGE_BODY] = MessagingUtil::messageBodyToJson(body); obj[JSON_DATA] = picojson::value(args); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); diff --git a/src/messaging/message_storage_email.cc b/src/messaging/message_storage_email.cc index 3cc6e62c..b6a732bc 100644 --- a/src/messaging/message_storage_email.cc +++ b/src/messaging/message_storage_email.cc @@ -47,7 +47,7 @@ static gboolean callError(void* data) auto json = callback->getJson(); picojson::object& obj = json->get(); if (json->contains(JSON_CALLBACK_ID) && obj.at(JSON_CALLBACK_ID).is()) { - PostQueue::getInstance().resolve(obj.at(JSON_CALLBACK_ID).get(), + callback->getQueue().resolve(obj.at(JSON_CALLBACK_ID).get(), json->serialize()); } else { LoggerE("json is incorrect - missing required member"); diff --git a/src/messaging/message_storage_short_msg.cc b/src/messaging/message_storage_short_msg.cc index 1a5fdd57..002df5ca 100644 --- a/src/messaging/message_storage_short_msg.cc +++ b/src/messaging/message_storage_short_msg.cc @@ -210,7 +210,7 @@ static gboolean findFoldersCB(void* data) obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); diff --git a/src/messaging/messages_callback_user_data.cc b/src/messaging/messages_callback_user_data.cc index 257bb54b..cdce5dc0 100644 --- a/src/messaging/messages_callback_user_data.cc +++ b/src/messaging/messages_callback_user_data.cc @@ -7,17 +7,19 @@ namespace extension { namespace messaging { -MessagesCallbackUserData::MessagesCallbackUserData(): +MessagesCallbackUserData::MessagesCallbackUserData(PostQueue& queue): common::CallbackUserData(), m_is_error(false), - m_service_type(MessageType::UNDEFINED) + m_service_type(MessageType::UNDEFINED), + queue_(queue) { } -MessagesCallbackUserData::MessagesCallbackUserData(long cid, bool keep): +MessagesCallbackUserData::MessagesCallbackUserData(long cid, PostQueue& queue, bool keep): common::CallbackUserData(), m_is_error(false), - m_service_type(MessageType::UNDEFINED) + m_service_type(MessageType::UNDEFINED), + queue_(queue) { auto json = std::shared_ptr(new picojson::value(picojson::object())); picojson::object& o = json->get(); diff --git a/src/messaging/messages_callback_user_data.h b/src/messaging/messages_callback_user_data.h index 7317c84c..3e598f32 100644 --- a/src/messaging/messages_callback_user_data.h +++ b/src/messaging/messages_callback_user_data.h @@ -20,8 +20,8 @@ class Message; class MessagesCallbackUserData: public common::CallbackUserData { public: - MessagesCallbackUserData(); - MessagesCallbackUserData(long cid, bool keep = false); + MessagesCallbackUserData(PostQueue& queue); + MessagesCallbackUserData(long cid, PostQueue& queue, bool keep = false); virtual ~MessagesCallbackUserData(); void addMessage(std::shared_ptr msg); @@ -37,12 +37,15 @@ public: void setMessageServiceType(MessageType m_msg_type); MessageType getMessageServiceType() const; + PostQueue& getQueue() { return queue_;}; + private: std::vector> m_messages; bool m_is_error; std::string m_err_name; std::string m_err_message; MessageType m_service_type; + PostQueue& queue_; }; }//messaging diff --git a/src/messaging/messages_change_callback.cc b/src/messaging/messages_change_callback.cc index 3806c3ad..161fc51f 100644 --- a/src/messaging/messages_change_callback.cc +++ b/src/messaging/messages_change_callback.cc @@ -38,8 +38,9 @@ const char* MESSAGESREMOVED = "messagesremoved"; MessagesChangeCallback::MessagesChangeCallback( long cid, int service_id, - MessageType service_type) : - m_callback_data(cid, true), + MessageType service_type, + PostQueue& queue) : + m_callback_data(cid, queue, true), m_service_id(service_id), m_msg_type(service_type), m_is_act(true) @@ -127,7 +128,7 @@ void MessagesChangeCallback::added(const MessagePtrVector& msgs) obj[JSON_ACTION] = picojson::value(MESSAGESADDED); obj[JSON_DATA] = picojson::value(array); - PostQueue::getInstance().addAndResolve(obj.at( + m_callback_data.getQueue().addAndResolve(obj.at( JSON_CALLBACK_ID).get(), PostPriority::MEDIUM, json->serialize()); } else { LoggerE("json is incorrect - missing required member"); @@ -164,7 +165,7 @@ void MessagesChangeCallback::updated(const MessagePtrVector& msgs) obj[JSON_ACTION] = picojson::value(MESSAGESUPDATED); obj[JSON_DATA] = picojson::value(array); - PostQueue::getInstance().addAndResolve(obj.at( + m_callback_data.getQueue().addAndResolve(obj.at( JSON_CALLBACK_ID).get(), PostPriority::LOW, json->serialize()); } else { LoggerE("json is incorrect - missing required member"); @@ -203,7 +204,7 @@ void MessagesChangeCallback::removed(const MessagePtrVector& msgs) LoggerD("MESSAGES: %s", picojson::value(array).serialize().c_str()); obj[JSON_DATA] = picojson::value(array); - PostQueue::getInstance().addAndResolve(obj.at( + m_callback_data.getQueue().addAndResolve(obj.at( JSON_CALLBACK_ID).get(), PostPriority::LAST, json->serialize()); } else { LoggerE("json is incorrect - missing required member"); diff --git a/src/messaging/messages_change_callback.h b/src/messaging/messages_change_callback.h index 5270823a..8198bd2d 100644 --- a/src/messaging/messages_change_callback.h +++ b/src/messaging/messages_change_callback.h @@ -27,7 +27,8 @@ public: MessagesChangeCallback( long cid, int service_id, - MessageType service_type); + MessageType service_type, + PostQueue& queue); virtual ~MessagesChangeCallback(); void added(const MessagePtrVector& messages); diff --git a/src/messaging/messaging_extension.cc b/src/messaging/messaging_extension.cc index cde1127d..33c3d90c 100644 --- a/src/messaging/messaging_extension.cc +++ b/src/messaging/messaging_extension.cc @@ -41,5 +41,5 @@ common::Instance* MessagingExtension::CreateInstance() { LoggerE("Initializing the email service failed (%s)", ret.message().c_str()); return nullptr; } - return &extension::messaging::MessagingInstance::getInstance(); + return new extension::messaging::MessagingInstance(); } diff --git a/src/messaging/messaging_instance.cc b/src/messaging/messaging_instance.cc index 76af3e6a..2030e356 100644 --- a/src/messaging/messaging_instance.cc +++ b/src/messaging/messaging_instance.cc @@ -123,13 +123,9 @@ const std::string kPrivilegeMessagingWrite = "http://tizen.org/privilege/messagi } -MessagingInstance& MessagingInstance::getInstance() -{ - static MessagingInstance instance; - return instance; -} - -MessagingInstance::MessagingInstance() +MessagingInstance::MessagingInstance(): + manager_(*this), + queue_(*this) { LoggerD("Entered"); using std::placeholders::_1; @@ -173,7 +169,7 @@ MessagingInstance::~MessagingInstance() ReportError(ret, &args); \ obj[JSON_DATA] = picojson::value(args); \ obj[JSON_ACTION] = picojson::value(action); \ - PostQueue::getInstance().addAndResolve( \ + queue_.addAndResolve( \ obj.at(JSON_CALLBACK_ID).get(), \ PostPriority::HIGH, \ json->serialize() \ @@ -196,7 +192,7 @@ void MessagingInstance::GetMessageServices(const picojson::value& args, at(GET_MESSAGE_SERVICES_ARGS_MESSAGE_SERVICE_TYPE); const double callbackId = args.get(JSON_CALLBACK_ID).get(); // above values should be validated in js - MessagingManager::getInstance().getMessageServices(serviceTag.to_str(), callbackId); + manager_.getMessageServices(serviceTag.to_str(), callbackId); } void MessagingInstance::MessageServiceSendMessage(const picojson::value& args, @@ -226,7 +222,7 @@ void MessagingInstance::MessageServiceSendMessage(const picojson::value& args, POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR) } - MessageRecipientsCallbackData* callback = new MessageRecipientsCallbackData(); + MessageRecipientsCallbackData* callback = new MessageRecipientsCallbackData(queue_); long simIndex = 0; int serviceId = 0; @@ -244,8 +240,8 @@ void MessagingInstance::MessageServiceSendMessage(const picojson::value& args, json, obj, JSON_CALLBACK_ERROR) } - PostQueue::getInstance().add(static_cast(callbackId), PostPriority::HIGH); - auto service = MessagingManager::getInstance().getMessageService(serviceId); + queue_.add(static_cast(callbackId), PostPriority::HIGH); + auto service = manager_.getMessageService(serviceId); ret = service->sendMessage(callback); if (!ret) { @@ -281,13 +277,13 @@ void MessagingInstance::MessageServiceLoadMessageBody(const picojson::value& arg POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR) } - MessageBodyCallbackData* callback = new MessageBodyCallbackData(); + MessageBodyCallbackData* callback = new MessageBodyCallbackData(queue_); callback->setJson(json); callback->setMessage(message); - PostQueue::getInstance().add(static_cast(callbackId), PostPriority::HIGH); - auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data)); + queue_.add(static_cast(callbackId), PostPriority::HIGH); + auto service = manager_.getMessageService(getServiceIdFromJSON(data)); ret = service->loadMessageBody(callback); if (ret.IsError()) { POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR) @@ -311,7 +307,7 @@ void MessagingInstance::MessageServiceLoadMessageAttachment(const picojson::valu picojson::value attachment = data.at(LOAD_MESSAGE_ATTACHMENT_ARGS_ATTACHMENT); const double callbackId = args.get(JSON_CALLBACK_ID).get(); - MessageAttachmentCallbackData* callback = new MessageAttachmentCallbackData(); + MessageAttachmentCallbackData* callback = new MessageAttachmentCallbackData(queue_); callback->setMessageAttachment(MessagingUtil::jsonToMessageAttachment(attachment)); auto json = std::shared_ptr(new picojson::value(picojson::object())); @@ -319,8 +315,8 @@ void MessagingInstance::MessageServiceLoadMessageAttachment(const picojson::valu obj[JSON_CALLBACK_ID] = picojson::value(callbackId); callback->setJson(json); - PostQueue::getInstance().add(static_cast(callbackId), PostPriority::HIGH); - auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data)); + queue_.add(static_cast(callbackId), PostPriority::HIGH); + auto service = manager_.getMessageService(getServiceIdFromJSON(data)); const auto result = service->loadMessageAttachment(callback); if (result.IsError()) { POST_AND_RETURN(result, json, obj, JSON_CALLBACK_ERROR) @@ -362,15 +358,15 @@ void MessagingInstance::MessageServiceSync(const picojson::value& args, picojson::object& obj = json->get(); obj[JSON_CALLBACK_ID] = picojson::value(callbackId); - SyncCallbackData *callback = new SyncCallbackData(); + SyncCallbackData *callback = new SyncCallbackData(queue_); callback->setJson(json); callback->setAccountId(id); callback->setLimit(limit); - PostQueue::getInstance().add(static_cast(callbackId), PostPriority::HIGH); + queue_.add(static_cast(callbackId), PostPriority::HIGH); long op_id = -1; - const auto result = MessagingManager::getInstance().getMessageService(id)->sync(callback, &op_id); + const auto result = manager_.getMessageService(id)->sync(callback, &op_id); if (result) { ReportSuccess(picojson::value(static_cast(op_id)), out); @@ -416,16 +412,16 @@ void MessagingInstance::MessageServiceSyncFolder(const picojson::value& args, picojson::object& obj = json->get(); obj[JSON_CALLBACK_ID] = picojson::value(callbackId); - SyncFolderCallbackData *callback = new SyncFolderCallbackData(); + SyncFolderCallbackData *callback = new SyncFolderCallbackData(queue_); callback->setJson(json); callback->setAccountId(id); callback->setMessageFolder(MessagingUtil::jsonToMessageFolder(v_folder)); callback->setLimit(limit); - PostQueue::getInstance().add(static_cast(callbackId), PostPriority::HIGH); + queue_.add(static_cast(callbackId), PostPriority::HIGH); long op_id = -1; - const auto result = MessagingManager::getInstance().getMessageService(id)->syncFolder(callback, &op_id); + const auto result = manager_.getMessageService(id)->syncFolder(callback, &op_id); if (result) { ReportSuccess(picojson::value(static_cast(op_id)), out); } else { @@ -464,7 +460,7 @@ void MessagingInstance::MessageServiceStopSync(const picojson::value& args, op_id = static_cast(v_op_id.get()); } - const auto result = MessagingManager::getInstance().getMessageService(id)->stopSync(op_id); + const auto result = manager_.getMessageService(id)->stopSync(op_id); if (result) { ReportSuccess(out); @@ -504,7 +500,7 @@ void MessagingInstance::MessageStorageAddDraft(const picojson::value& args, POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR) } - MessageCallbackUserData* callback = new MessageCallbackUserData(); + MessageCallbackUserData* callback = new MessageCallbackUserData(queue_); callback->setMessage(message); int serviceId = getServiceIdFromJSON(data); @@ -512,8 +508,8 @@ void MessagingInstance::MessageStorageAddDraft(const picojson::value& args, callback->setJson(json); - PostQueue::getInstance().add(static_cast(callbackId), PostPriority::HIGH); - auto service = MessagingManager::getInstance().getMessageService(serviceId); + queue_.add(static_cast(callbackId), PostPriority::HIGH); + auto service = manager_.getMessageService(serviceId); service->getMsgStorage()->addDraftMessage(callback); } @@ -551,9 +547,9 @@ void MessagingInstance::MessageStorageFindMessages(const picojson::value& args, (MessagingUtil::getValueFromJSONObject(data, FIND_FOLDERS_ARGS_OFFSET)); int serviceId = getServiceIdFromJSON(data); - auto storage = MessagingManager::getInstance().getMessageService(serviceId)->getMsgStorage(); + auto storage = manager_.getMessageService(serviceId)->getMsgStorage(); - FindMsgCallbackUserData* callback = new FindMsgCallbackUserData(); + FindMsgCallbackUserData* callback = new FindMsgCallbackUserData(queue_); callback->setFilter(filter); callback->setLimit(limit); callback->setOffset(offset); @@ -561,7 +557,7 @@ void MessagingInstance::MessageStorageFindMessages(const picojson::value& args, callback->setSortMode(sortMode); callback->setJson(json); - PostQueue::getInstance().add(static_cast(callbackId), PostPriority::HIGH); + queue_.add(static_cast(callbackId), PostPriority::HIGH); storage->findMessages(callback); } @@ -582,7 +578,7 @@ void MessagingInstance::MessageStorageRemoveMessages(const picojson::value& args picojson::array messages = data.at(REMOVE_MESSAGES_ARGS_MESSAGES).get(); const double callbackId = args.get(JSON_CALLBACK_ID).get(); - MessagesCallbackUserData* callback = new MessagesCallbackUserData(); + MessagesCallbackUserData* callback = new MessagesCallbackUserData(queue_); auto each = [callback] (picojson::value& v)->void { std::shared_ptr message; @@ -599,9 +595,9 @@ void MessagingInstance::MessageStorageRemoveMessages(const picojson::value& args obj[JSON_CALLBACK_ID] = picojson::value(callbackId); callback->setJson(json); - auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data)); + auto service = manager_.getMessageService(getServiceIdFromJSON(data)); - PostQueue::getInstance().add(static_cast(callbackId), PostPriority::HIGH); + queue_.add(static_cast(callbackId), PostPriority::HIGH); service->getMsgStorage()->removeMessages(callback); } @@ -623,7 +619,7 @@ void MessagingInstance::MessageStorageUpdateMessages(const picojson::value& args auto pico_array = pico_messages.get(); const double callbackId = args.get(JSON_CALLBACK_ID).get(); - auto callback = new MessagesCallbackUserData(); + auto callback = new MessagesCallbackUserData(queue_); std::vector> messages; std::for_each(pico_array.begin(), pico_array.end(), [&callback](picojson::value& v)->void { @@ -639,9 +635,9 @@ void MessagingInstance::MessageStorageUpdateMessages(const picojson::value& args obj[JSON_CALLBACK_ID] = picojson::value(callbackId); callback->setJson(json); - auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data)); + auto service = manager_.getMessageService(getServiceIdFromJSON(data)); - PostQueue::getInstance().add(static_cast(callbackId), PostPriority::HIGH); + queue_.add(static_cast(callbackId), PostPriority::HIGH); service->getMsgStorage()->updateMessages(callback); } @@ -678,7 +674,7 @@ void MessagingInstance::MessageStorageFindConversations(const picojson::value& a int serviceId = getServiceIdFromJSON(data); - ConversationCallbackData* callback = new ConversationCallbackData(); + ConversationCallbackData* callback = new ConversationCallbackData(queue_); callback->setFilter(filter); callback->setLimit(limit); callback->setOffset(offset); @@ -686,8 +682,8 @@ void MessagingInstance::MessageStorageFindConversations(const picojson::value& a callback->setSortMode(sortMode); callback->setJson(json); - PostQueue::getInstance().add(static_cast(callbackId), PostPriority::HIGH); - auto storage = MessagingManager::getInstance().getMessageService(serviceId)->getMsgStorage(); + queue_.add(static_cast(callbackId), PostPriority::HIGH); + auto storage = manager_.getMessageService(serviceId)->getMsgStorage(); storage->findConversations(callback); } @@ -712,7 +708,7 @@ void MessagingInstance::MessageStorageRemoveConversations(const picojson::value& picojson::object& obj = json->get(); obj[JSON_CALLBACK_ID] = picojson::value(callbackId); - ConversationCallbackData* callback = new ConversationCallbackData(); + ConversationCallbackData* callback = new ConversationCallbackData(queue_); PlatformResult ret(ErrorCode::NO_ERROR); for (auto it = conversations.begin(); it != conversations.end(); ++it) { @@ -726,9 +722,9 @@ void MessagingInstance::MessageStorageRemoveConversations(const picojson::value& callback->setJson(json); - auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data)); + auto service = manager_.getMessageService(getServiceIdFromJSON(data)); - PostQueue::getInstance().add(static_cast(callbackId), PostPriority::HIGH); + queue_.add(static_cast(callbackId), PostPriority::HIGH); service->getMsgStorage()->removeConversations(callback); } @@ -758,12 +754,12 @@ void MessagingInstance::MessageStorageFindFolders(const picojson::value& args, POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR) } - FoldersCallbackData* callback = new FoldersCallbackData(); + FoldersCallbackData* callback = new FoldersCallbackData(queue_); callback->setFilter(filter); callback->setJson(json); - PostQueue::getInstance().add(static_cast(callbackId), PostPriority::HIGH); - auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data)); + queue_.add(static_cast(callbackId), PostPriority::HIGH); + auto service = manager_.getMessageService(getServiceIdFromJSON(data)); service->getMsgStorage()->findFolders(callback); } @@ -795,10 +791,10 @@ void MessagingInstance::MessageStorageAddMessagesChangeListener(const picojson:: int serviceId = getServiceIdFromJSON(data); - auto service = MessagingManager::getInstance().getMessageService(serviceId); + auto service = manager_.getMessageService(serviceId); std::shared_ptr callback(new MessagesChangeCallback( - static_cast(callbackId), serviceId, service->getMsgServiceType())); + static_cast(callbackId), serviceId, service->getMsgServiceType(),queue_)); callback->setFilter(filter); @@ -836,10 +832,10 @@ void MessagingInstance::MessageStorageAddConversationsChangeListener(const picoj int serviceId = getServiceIdFromJSON(data); - auto service = MessagingManager::getInstance().getMessageService(serviceId); + auto service = manager_.getMessageService(serviceId); std::shared_ptr callback(new ConversationsChangeCallback( - static_cast(callbackId), serviceId, service->getMsgServiceType())); + static_cast(callbackId), serviceId, service->getMsgServiceType(), queue_)); callback->setFilter(filter); @@ -877,10 +873,10 @@ void MessagingInstance::MessageStorageAddFolderChangeListener(const picojson::va int serviceId = getServiceIdFromJSON(data); - auto service = MessagingManager::getInstance().getMessageService(serviceId); + auto service = manager_.getMessageService(serviceId); std::shared_ptr callback(new FoldersChangeCallback( - static_cast(callbackId), serviceId, service->getMsgServiceType())); + static_cast(callbackId), serviceId, service->getMsgServiceType(), queue_)); callback->setFilter(filter); @@ -907,7 +903,7 @@ void MessagingInstance::MessageStorageRemoveChangeListener(const picojson::value const long watchId = static_cast( data.at(REMOVE_CHANGE_LISTENER_ARGS_WATCHID).get()); - auto service = MessagingManager::getInstance().getMessageService(getServiceIdFromJSON(data)); + auto service = manager_.getMessageService(getServiceIdFromJSON(data)); service->getMsgStorage()->removeChangeListener(watchId); ReportSuccess(out); diff --git a/src/messaging/messaging_instance.h b/src/messaging/messaging_instance.h index e321b2e3..0132beaf 100644 --- a/src/messaging/messaging_instance.h +++ b/src/messaging/messaging_instance.h @@ -7,16 +7,17 @@ #include "common/extension.h" +#include "messaging_manager.h" +#include "messaging_util.h" + namespace extension { namespace messaging { class MessagingInstance: public common::ParsedInstance { public: - static MessagingInstance& getInstance(); + MessagingInstance(); + virtual ~MessagingInstance(); private: - MessagingInstance(); - virtual ~MessagingInstance(); - void GetMessageServices(const picojson::value& args, picojson::object& out); void MessageServiceSendMessage(const picojson::value& args, @@ -53,6 +54,9 @@ private: picojson::object& out); void MessageStorageRemoveChangeListener(const picojson::value& args, picojson::object& out); + + MessagingManager manager_; + PostQueue queue_; }; } // namespace messaging diff --git a/src/messaging/messaging_manager.cc b/src/messaging/messaging_manager.cc index ae57ebd1..b6688359 100755 --- a/src/messaging/messaging_manager.cc +++ b/src/messaging/messaging_manager.cc @@ -31,7 +31,16 @@ namespace { const int UNDEFINED_MESSAGE_SERVICE = -1; } -MessagingManager::MessagingManager() +MsgManagerCallbackData::MsgManagerCallbackData(MessagingInstance& instance): + json(nullptr), + services_map(nullptr), + sms_service(nullptr), + mms_service(nullptr), + instance_(instance) { +} + +MessagingManager::MessagingManager(MessagingInstance& instance): + instance_(instance) { LoggerD("Entered"); int ret = msg_open_msg_handle(&m_msg_handle); @@ -68,18 +77,11 @@ MessagingManager::~MessagingManager() } } -MessagingManager& MessagingManager::getInstance() -{ - LoggerD("Entered"); - static MessagingManager instance; - return instance; -} - static gboolean callbackCompleted(const std::shared_ptr& user_data) { LoggerD("Entered"); std::shared_ptr response = user_data->json; - MessagingInstance::getInstance().PostMessage(response->serialize().c_str()); + user_data->instance_.PostMessage(response->serialize().c_str()); return false; } @@ -234,7 +236,7 @@ void MessagingManager::getMessageServices(const std::string& type, double callba obj[JSON_CALLBACK_ID] = picojson::value(callbackId); obj[JSON_DATA] = picojson::value(type); - auto user_data = std::shared_ptr(new MsgManagerCallbackData()); + auto user_data = std::shared_ptr(new MsgManagerCallbackData(instance_)); user_data->json = json; user_data->services_map = &m_email_services; user_data->sms_service = &m_sms_service; diff --git a/src/messaging/messaging_manager.h b/src/messaging/messaging_manager.h index 2ba815ab..1cc7ba34 100755 --- a/src/messaging/messaging_manager.h +++ b/src/messaging/messaging_manager.h @@ -15,30 +15,36 @@ namespace extension { namespace messaging { +class MessagingInstance; + class MsgManagerCallbackData { public: + explicit MsgManagerCallbackData(MessagingInstance& instance_); std::shared_ptr json; std::map* services_map; std::pair* sms_service; std::pair* mms_service; + MessagingInstance& instance_; }; class MessagingManager { public: - static MessagingManager& getInstance(); - void getMessageServices(const std::string& type, double callbackId); - MessageService* getMessageService(const int id); + explicit MessagingManager(MessagingInstance& instance); + MessagingManager(const MessagingManager &); + virtual ~MessagingManager(); + + void getMessageServices(const std::string& type, double callbackId); + MessageService* getMessageService(const int id); private: - MessagingManager(); - MessagingManager(const MessagingManager &); void operator=(const MessagingManager &); - virtual ~MessagingManager(); msg_handle_t m_msg_handle; std::map m_email_services; std::pair m_sms_service; std::pair m_mms_service; + + MessagingInstance& instance_; }; } // namespace messaging diff --git a/src/messaging/messaging_util.cc b/src/messaging/messaging_util.cc index 284b9281..06f93406 100644 --- a/src/messaging/messaging_util.cc +++ b/src/messaging/messaging_util.cc @@ -961,14 +961,7 @@ PlatformResult MessagingUtil::jsonToMessageConversation(const picojson::value& j return PlatformResult(ErrorCode::NO_ERROR); } -PostQueue& PostQueue::getInstance() -{ - LoggerD("Entered"); - static PostQueue instance; - return instance; -} - -PostQueue::PostQueue() +PostQueue::PostQueue(MessagingInstance& instance): instance_(instance) { LoggerD("Entered"); } @@ -1056,7 +1049,7 @@ void PostQueue::resolve(PostPriority p) i = tasks_.erase(i); tasks_mutex_.unlock(); - MessagingInstance::getInstance().PostMessage(json.c_str()); + instance_.PostMessage(json.c_str()); } else if (TaskState::NEW == i->second->state()) { tasks_mutex_.unlock(); diff --git a/src/messaging/messaging_util.h b/src/messaging/messaging_util.h index 1ae51630..338274e0 100644 --- a/src/messaging/messaging_util.h +++ b/src/messaging/messaging_util.h @@ -108,6 +108,7 @@ class Conversation; class MessageConversation; class Message; class MessageBody; +class MessagingInstance; class MessagingUtil { public: @@ -183,7 +184,9 @@ enum PostPriority { class PostQueue { public: - static PostQueue& getInstance(); + explicit PostQueue(MessagingInstance& instance); + ~PostQueue(); + void addAndResolve(const long cid, PostPriority priority, const std::string json); void add(const long cid, PostPriority priority = PostPriority::LAST); void resolve(const long cid, const std::string json); @@ -199,14 +202,14 @@ private: typedef std::pair> TasksCollectionItem; typedef std::vector TasksCollection; - PostQueue(); PostQueue(const PostQueue &); - ~PostQueue(); void operator=(const PostQueue &); void resolve(PostPriority p); TasksCollection tasks_; std::mutex tasks_mutex_; + MessagingInstance& instance_; + class PostTask { public: PostTask(); diff --git a/src/messaging/short_message_manager.cc b/src/messaging/short_message_manager.cc index d80195fc..b0994791 100644 --- a/src/messaging/short_message_manager.cc +++ b/src/messaging/short_message_manager.cc @@ -46,7 +46,7 @@ static gboolean sendMessageCompleteCB(void* data) } if (callback->isError()) { - PostQueue::getInstance().resolve( + callback->getQueue().resolve( callback->getJson()->get().at(JSON_CALLBACK_ID).get(), callback->getJson()->serialize() ); @@ -74,7 +74,7 @@ static gboolean sendMessageCompleteCB(void* data) data[JSON_DATA_MESSAGE] = MessagingUtil::messageToJson(message); obj[JSON_DATA] = picojson::value(data); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); @@ -99,7 +99,7 @@ static gboolean addDraftMessageCompleteCB(void *data) if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( callback->getJson()->get().at(JSON_CALLBACK_ID).get(), callback->getJson()->serialize() ); @@ -115,7 +115,7 @@ static gboolean addDraftMessageCompleteCB(void *data) args[JSON_DATA_MESSAGE] = MessagingUtil::messageToJson(callback->getMessage()); obj[JSON_DATA] = picojson::value(args); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); @@ -783,7 +783,7 @@ void ShortMsgManager::removeMessages(MessagesCallbackUserData* callback) if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( callback->getJson()->get().at(JSON_CALLBACK_ID).get(), callback->getJson()->serialize() ); @@ -794,7 +794,7 @@ void ShortMsgManager::removeMessages(MessagesCallbackUserData* callback) picojson::object& obj = json->get(); obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); @@ -858,7 +858,7 @@ void ShortMsgManager::updateMessages(MessagesCallbackUserData* callback) if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( callback->getJson()->get().at(JSON_CALLBACK_ID).get(), callback->getJson()->serialize() ); @@ -880,7 +880,7 @@ void ShortMsgManager::updateMessages(MessagesCallbackUserData* callback) obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); @@ -996,7 +996,7 @@ void ShortMsgManager::findMessages(FindMsgCallbackUserData* callback) if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( callback->getJson()->get().at(JSON_CALLBACK_ID).get(), callback->getJson()->serialize() ); @@ -1016,7 +1016,7 @@ void ShortMsgManager::findMessages(FindMsgCallbackUserData* callback) obj[JSON_DATA] = picojson::value(response); obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); @@ -1064,7 +1064,7 @@ void ShortMsgManager::findConversations(ConversationCallbackData* callback) if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( callback->getJson()->get().at(JSON_CALLBACK_ID).get(), callback->getJson()->serialize() ); @@ -1083,7 +1083,7 @@ void ShortMsgManager::findConversations(ConversationCallbackData* callback) obj[JSON_DATA] = picojson::value(response); obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); @@ -1203,7 +1203,7 @@ void ShortMsgManager::removeConversations(ConversationCallbackData* callback) if (callback->isError()) { LoggerD("Calling error callback"); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( callback->getJson()->get().at(JSON_CALLBACK_ID).get(), callback->getJson()->serialize() ); @@ -1214,7 +1214,7 @@ void ShortMsgManager::removeConversations(ConversationCallbackData* callback) picojson::object& obj = json->get(); obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS); - PostQueue::getInstance().resolve( + callback->getQueue().resolve( obj.at(JSON_CALLBACK_ID).get(), json->serialize() ); -- 2.34.1