From 4c779851d4dd3a8b3c3ccf9daa95ca592b24621d Mon Sep 17 00:00:00 2001 From: Pawel Kaczmarczyk Date: Mon, 20 Nov 2017 11:39:32 +0100 Subject: [PATCH 01/16] [Messaging] Refactor singleton managers into instance's fields to prevent crash Callback could be called even after MessagingInstance object was destroyed. [Verification] Passrate didn't change Change-Id: I3ac0db270f9f7a07613a9bd53e18f3b954952944 Signed-off-by: Pawel Kaczmarczyk --- src/messaging/DBus/MessageProxy.cpp | 15 +++--- src/messaging/DBus/MessageProxy.h | 6 ++- src/messaging/DBus/SendProxy.cpp | 11 ++-- src/messaging/DBus/SendProxy.h | 6 ++- src/messaging/callback_user_data.cc | 16 +++++- src/messaging/callback_user_data.h | 9 +++- src/messaging/change_listener_container.cc | 2 - src/messaging/conversation_callback_data.cc | 3 +- src/messaging/conversation_callback_data.h | 3 +- src/messaging/conversations_change_callback.cc | 5 +- src/messaging/conversations_change_callback.h | 3 +- src/messaging/email_manager.cc | 45 ++++++++-------- src/messaging/email_manager.h | 10 ++-- src/messaging/find_msg_callback_user_data.cc | 5 +- src/messaging/find_msg_callback_user_data.h | 2 +- src/messaging/folders_change_callback.cc | 4 +- src/messaging/folders_change_callback.h | 3 +- src/messaging/message.cc | 6 ++- src/messaging/message.h | 3 +- src/messaging/message_callback_user_data.cc | 5 +- src/messaging/message_callback_user_data.h | 2 +- src/messaging/message_service.cc | 24 +++++---- src/messaging/message_service.h | 11 ++-- src/messaging/message_service_email.cc | 42 +++++++-------- src/messaging/message_service_email.h | 7 ++- src/messaging/message_service_short_msg.cc | 17 +++--- src/messaging/message_service_short_msg.h | 6 +-- src/messaging/message_storage_email.cc | 15 +++--- src/messaging/message_storage_short_msg.cc | 12 ++--- src/messaging/messages_callback_user_data.cc | 3 +- src/messaging/messages_callback_user_data.h | 3 +- src/messaging/messages_change_callback.cc | 4 +- src/messaging/messages_change_callback.h | 3 +- src/messaging/messaging_extension.cc | 5 +- src/messaging/messaging_instance.cc | 71 +++++++++++++++----------- src/messaging/messaging_instance.h | 6 +++ src/messaging/messaging_manager.cc | 12 +++-- src/messaging/messaging_util.cc | 7 +-- src/messaging/messaging_util.h | 3 +- src/messaging/short_message_manager.cc | 53 +++++++++---------- src/messaging/short_message_manager.h | 15 +++--- 41 files changed, 273 insertions(+), 210 deletions(-) mode change 100755 => 100644 src/messaging/callback_user_data.cc mode change 100755 => 100644 src/messaging/callback_user_data.h diff --git a/src/messaging/DBus/MessageProxy.cpp b/src/messaging/DBus/MessageProxy.cpp index 7cc1653..30e17b5 100644 --- a/src/messaging/DBus/MessageProxy.cpp +++ b/src/messaging/DBus/MessageProxy.cpp @@ -31,10 +31,11 @@ namespace DBus { using namespace common; -MessageProxy::MessageProxy() +MessageProxy::MessageProxy(EmailManager& manager) : common::dbus::Proxy(kDBusPathEmailStorageChange, kDBusIfaceEmailStorageChange, kDBusNameSignalEmail, kDBusPathEmailStorageChange, - kDBusIfaceEmailStorageChange) { + kDBusIfaceEmailStorageChange), + email_manager_(manager) { ScopeLogger(); } @@ -42,9 +43,9 @@ MessageProxy::~MessageProxy() { ScopeLogger(); } -PlatformResult MessageProxy::create(MessageProxyPtr* message_proxy) { +PlatformResult MessageProxy::create(EmailManager& manager, MessageProxyPtr* message_proxy) { ScopeLogger(); - message_proxy->reset(new MessageProxy()); + message_proxy->reset(new MessageProxy(manager)); if ((*message_proxy)->isNotProxyGot()) { message_proxy->reset(); return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Could not get proxy"); @@ -129,7 +130,7 @@ PlatformResult MessageProxy::handleEmailEvent(int account_id, int mail_id, int t } } - email_mail_data_t* mail_data = EmailManager::getInstance().loadMessage(mail_id); + email_mail_data_t* mail_data = email_manager_.loadMessage(mail_id); if (mail_data == NULL) { return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Failed to load email"); } @@ -170,7 +171,7 @@ PlatformResult MessageProxy::handleEmailEvent(int account_id, int mail_id, int t delete eventMsg; delete eventConv; - EmailManager::getInstance().freeMessage(mail_data); + email_manager_.freeMessage(mail_data); } else { LoggerD("Listener not registered just ignore"); } @@ -226,7 +227,7 @@ void MessageProxy::notifyEmailManager(const std::string& idsString, LoggerD("Mail id list is empty."); return; } - EmailManager::getInstance().removeStatusCallback(ids, status); + email_manager_.removeStatusCallback(ids, status); } void MessageProxy::handleThreadRemoveEvent(int account_id, int thread_id) { diff --git a/src/messaging/DBus/MessageProxy.h b/src/messaging/DBus/MessageProxy.h index 6006117..4089fcd 100644 --- a/src/messaging/DBus/MessageProxy.h +++ b/src/messaging/DBus/MessageProxy.h @@ -30,6 +30,7 @@ namespace extension { namespace messaging { +class EmailManager; namespace DBus { class MessageProxy; @@ -38,10 +39,10 @@ typedef std::shared_ptr MessageProxyPtr; class MessageProxy : public common::dbus::Proxy { public: virtual ~MessageProxy(); - static common::PlatformResult create(MessageProxyPtr *message_proxy); + static common::PlatformResult create(EmailManager &manager, MessageProxyPtr *message_proxy); protected: - MessageProxy(); + MessageProxy(EmailManager &manager); virtual void signalCallback(GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters); @@ -57,6 +58,7 @@ class MessageProxy : public common::dbus::Proxy { void notifyEmailManager(const std::string &idsString, email_noti_on_storage_event status); void handleThreadRemoveEvent(int account_id, int thread_id); common::PlatformResult handleMailboxEvent(int account_id, int mailbox_id, int event); + EmailManager &email_manager_; }; } // namespace DBus diff --git a/src/messaging/DBus/SendProxy.cpp b/src/messaging/DBus/SendProxy.cpp index 0e8dc8e..f2a57ef 100644 --- a/src/messaging/DBus/SendProxy.cpp +++ b/src/messaging/DBus/SendProxy.cpp @@ -29,7 +29,8 @@ namespace DBus { using namespace common; -SendProxy::SendProxy() : EmailSignalProxy(kDBusPathNetworkStatus, kDBusIfaceNetworkStatus) { +SendProxy::SendProxy(EmailManager& manager) + : EmailSignalProxy(kDBusPathNetworkStatus, kDBusIfaceNetworkStatus), email_manager_(manager) { ScopeLogger(); } @@ -37,9 +38,9 @@ SendProxy::~SendProxy() { ScopeLogger(); } -PlatformResult SendProxy::create(SendProxyPtr* send_proxy) { +PlatformResult SendProxy::create(EmailManager& manager, SendProxyPtr* send_proxy) { ScopeLogger(); - send_proxy->reset(new SendProxy()); + send_proxy->reset(new SendProxy(manager)); if ((*send_proxy)->isNotProxyGot()) { send_proxy->reset(); return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Could not get send proxy"); @@ -59,8 +60,8 @@ void SendProxy::handleEmailSignal(const int status, const int account_id, const "received email signal with:\n status: %d\n account_id: %d\n " "source: %s\n mail_id: %d\n error_code: %d", status, account_id, source.c_str(), mail_id, error_code); - EmailManager::getInstance().sendStatusCallback( - mail_id, static_cast(status), error_code); + email_manager_.sendStatusCallback(mail_id, static_cast(status), + error_code); break; default: LoggerD("Unrecognized status %d, ignoring", status); diff --git a/src/messaging/DBus/SendProxy.h b/src/messaging/DBus/SendProxy.h index e9f211b..8e32716 100644 --- a/src/messaging/DBus/SendProxy.h +++ b/src/messaging/DBus/SendProxy.h @@ -23,6 +23,7 @@ namespace extension { namespace messaging { +class EmailManager; namespace DBus { class SendProxy; @@ -31,12 +32,13 @@ typedef std::shared_ptr SendProxyPtr; class SendProxy : public EmailSignalProxy { public: virtual ~SendProxy(); - static common::PlatformResult create(SendProxyPtr* send_proxy); + static common::PlatformResult create(EmailManager& manager, SendProxyPtr* send_proxy); protected: - SendProxy(); + SendProxy(EmailManager& manager); virtual void handleEmailSignal(const int status, const int account_id, const std::string& source, const int op_handle, const int error_code); + EmailManager& email_manager_; }; } // DBus diff --git a/src/messaging/callback_user_data.cc b/src/messaging/callback_user_data.cc old mode 100755 new mode 100644 index dfe796a..e29ba89 --- a/src/messaging/callback_user_data.cc +++ b/src/messaging/callback_user_data.cc @@ -19,18 +19,22 @@ #include "common/logger.h" #include "common/tools.h" +#include "messaging_instance.h" + using common::tools::ReportSuccess; using common::tools::ReportError; namespace extension { namespace messaging { -CallbackUserData::CallbackUserData(PostQueue& queue, long cid, bool keep /* = false */) +CallbackUserData::CallbackUserData(PostQueue& queue, long cid, MessagingInstance& instance, + bool keep /* = false */) : json_(picojson::object()), obj_(json_.get()), cid_(cid), queue_(queue), - result_(common::ErrorCode::NO_ERROR) { + result_(common::ErrorCode::NO_ERROR), + instance_(instance) { ScopeLogger(); if (!keep) { // this is not listener, add callbackId @@ -101,5 +105,13 @@ void CallbackUserData::AddJsonData(const char* key, const picojson::value& value obj_[key] = value; } +EmailManager& CallbackUserData::getEmailManager() { + return instance_.getEmailManager(); +} + +ShortMsgManager& CallbackUserData::getShortMsgManager() { + return instance_.getShortMsgManager(); +} + } // messaging } // extension diff --git a/src/messaging/callback_user_data.h b/src/messaging/callback_user_data.h old mode 100755 new mode 100644 index 6f72c83..a51aea9 --- a/src/messaging/callback_user_data.h +++ b/src/messaging/callback_user_data.h @@ -26,9 +26,12 @@ namespace extension { namespace messaging { +class EmailManager; +class ShortMsgManager; + class CallbackUserData { public: - CallbackUserData(PostQueue& queue, long cid, bool keep = false); + CallbackUserData(PostQueue& queue, long cid, MessagingInstance& instance, bool keep = false); virtual ~CallbackUserData(); bool IsError() const; @@ -42,6 +45,9 @@ class CallbackUserData { void AddAndPost(PostPriority p); bool HasQueue(const PostQueue& q) const; + EmailManager& getEmailManager(); + ShortMsgManager& getShortMsgManager(); + private: void AddJsonData(const char* key, const picojson::value& value); @@ -50,6 +56,7 @@ class CallbackUserData { long cid_; PostQueue& queue_; common::PlatformResult result_; + MessagingInstance& instance_; }; } // messaging diff --git a/src/messaging/change_listener_container.cc b/src/messaging/change_listener_container.cc index e201c8f..b082446 100644 --- a/src/messaging/change_listener_container.cc +++ b/src/messaging/change_listener_container.cc @@ -211,8 +211,6 @@ ChangeListenerContainer::ChangeListeners::ListenerGroup::Get 0) { - instance.m_slot_size = slot_size; + m_slot_size = slot_size; } - PlatformResult ret = DBus::SyncProxy::create( - DBus::kDBusPathNetworkStatus, DBus::kDBusIfaceNetworkStatus, &instance.m_proxy_sync); + PlatformResult ret = DBus::SyncProxy::create(DBus::kDBusPathNetworkStatus, + DBus::kDBusIfaceNetworkStatus, &m_proxy_sync); CHECK_ERROR(ret, "create sync proxy failed"); - if (!instance.m_proxy_sync) { + if (!m_proxy_sync) { LoggerE("Sync proxy is null"); return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Sync proxy is null"); } - instance.m_proxy_sync->signalSubscribe(); + m_proxy_sync->signalSubscribe(); ret = DBus::LoadBodyProxy::create(DBus::kDBusPathNetworkStatus, DBus::kDBusIfaceNetworkStatus, - &instance.m_proxy_load_body); + &m_proxy_load_body); CHECK_ERROR(ret, "create load body proxy failed"); - if (!instance.m_proxy_load_body) { + if (!m_proxy_load_body) { return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Load body proxy is null"); } - instance.m_proxy_load_body->signalSubscribe(); + m_proxy_load_body->signalSubscribe(); // ret = DBus::LoadAttachmentProxy::create(DBus::Proxy::DBUS_PATH_NETWORK_STATUS, // DBus::Proxy::DBUS_IFACE_NETWORK_STATUS, @@ -141,21 +134,21 @@ PlatformResult EmailManager::InitializeEmailService() { // } // m_proxy_load_attachment->signalSubscribe(); - ret = DBus::MessageProxy::create(&instance.m_proxy_messageStorage); + ret = DBus::MessageProxy::create(*this, &m_proxy_messageStorage); CHECK_ERROR(ret, "create message proxy failed"); - if (!instance.m_proxy_messageStorage) { + if (!m_proxy_messageStorage) { return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Message proxy is null"); } - instance.m_proxy_messageStorage->signalSubscribe(); + m_proxy_messageStorage->signalSubscribe(); - ret = DBus::SendProxy::create(&instance.m_proxy_send); + ret = DBus::SendProxy::create(*this, &m_proxy_send); CHECK_ERROR(ret, "create send proxy failed"); - if (!instance.m_proxy_send) { + if (!m_proxy_send) { return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Send proxy is null"); } - instance.m_proxy_send->signalSubscribe(); + m_proxy_send->signalSubscribe(); - instance.m_is_initialized = true; + m_is_initialized = true; } return PlatformResult(ErrorCode::NO_ERROR); @@ -1123,6 +1116,10 @@ PlatformResult EmailManager::FindConversationsPlatform(ConversationCallbackData* std::shared_ptr conversation; PlatformResult ret = MessageConversation::convertEmailConversationToObject( conversationsInfo.at(i).id, &conversation); + if (ret.IsError()) { + LoggerE("%d (%s)", ret.error_code(), (ret.message()).c_str()); + return ret; + } conversation->setUnreadMessages(conversationsInfo.at(i).unreadMessages); callback->addConversation(conversation); } diff --git a/src/messaging/email_manager.h b/src/messaging/email_manager.h index e6e8c1d..a591e1d 100644 --- a/src/messaging/email_manager.h +++ b/src/messaging/email_manager.h @@ -57,8 +57,10 @@ class MessageBodyCallbackData; class EmailManager { public: - static EmailManager& getInstance(); - static common::PlatformResult InitializeEmailService(); + EmailManager(); + virtual ~EmailManager(); + + common::PlatformResult InitializeEmailService(); void addDraftMessage(MessageCallbackUserData* callback); void removeMessages(MessagesCallbackUserData* callback); @@ -94,10 +96,6 @@ class EmailManager { long getUniqueOpId(); private: - EmailManager(); - EmailManager(const EmailManager&); - void operator=(const EmailManager&); - virtual ~EmailManager(); common::PlatformResult addDraftMessagePlatform(int account_id, std::shared_ptr message); common::PlatformResult addOutboxMessagePlatform(int account_id, std::shared_ptr message); common::PlatformResult addMessagePlatform(int account_id, std::shared_ptr message, diff --git a/src/messaging/find_msg_callback_user_data.cc b/src/messaging/find_msg_callback_user_data.cc index 2b309a2..f09e223 100644 --- a/src/messaging/find_msg_callback_user_data.cc +++ b/src/messaging/find_msg_callback_user_data.cc @@ -23,8 +23,9 @@ namespace extension { namespace messaging { -FindMsgCallbackUserData::FindMsgCallbackUserData(PostQueue& queue, long cid) - : CallbackUserData(queue, cid), +FindMsgCallbackUserData::FindMsgCallbackUserData(PostQueue& queue, long cid, + MessagingInstance& instance) + : CallbackUserData(queue, cid, instance), m_limit(0), m_offset(0), m_account_id(0), diff --git a/src/messaging/find_msg_callback_user_data.h b/src/messaging/find_msg_callback_user_data.h index da7f194..8445653 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 CallbackUserData { public: - FindMsgCallbackUserData(PostQueue& queue, long cid); + FindMsgCallbackUserData(PostQueue& queue, long cid, MessagingInstance& instance); virtual ~FindMsgCallbackUserData(); void setFilter(AbstractFilterPtr filter); diff --git a/src/messaging/folders_change_callback.cc b/src/messaging/folders_change_callback.cc index 59c159b..6ceda0b 100644 --- a/src/messaging/folders_change_callback.cc +++ b/src/messaging/folders_change_callback.cc @@ -28,8 +28,8 @@ const char* FOLDERSUPDATED = "foldersupdated"; const char* FOLDERSREMOVED = "foldersremoved"; FoldersChangeCallback::FoldersChangeCallback(long cid, int service_id, MessageType service_type, - PostQueue& queue) - : m_callback_data(queue, cid, true), + PostQueue& queue, MessagingInstance& instance) + : m_callback_data(queue, cid, instance, true), m_id(service_id), m_msg_type(service_type), m_is_act(true) { diff --git a/src/messaging/folders_change_callback.h b/src/messaging/folders_change_callback.h index f6649a0..1b870ec 100644 --- a/src/messaging/folders_change_callback.h +++ b/src/messaging/folders_change_callback.h @@ -37,7 +37,8 @@ class FoldersChangeCallback { public: typedef void (FoldersChangeCallback::*Signature)(const FolderPtrVector& conversations); - FoldersChangeCallback(long cid, int service_id, MessageType service_type, PostQueue& queue); + FoldersChangeCallback(long cid, int service_id, MessageType service_type, PostQueue& queue, + MessagingInstance& instance); virtual ~FoldersChangeCallback(); void added(const FolderPtrVector& folders); diff --git a/src/messaging/message.cc b/src/messaging/message.cc index a171c9a..d439357 100644 --- a/src/messaging/message.cc +++ b/src/messaging/message.cc @@ -29,6 +29,7 @@ #include "message_email.h" #include "message_mms.h" #include "message_sms.h" +#include "messaging_instance.h" #include "messaging_util.h" #include "short_message_manager.h" @@ -1476,10 +1477,11 @@ PlatformResult Message::convertPlatformShortMessageToObject(msg_struct_t msg, return PlatformResult(ErrorCode::NO_ERROR); } -PlatformResult Message::findShortMessageById(const int id, MessagePtr* message) { +PlatformResult Message::findShortMessageById(const int id, MessagingInstance& instance, + MessagePtr* message) { ScopeLogger(); msg_struct_t msg; - PlatformResult ret = ShortMsgManager::getInstance().getMessage(id, &msg); + PlatformResult ret = instance.getShortMsgManager().getMessage(id, &msg); if (ret.IsError()) { return ret; } diff --git a/src/messaging/message.h b/src/messaging/message.h index 87578ea..c4c5c15 100644 --- a/src/messaging/message.h +++ b/src/messaging/message.h @@ -145,7 +145,8 @@ class Message : public FilterableObject { // function for filling Message attributes static common::PlatformResult convertPlatformShortMessageToObject(msg_struct_t msg, Message** message); - static common::PlatformResult findShortMessageById(const int id, MessagePtr* message); + static common::PlatformResult findShortMessageById(const int id, MessagingInstance& instance, + MessagePtr* message); static common::PlatformResult addMMSBodyAndAttachmentsToStruct(const AttachmentPtrVector& attach, msg_struct_t& mms_struct, Message* message); diff --git a/src/messaging/message_callback_user_data.cc b/src/messaging/message_callback_user_data.cc index bb6f1b9..d00c46b 100644 --- a/src/messaging/message_callback_user_data.cc +++ b/src/messaging/message_callback_user_data.cc @@ -20,8 +20,9 @@ namespace extension { namespace messaging { -MessageCallbackUserData::MessageCallbackUserData(PostQueue& queue, long cid) - : CallbackUserData(queue, cid), m_account_id(0) { +MessageCallbackUserData::MessageCallbackUserData(PostQueue& queue, long cid, + MessagingInstance& instance) + : CallbackUserData(queue, cid, instance), m_account_id(0) { ScopeLogger(); } diff --git a/src/messaging/message_callback_user_data.h b/src/messaging/message_callback_user_data.h index c1f7c1a..5360f93 100644 --- a/src/messaging/message_callback_user_data.h +++ b/src/messaging/message_callback_user_data.h @@ -31,7 +31,7 @@ class PostQueue; class MessageCallbackUserData : public CallbackUserData { public: - MessageCallbackUserData(PostQueue& queue, long cid); + MessageCallbackUserData(PostQueue& queue, long cid, MessagingInstance& instance); virtual ~MessageCallbackUserData(); void setMessage(std::shared_ptr message); diff --git a/src/messaging/message_service.cc b/src/messaging/message_service.cc index aa922a5..6f683e6 100644 --- a/src/messaging/message_service.cc +++ b/src/messaging/message_service.cc @@ -41,8 +41,9 @@ const char* JSON_SERVICE_NAME = "name"; //#################### MessageRecipientsCallbackData #################### -MessageRecipientsCallbackData::MessageRecipientsCallbackData(PostQueue& queue, long cid) - : CallbackUserData(queue, cid), +MessageRecipientsCallbackData::MessageRecipientsCallbackData(PostQueue& queue, long cid, + MessagingInstance& instance) + : CallbackUserData(queue, cid, instance), m_account_id(-1), m_sim_index(TAPI_NETWORK_DEFAULT_DATA_SUBS_UNKNOWN), m_default_sim_index(TAPI_NETWORK_DEFAULT_DATA_SUBS_UNKNOWN) { @@ -122,8 +123,9 @@ TelNetworkDefaultDataSubs_t MessageRecipientsCallbackData::getDefaultSimIndex() //#################### BaseMessageServiceCallbackData #################### -BaseMessageServiceCallbackData::BaseMessageServiceCallbackData(PostQueue& queue, long cid) - : CallbackUserData(queue, cid), m_op_handle(-1) { +BaseMessageServiceCallbackData::BaseMessageServiceCallbackData(PostQueue& queue, long cid, + MessagingInstance& instance) + : CallbackUserData(queue, cid, instance), m_op_handle(-1) { ScopeLogger(); } @@ -155,8 +157,9 @@ std::shared_ptr MessageBodyCallbackData::getMessage() const { //#################### MessageAttachmentCallbackData #################### -MessageAttachmentCallbackData::MessageAttachmentCallbackData(PostQueue& queue, long cid) - : BaseMessageServiceCallbackData(queue, cid), m_nth(0) { +MessageAttachmentCallbackData::MessageAttachmentCallbackData(PostQueue& queue, long cid, + MessagingInstance& instance) + : BaseMessageServiceCallbackData(queue, cid, instance), m_nth(0) { ScopeLogger(); } @@ -183,8 +186,8 @@ int MessageAttachmentCallbackData::getNth() const { //#################### SyncCallbackData #################### -SyncCallbackData::SyncCallbackData(PostQueue& queue, long cid) - : BaseMessageServiceCallbackData(queue, cid), +SyncCallbackData::SyncCallbackData(PostQueue& queue, long cid, MessagingInstance& instance) + : BaseMessageServiceCallbackData(queue, cid, instance), m_is_limit(false), m_limit(0), m_op_id(-1), @@ -241,8 +244,9 @@ std::shared_ptr SyncFolderCallbackData::getMessageFolder() const //#################### MessageService #################### -MessageService::MessageService(int id, MessageType msgType, const std::string& name) - : m_id(id), m_msg_type(msgType), m_name(name) { +MessageService::MessageService(int id, MessageType msgType, const std::string& name, + MessagingInstance& instance) + : m_id(id), m_msg_type(msgType), m_name(name), instance_(instance) { ScopeLogger(); switch (msgType) { case MessageType::SMS: diff --git a/src/messaging/message_service.h b/src/messaging/message_service.h index e0e888e..ca16baf 100644 --- a/src/messaging/message_service.h +++ b/src/messaging/message_service.h @@ -36,7 +36,7 @@ enum MessageServiceAccountId { UNKNOWN_ACCOUNT_ID = 0, SMS_ACCOUNT_ID = 101, MMS class MessageRecipientsCallbackData : public CallbackUserData { public: - MessageRecipientsCallbackData(PostQueue& queue, long cid); + MessageRecipientsCallbackData(PostQueue& queue, long cid, MessagingInstance& instance); virtual ~MessageRecipientsCallbackData(); void setMessage(std::shared_ptr message); @@ -64,7 +64,7 @@ class MessageRecipientsCallbackData : public CallbackUserData { class BaseMessageServiceCallbackData : public CallbackUserData { public: - BaseMessageServiceCallbackData(PostQueue& queue, long cid); + BaseMessageServiceCallbackData(PostQueue& queue, long cid, MessagingInstance& instance); virtual ~BaseMessageServiceCallbackData(); /** @@ -96,7 +96,7 @@ class MessageBodyCallbackData : public BaseMessageServiceCallbackData { class MessageAttachmentCallbackData : public BaseMessageServiceCallbackData { public: - MessageAttachmentCallbackData(PostQueue& queue, long cid); + MessageAttachmentCallbackData(PostQueue& queue, long cid, MessagingInstance& instance); virtual ~MessageAttachmentCallbackData(); void setMessageAttachment(std::shared_ptr messageAttachment); @@ -119,7 +119,7 @@ class MessageAttachmentCallbackData : public BaseMessageServiceCallbackData { class SyncCallbackData : public BaseMessageServiceCallbackData { public: - SyncCallbackData(PostQueue& queue, long cid); + SyncCallbackData(PostQueue& queue, long cid, MessagingInstance& instance); virtual ~SyncCallbackData(); void setLimit(const unsigned long limit); @@ -177,12 +177,13 @@ class MessageService { * We have child classes MessageServiceEmail and MessageServiceShortMsg which * should provide specialized implementation. */ - MessageService(int id, MessageType msgType, const std::string& name); + MessageService(int id, MessageType msgType, const std::string& name, MessagingInstance& instance); int m_id; MessageType m_msg_type; std::string m_name; MessageStoragePtr m_storage; + MessagingInstance& instance_; }; } // messaging diff --git a/src/messaging/message_service_email.cc b/src/messaging/message_service_email.cc index 09b941e..9a8a874 100644 --- a/src/messaging/message_service_email.cc +++ b/src/messaging/message_service_email.cc @@ -16,6 +16,7 @@ #include "message_service_email.h" #include "email_manager.h" +#include "messaging_instance.h" #include "common/logger.h" @@ -25,8 +26,8 @@ using common::PlatformResult; namespace extension { namespace messaging { -MessageServiceEmail::MessageServiceEmail(int id, std::string name) - : MessageService(id, MessageType::EMAIL, name) { +MessageServiceEmail::MessageServiceEmail(int id, std::string name, MessagingInstance& instance) + : MessageService(id, MessageType::EMAIL, name, instance) { ScopeLogger(); } @@ -36,15 +37,14 @@ MessageServiceEmail::~MessageServiceEmail() { for (auto id : registered_callbacks_) { // this may internally fail, because we don't have information about // callbacks which already have fired - EmailManager::getInstance().RemoveSyncCallback(id); + instance_.getEmailManager().RemoveSyncCallback(id); } } static gboolean sendMessageTask(void* data) { ScopeLogger(); - - auto ret = - EmailManager::getInstance().sendMessage(static_cast(data)); + MessageRecipientsCallbackData* callback = static_cast(data); + auto ret = callback->getEmailManager().sendMessage(callback); if (!ret) { LoggerE("Error: %d - %s", ret.error_code(), ret.message().c_str()); @@ -73,8 +73,8 @@ PlatformResult MessageServiceEmail::sendMessage(MessageRecipientsCallbackData* c static gboolean loadMessageBodyTask(void* data) { ScopeLogger(); - - EmailManager::getInstance().loadMessageBody(static_cast(data)); + MessageBodyCallbackData* callback = static_cast(data); + callback->getEmailManager().loadMessageBody(callback); return FALSE; } @@ -113,7 +113,7 @@ static gboolean loadMessageAttachmentTask(void* data) { delete callback; callback = nullptr; } else { - const auto ret = EmailManager::getInstance().loadMessageAttachment(callback); + const auto ret = callback->getEmailManager().loadMessageAttachment(callback); if (!ret) { LoggerE("Error: %d - %s", ret.error_code(), ret.message().c_str()); @@ -138,8 +138,8 @@ PlatformResult MessageServiceEmail::loadMessageAttachment(MessageAttachmentCallb static gboolean syncTask(void* data) { ScopeLogger(); - - EmailManager::getInstance().sync(data); + SyncCallbackData* callback = static_cast(data); + callback->getEmailManager().sync(data); return FALSE; } @@ -151,7 +151,7 @@ PlatformResult MessageServiceEmail::sync(SyncCallbackData* callback, long* opera return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Callback is null"); } - long op_id = EmailManager::getInstance().getUniqueOpId(); + long op_id = callback->getEmailManager().getUniqueOpId(); callback->setOpId(op_id); guint id = g_idle_add(syncTask, static_cast(callback)); @@ -166,8 +166,8 @@ PlatformResult MessageServiceEmail::sync(SyncCallbackData* callback, long* opera static gboolean syncFolderTask(void* data) { ScopeLogger(); - - EmailManager::getInstance().syncFolder(static_cast(data)); + SyncFolderCallbackData* callback = static_cast(data); + callback->getEmailManager().syncFolder(callback); return FALSE; } @@ -184,7 +184,7 @@ PlatformResult MessageServiceEmail::syncFolder(SyncFolderCallbackData* callback, return LogAndCreateResult(ErrorCode::TYPE_MISMATCH_ERR, "Message folder is null"); } - long op_id = EmailManager::getInstance().getUniqueOpId(); + long op_id = callback->getEmailManager().getUniqueOpId(); callback->setOpId(op_id); guint id = g_idle_add(syncFolderTask, callback); @@ -205,11 +205,11 @@ static gboolean stopSyncTask(void* data) { return FALSE; } - const long op_id = *(static_cast(data)); - delete static_cast(data); - data = NULL; - EmailManager::getInstance().stopSync(op_id); - + StopSyncData* callback = static_cast(data); + long op_id = callback->op_id; + callback->instance.getEmailManager().stopSync(op_id); + delete callback; + callback = nullptr; return FALSE; } @@ -217,7 +217,7 @@ PlatformResult MessageServiceEmail::stopSync(long op_id) { ScopeLogger(); registered_callbacks_.erase(op_id); - long* data = new long(op_id); + StopSyncData* data = new StopSyncData{op_id, instance_}; guint id = g_idle_add(stopSyncTask, static_cast(data)); if (!id) { diff --git a/src/messaging/message_service_email.h b/src/messaging/message_service_email.h index 8d14bb7..e169110 100644 --- a/src/messaging/message_service_email.h +++ b/src/messaging/message_service_email.h @@ -24,9 +24,14 @@ namespace extension { namespace messaging { +struct StopSyncData { + long op_id; + MessagingInstance& instance; +}; + class MessageServiceEmail : public MessageService { public: - MessageServiceEmail(int id, std::string name); + MessageServiceEmail(int id, std::string name, MessagingInstance& instance); virtual ~MessageServiceEmail(); virtual common::PlatformResult sendMessage(MessageRecipientsCallbackData* callback); diff --git a/src/messaging/message_service_short_msg.cc b/src/messaging/message_service_short_msg.cc index 78db705..a5ca744 100644 --- a/src/messaging/message_service_short_msg.cc +++ b/src/messaging/message_service_short_msg.cc @@ -37,8 +37,9 @@ using common::PlatformResult; namespace extension { namespace messaging { -MessageServiceShortMsg::MessageServiceShortMsg(int id, MessageType msgType) - : MessageService(id, msgType, MessagingUtil::messageTypeToString(msgType)) { +MessageServiceShortMsg::MessageServiceShortMsg(int id, MessageType msgType, + MessagingInstance& instance) + : MessageService(id, msgType, MessagingUtil::messageTypeToString(msgType), instance) { ScopeLogger(); } @@ -49,8 +50,8 @@ MessageServiceShortMsg::~MessageServiceShortMsg() { static gboolean sendMessageThread(void* data) { ScopeLogger(); - auto ret = - ShortMsgManager::getInstance().sendMessage(static_cast(data)); + MessageRecipientsCallbackData* callback = static_cast(data); + auto ret = callback->getShortMsgManager().sendMessage(callback); if (!ret) { LoggerE("Error: %d - %s", ret.error_code(), ret.message().c_str()); @@ -150,16 +151,16 @@ PlatformResult MessageServiceShortMsg::loadMessageBody(MessageBodyCallbackData* return PlatformResult(ErrorCode::NO_ERROR); } -MessageServiceShortMsg* MessageServiceShortMsg::GetMmsMessageService() { +MessageServiceShortMsg* MessageServiceShortMsg::GetMmsMessageService(MessagingInstance& instance) { ScopeLogger(); return new (std::nothrow) - MessageServiceShortMsg(MessageServiceAccountId::MMS_ACCOUNT_ID, MessageType::MMS); + MessageServiceShortMsg(MessageServiceAccountId::MMS_ACCOUNT_ID, MessageType::MMS, instance); } -MessageServiceShortMsg* MessageServiceShortMsg::GetSmsMessageService() { +MessageServiceShortMsg* MessageServiceShortMsg::GetSmsMessageService(MessagingInstance& instance) { ScopeLogger(); return new (std::nothrow) - MessageServiceShortMsg(MessageServiceAccountId::SMS_ACCOUNT_ID, MessageType::SMS); + MessageServiceShortMsg(MessageServiceAccountId::SMS_ACCOUNT_ID, MessageType::SMS, instance); } } // namespace messaging diff --git a/src/messaging/message_service_short_msg.h b/src/messaging/message_service_short_msg.h index d1ad5f2..a18c40a 100644 --- a/src/messaging/message_service_short_msg.h +++ b/src/messaging/message_service_short_msg.h @@ -31,11 +31,11 @@ class MessageServiceShortMsg : public MessageService { virtual common::PlatformResult loadMessageBody(MessageBodyCallbackData* callback); - static MessageServiceShortMsg* GetMmsMessageService(); - static MessageServiceShortMsg* GetSmsMessageService(); + static MessageServiceShortMsg* GetMmsMessageService(MessagingInstance& instance); + static MessageServiceShortMsg* GetSmsMessageService(MessagingInstance& instance); protected: - MessageServiceShortMsg(int id, MessageType msgType); + MessageServiceShortMsg(int id, MessageType msgType, MessagingInstance& instance); }; } // namespace messaging diff --git a/src/messaging/message_storage_email.cc b/src/messaging/message_storage_email.cc index 87e670c..fc5bfa0 100644 --- a/src/messaging/message_storage_email.cc +++ b/src/messaging/message_storage_email.cc @@ -22,6 +22,7 @@ #include "email_manager.h" #include "message.h" +#include "messaging_instance.h" namespace extension { namespace messaging { @@ -38,7 +39,7 @@ static gboolean addDraftMessageTask(void* data) { ScopeLogger(); MessageCallbackUserData* callback = static_cast(data); - EmailManager::getInstance().addDraftMessage(callback); + callback->getEmailManager().addDraftMessage(callback); return FALSE; } @@ -65,7 +66,7 @@ static gboolean removeMessagesTask(void* data) { ScopeLogger(); MessagesCallbackUserData* callback = static_cast(data); - EmailManager::getInstance().removeMessages(callback); + callback->getEmailManager().removeMessages(callback); return FALSE; } @@ -92,7 +93,7 @@ static gboolean updateMessagesTask(void* data) { ScopeLogger(); MessagesCallbackUserData* callback = static_cast(data); - EmailManager::getInstance().updateMessages(callback); + callback->getEmailManager().updateMessages(callback); return FALSE; } @@ -118,7 +119,7 @@ static gboolean findMessagesTask(void* data) { ScopeLogger(); FindMsgCallbackUserData* callback = static_cast(data); - EmailManager::getInstance().findMessages(callback); + callback->getEmailManager().findMessages(callback); return FALSE; } @@ -146,7 +147,7 @@ static gboolean findConversationsTask(void* data) { ScopeLogger(); ConversationCallbackData* callback = static_cast(data); - EmailManager::getInstance().findConversations(callback); + callback->getEmailManager().findConversations(callback); return FALSE; } @@ -173,7 +174,7 @@ static gboolean removeConversationsTask(void* data) { ScopeLogger(); ConversationCallbackData* callback = static_cast(data); - EmailManager::getInstance().removeConversations(callback); + callback->getEmailManager().removeConversations(callback); return FALSE; } @@ -200,7 +201,7 @@ static gboolean findFoldersTask(void* data) { ScopeLogger(); FoldersCallbackData* callback = static_cast(data); - EmailManager::getInstance().findFolders(callback); + callback->getEmailManager().findFolders(callback); return FALSE; } diff --git a/src/messaging/message_storage_short_msg.cc b/src/messaging/message_storage_short_msg.cc index 335b189..2c1e472 100644 --- a/src/messaging/message_storage_short_msg.cc +++ b/src/messaging/message_storage_short_msg.cc @@ -39,7 +39,7 @@ static gboolean addDraftMessageTask(void* data) { ScopeLogger(); MessageCallbackUserData* callback = static_cast(data); - ShortMsgManager::getInstance().addDraftMessage(callback); + callback->getShortMsgManager().addDraftMessage(callback); return false; } @@ -64,7 +64,7 @@ static gboolean removeMessagesTask(void* data) { ScopeLogger(); MessagesCallbackUserData* callback = static_cast(data); - ShortMsgManager::getInstance().removeMessages(callback); + callback->getShortMsgManager().removeMessages(callback); return false; } @@ -91,7 +91,7 @@ static gboolean updateMessagesTask(void* data) { ScopeLogger(); MessagesCallbackUserData* callback = static_cast(data); - ShortMsgManager::getInstance().updateMessages(callback); + callback->getShortMsgManager().updateMessages(callback); return false; } @@ -118,7 +118,7 @@ static gboolean findMessagesTask(void* data) { ScopeLogger(); FindMsgCallbackUserData* callback = static_cast(data); - ShortMsgManager::getInstance().findMessages(callback); + callback->getShortMsgManager().findMessages(callback); return false; } @@ -145,7 +145,7 @@ static gboolean findConversationsTask(void* data) { ScopeLogger(); ConversationCallbackData* callback = static_cast(data); - ShortMsgManager::getInstance().findConversations(callback); + callback->getShortMsgManager().findConversations(callback); return false; } @@ -172,7 +172,7 @@ static gboolean removeConversationsTask(void* data) { ScopeLogger(); ConversationCallbackData* callback = static_cast(data); - ShortMsgManager::getInstance().removeConversations(callback); + callback->getShortMsgManager().removeConversations(callback); return false; } diff --git a/src/messaging/messages_callback_user_data.cc b/src/messaging/messages_callback_user_data.cc index ef74d62..b847468 100644 --- a/src/messaging/messages_callback_user_data.cc +++ b/src/messaging/messages_callback_user_data.cc @@ -20,8 +20,9 @@ namespace extension { namespace messaging { MessagesCallbackUserData::MessagesCallbackUserData(PostQueue& queue, long cid, + MessagingInstance& instance, bool keep /* = false*/) - : CallbackUserData(queue, cid, keep), m_service_type(UNDEFINED) { + : CallbackUserData(queue, cid, instance, keep), m_service_type(UNDEFINED) { ScopeLogger(); } diff --git a/src/messaging/messages_callback_user_data.h b/src/messaging/messages_callback_user_data.h index e59b100..4869cce 100644 --- a/src/messaging/messages_callback_user_data.h +++ b/src/messaging/messages_callback_user_data.h @@ -32,7 +32,8 @@ class Message; class MessagesCallbackUserData : public CallbackUserData { public: - MessagesCallbackUserData(PostQueue& queue, long cid, bool keep = false); + MessagesCallbackUserData(PostQueue& queue, long cid, MessagingInstance& instance, + bool keep = false); virtual ~MessagesCallbackUserData(); void addMessage(std::shared_ptr msg); diff --git a/src/messaging/messages_change_callback.cc b/src/messaging/messages_change_callback.cc index d262a42..d476d9c 100644 --- a/src/messaging/messages_change_callback.cc +++ b/src/messaging/messages_change_callback.cc @@ -47,8 +47,8 @@ const char* MESSAGESUPDATED = "messagesupdated"; const char* MESSAGESREMOVED = "messagesremoved"; MessagesChangeCallback::MessagesChangeCallback(long cid, int service_id, MessageType service_type, - PostQueue& queue) - : m_callback_data(queue, cid, true), + PostQueue& queue, MessagingInstance& instance) + : m_callback_data(queue, cid, instance, true), m_service_id(service_id), m_msg_type(service_type), m_is_act(true) { diff --git a/src/messaging/messages_change_callback.h b/src/messaging/messages_change_callback.h index 64343cb..fe721be 100644 --- a/src/messaging/messages_change_callback.h +++ b/src/messaging/messages_change_callback.h @@ -38,7 +38,8 @@ class MessagesChangeCallback { public: typedef void (MessagesChangeCallback::*Signature)(const MessagePtrVector& conversations); - MessagesChangeCallback(long cid, int service_id, MessageType service_type, PostQueue& queue); + MessagesChangeCallback(long cid, int service_id, MessageType service_type, PostQueue& queue, + MessagingInstance& instance); virtual ~MessagesChangeCallback(); void added(const MessagePtrVector& messages); diff --git a/src/messaging/messaging_extension.cc b/src/messaging/messaging_extension.cc index caefca7..97e5e9a 100644 --- a/src/messaging/messaging_extension.cc +++ b/src/messaging/messaging_extension.cc @@ -47,10 +47,11 @@ MessagingExtension::~MessagingExtension() { common::Instance* MessagingExtension::CreateInstance() { ScopeLogger(); - PlatformResult ret = extension::messaging::EmailManager::InitializeEmailService(); + extension::messaging::MessagingInstance* instance = new extension::messaging::MessagingInstance(); + PlatformResult ret = instance->getEmailManager().InitializeEmailService(); if (ret.IsError()) { LoggerE("Initializing the email service failed (%s)", ret.message().c_str()); return nullptr; } - return new extension::messaging::MessagingInstance(); + return static_cast(instance); } diff --git a/src/messaging/messaging_instance.cc b/src/messaging/messaging_instance.cc index 1446c73..2cf41a5 100644 --- a/src/messaging/messaging_instance.cc +++ b/src/messaging/messaging_instance.cc @@ -174,6 +174,14 @@ MessagingInstance::~MessagingInstance() { return; \ } +EmailManager& MessagingInstance::getEmailManager() { + return email_manager_; +} + +ShortMsgManager& MessagingInstance::getShortMsgManager() { + return short_msg_manager_; +} + void MessagingInstance::GetMessageServices(const picojson::value& args, picojson::object& out) { ScopeLogger(); @@ -202,12 +210,13 @@ void MessagingInstance::MessageServiceSendMessage(const picojson::value& args, obj[JSON_CALLBACK_ID] = picojson::value(callbackId); std::shared_ptr message; - PlatformResult ret = MessagingUtil::jsonToMessage(v_message, &message); + PlatformResult ret = MessagingUtil::jsonToMessage(v_message, &message, *this); if (ret.IsError()) { POST_AND_RETURN(ret, json, obj) } - MessageRecipientsCallbackData* callback = new MessageRecipientsCallbackData(queue_, callbackId); + MessageRecipientsCallbackData* callback = + new MessageRecipientsCallbackData(queue_, callbackId, *this); long simIndex = 0; int serviceId = 0; @@ -256,12 +265,12 @@ void MessagingInstance::MessageServiceLoadMessageBody(const picojson::value& arg obj[JSON_CALLBACK_ID] = picojson::value(callbackId); std::shared_ptr message; - PlatformResult ret = MessagingUtil::jsonToMessage(json_message, &message); + PlatformResult ret = MessagingUtil::jsonToMessage(json_message, &message, *this); if (ret.IsError()) { POST_AND_RETURN(ret, json, obj) } - MessageBodyCallbackData* callback = new MessageBodyCallbackData(queue_, callbackId); + MessageBodyCallbackData* callback = new MessageBodyCallbackData(queue_, callbackId, *this); callback->setMessage(message); @@ -284,7 +293,8 @@ 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(queue_, callbackId); + MessageAttachmentCallbackData* callback = + new MessageAttachmentCallbackData(queue_, callbackId, *this); callback->setMessageAttachment(MessagingUtil::jsonToMessageAttachment(attachment)); callback->AddToQueue(); @@ -322,7 +332,7 @@ void MessagingInstance::MessageServiceSync(const picojson::value& args, picojson limit = static_cast(v_limit.get()); } - SyncCallbackData* callback = new SyncCallbackData(queue_, callbackId); + SyncCallbackData* callback = new SyncCallbackData(queue_, callbackId, *this); callback->setAccountId(id); callback->setLimit(limit); @@ -365,7 +375,7 @@ void MessagingInstance::MessageServiceSyncFolder(const picojson::value& args, limit = static_cast(v_limit.get()); } - SyncFolderCallbackData* callback = new SyncFolderCallbackData(queue_, callbackId); + SyncFolderCallbackData* callback = new SyncFolderCallbackData(queue_, callbackId, *this); callback->setAccountId(id); callback->setMessageFolder(MessagingUtil::jsonToMessageFolder(v_folder)); callback->setLimit(limit); @@ -432,12 +442,12 @@ void MessagingInstance::MessageStorageAddDraft(const picojson::value& args, pico obj[JSON_CALLBACK_ID] = picojson::value(callbackId); std::shared_ptr message; - PlatformResult ret = MessagingUtil::jsonToMessage(v_message, &message); + PlatformResult ret = MessagingUtil::jsonToMessage(v_message, &message, *this); if (ret.IsError()) { POST_AND_RETURN(ret, json, obj) } - MessageCallbackUserData* callback = new MessageCallbackUserData(queue_, callbackId); + MessageCallbackUserData* callback = new MessageCallbackUserData(queue_, callbackId, *this); callback->setMessage(message); int serviceId = getServiceIdFromJSON(data); @@ -478,7 +488,7 @@ void MessagingInstance::MessageStorageFindMessages(const picojson::value& args, int serviceId = getServiceIdFromJSON(data); auto storage = manager_.getMessageService(serviceId)->getMsgStorage(); - FindMsgCallbackUserData* callback = new FindMsgCallbackUserData(queue_, callbackId); + FindMsgCallbackUserData* callback = new FindMsgCallbackUserData(queue_, callbackId, *this); callback->setFilter(filter); callback->setLimit(limit); callback->setOffset(offset); @@ -500,11 +510,11 @@ 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(queue_, callbackId); + MessagesCallbackUserData* callback = new MessagesCallbackUserData(queue_, callbackId, *this); - auto each = [callback](picojson::value& v) -> void { + auto each = [callback, this](picojson::value& v) -> void { std::shared_ptr message; - PlatformResult ret = MessagingUtil::jsonToMessage(v, &message); + PlatformResult ret = MessagingUtil::jsonToMessage(v, &message, *this); if (ret.IsSuccess()) { callback->addMessage(message); } @@ -530,15 +540,16 @@ 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(queue_, callbackId); + auto callback = new MessagesCallbackUserData(queue_, callbackId, *this); - std::for_each(pico_array.begin(), pico_array.end(), [&callback](picojson::value& v) -> void { - std::shared_ptr message; - PlatformResult ret = MessagingUtil::jsonToMessage(v, &message); - if (ret.IsSuccess()) { - callback->addMessage(message); - } - }); + std::for_each(pico_array.begin(), pico_array.end(), + [&callback, this](picojson::value& v) -> void { + std::shared_ptr message; + PlatformResult ret = MessagingUtil::jsonToMessage(v, &message, *this); + if (ret.IsSuccess()) { + callback->addMessage(message); + } + }); auto service = manager_.getMessageService(getServiceIdFromJSON(data)); @@ -573,7 +584,7 @@ void MessagingInstance::MessageStorageFindConversations(const picojson::value& a int serviceId = getServiceIdFromJSON(data); - ConversationCallbackData* callback = new ConversationCallbackData(queue_, callbackId); + ConversationCallbackData* callback = new ConversationCallbackData(queue_, callbackId, *this); callback->setFilter(filter); callback->setLimit(limit); callback->setOffset(offset); @@ -601,7 +612,7 @@ void MessagingInstance::MessageStorageRemoveConversations(const picojson::value& picojson::object& obj = json->get(); obj[JSON_CALLBACK_ID] = picojson::value(callbackId); - ConversationCallbackData* callback = new ConversationCallbackData(queue_, callbackId); + ConversationCallbackData* callback = new ConversationCallbackData(queue_, callbackId, *this); PlatformResult ret(ErrorCode::NO_ERROR); for (auto it = conversations.begin(); it != conversations.end(); ++it) { @@ -640,7 +651,7 @@ void MessagingInstance::MessageStorageFindFolders(const picojson::value& args, POST_AND_RETURN(ret, json, obj) } - FoldersCallbackData* callback = new FoldersCallbackData(queue_, callbackId); + FoldersCallbackData* callback = new FoldersCallbackData(queue_, callbackId, *this); callback->setFilter(filter); callback->AddToQueue(); @@ -667,8 +678,8 @@ void MessagingInstance::MessageStorageAddMessagesChangeListener(const picojson:: auto service = manager_.getMessageService(serviceId); - std::shared_ptr callback( - new MessagesChangeCallback(kDumbCallbackId, serviceId, service->getMsgServiceType(), queue_)); + std::shared_ptr callback(new MessagesChangeCallback( + kDumbCallbackId, serviceId, service->getMsgServiceType(), queue_, *this)); callback->setFilter(filter); @@ -698,7 +709,7 @@ void MessagingInstance::MessageStorageAddConversationsChangeListener(const picoj auto service = manager_.getMessageService(serviceId); std::shared_ptr callback(new ConversationsChangeCallback( - static_cast(-1), serviceId, service->getMsgServiceType(), queue_)); + static_cast(-1), serviceId, service->getMsgServiceType(), queue_, *this)); callback->setFilter(filter); @@ -728,7 +739,7 @@ void MessagingInstance::MessageStorageAddFolderChangeListener(const picojson::va auto service = manager_.getMessageService(serviceId); std::shared_ptr callback(new FoldersChangeCallback( - static_cast(-1), serviceId, service->getMsgServiceType(), queue_)); + static_cast(-1), serviceId, service->getMsgServiceType(), queue_, *this)); callback->setFilter(filter); @@ -764,9 +775,9 @@ void MessagingInstance::MessageGetMessageStatus(const picojson::value& args, std::string status; if (FUN_MESSAGE_MESSAGING_EMAIL == type) { - status = EmailManager::getInstance().getMessageStatus(id); + status = email_manager_.getMessageStatus(id); } else { - status = ShortMsgManager::getInstance().getMessageStatus(id); + status = short_msg_manager_.getMessageStatus(id); } ReportSuccess(picojson::value(status), out); diff --git a/src/messaging/messaging_instance.h b/src/messaging/messaging_instance.h index 531af88..d5ff5d7 100644 --- a/src/messaging/messaging_instance.h +++ b/src/messaging/messaging_instance.h @@ -19,8 +19,10 @@ #include "common/extension.h" +#include "email_manager.h" #include "messaging_manager.h" #include "messaging_util.h" +#include "short_message_manager.h" namespace extension { namespace messaging { @@ -29,6 +31,8 @@ class MessagingInstance : public common::ParsedInstance { public: MessagingInstance(); virtual ~MessagingInstance(); + EmailManager& getEmailManager(); + ShortMsgManager& getShortMsgManager(); private: void GetMessageServices(const picojson::value& args, picojson::object& out); @@ -55,6 +59,8 @@ class MessagingInstance : public common::ParsedInstance { void MessageGetMessageStatus(const picojson::value& args, picojson::object& out); MessagingManager manager_; + ShortMsgManager short_msg_manager_; + EmailManager email_manager_; PostQueue queue_; }; diff --git a/src/messaging/messaging_manager.cc b/src/messaging/messaging_manager.cc index 3016ff9..dbb4f4c 100644 --- a/src/messaging/messaging_manager.cc +++ b/src/messaging/messaging_manager.cc @@ -61,7 +61,7 @@ MessagingManager::MessagingManager(MessagingInstance& instance) : instance_(inst if (ret != MSG_SUCCESS) { LoggerE("Cannot get message handle: %d", ret); } else { - ShortMsgManager::getInstance().registerStatusCallback(m_msg_handle); + instance.getShortMsgManager().registerStatusCallback(m_msg_handle); } m_sms_service = std::make_pair(UNDEFINED_MESSAGE_SERVICE, nullptr); @@ -113,7 +113,8 @@ static void* getMsgServicesThread(const std::shared_ptr& delete user_data->sms_service->second; } - MessageService* service = MessageServiceShortMsg::GetSmsMessageService(); + MessageService* service = + MessageServiceShortMsg::GetSmsMessageService(user_data->instance_); if (!service) { platform_result = LogAndCreateResult(ErrorCode::UNKNOWN_ERR, @@ -138,7 +139,8 @@ static void* getMsgServicesThread(const std::shared_ptr& delete user_data->mms_service->second; } - MessageService* service = MessageServiceShortMsg::GetMmsMessageService(); + MessageService* service = + MessageServiceShortMsg::GetMmsMessageService(user_data->instance_); if (!service) { platform_result = LogAndCreateResult(ErrorCode::UNKNOWN_ERR, @@ -180,8 +182,8 @@ static void* getMsgServicesThread(const std::shared_ptr& LoggerD("Account[%d/%d] id: %d, name: %s", i, count, email_accounts[i].account_id, name.c_str()); - MessageService* service = new (std::nothrow) - MessageServiceEmail(email_accounts[i].account_id, name.c_str()); + MessageService* service = new (std::nothrow) MessageServiceEmail( + email_accounts[i].account_id, name.c_str(), user_data->instance_); if (!service) { LoggerD("message service[%d] is NULL", i); std::for_each(msgServices.begin(), msgServices.end(), diff --git a/src/messaging/messaging_util.cc b/src/messaging/messaging_util.cc index 6385c43..d919911 100644 --- a/src/messaging/messaging_util.cc +++ b/src/messaging/messaging_util.cc @@ -674,7 +674,8 @@ picojson::value MessagingUtil::folderToJson(std::shared_ptr folde } PlatformResult MessagingUtil::jsonToMessage(const picojson::value& json, - std::shared_ptr* result_message) { + std::shared_ptr* result_message, + MessagingInstance& instance) { ScopeLogger(); std::shared_ptr message; picojson::object data = json.get(); @@ -700,7 +701,7 @@ PlatformResult MessagingUtil::jsonToMessage(const picojson::value& json, } else { std::string mid = data.at(MESSAGE_ATTRIBUTE_ID).get(); int message_id = std::atoi(mid.c_str()); - platform_result = Message::findShortMessageById(message_id, &message); + platform_result = Message::findShortMessageById(message_id, instance, &message); if (!platform_result) return platform_result; } break; @@ -1143,7 +1144,7 @@ PostQueue::PostQueue(MessagingInstance& instance) : instance_(instance) { PostQueue::~PostQueue() { ScopeLogger("this: [%p]", this); - EmailManager::getInstance().RemoveCallbacksByQueue(*this); + instance_.getEmailManager().RemoveCallbacksByQueue(*this); } void PostQueue::addAndResolve(const long cid, PostPriority priority, const std::string& json) { diff --git a/src/messaging/messaging_util.h b/src/messaging/messaging_util.h index bbd8926..7ccd031 100644 --- a/src/messaging/messaging_util.h +++ b/src/messaging/messaging_util.h @@ -128,7 +128,8 @@ class MessagingUtil { static picojson::value conversationToJson(std::shared_ptr conversation); static picojson::value folderToJson(std::shared_ptr folder); static common::PlatformResult jsonToMessage(const picojson::value& json, - std::shared_ptr* result); + std::shared_ptr* result, + MessagingInstance& instance); static std::shared_ptr jsonToMessageBody(const picojson::value& json); static std::shared_ptr jsonToMessageFolder(const picojson::value& json); static tizen::SortModePtr jsonToSortMode(const picojson::object& json); diff --git a/src/messaging/short_message_manager.cc b/src/messaging/short_message_manager.cc index 8bc5468..6007a59 100644 --- a/src/messaging/short_message_manager.cc +++ b/src/messaging/short_message_manager.cc @@ -39,13 +39,6 @@ using common::PlatformResult; namespace extension { namespace messaging { -ShortMsgManager& ShortMsgManager::getInstance() { - ScopeLogger(); - - static ShortMsgManager instance; - return instance; -} - static gboolean sendMessageCompleteCB(void* data) { ScopeLogger("callback:%p", data); @@ -390,13 +383,15 @@ void ShortMsgManager::sendStatusCallback(msg_struct_t sent_status) { static void sent_status_cb(msg_handle_t handle, msg_struct_t sent_status, void* data) { ScopeLogger(); - ShortMsgManager::getInstance().sendStatusCallback(sent_status); + ShortMsgManager* short_msg_manager = static_cast(data); + short_msg_manager->sendStatusCallback(sent_status); return; } -PlatformResult ShortMsgManager::callProperEventMessages( - EventMessages* event, msg_storage_change_type_t storageChangeType) { +PlatformResult ShortMsgManager::callProperEventMessages(EventMessages* event, + msg_storage_change_type_t storageChangeType, + ShortMsgManager* shortMsgManager) { ScopeLogger( "event.items.size()=%d event.removed_conversations.size()=%d" " sChangeType:%d", @@ -410,7 +405,7 @@ PlatformResult ShortMsgManager::callProperEventMessages( eventConv->items = event->removed_conversations; } else { PlatformResult ret = ShortMsgManager::getConversationsForMessages( - event->items, storageChangeType, &(eventConv->items)); + event->items, storageChangeType, &(eventConv->items), shortMsgManager); if (ret.IsError()) { LoggerD("Error while getting conversations for message"); delete event; @@ -513,21 +508,23 @@ void ShortMsgManager::storage_change_cb(msg_handle_t handle, eventMMS->service_type = MessageType::MMS; eventMMS->service_id = MMS_ACCOUNT_ID; + ShortMsgManager* short_msg_manager = static_cast(data); + if (MSG_STORAGE_CHANGE_DELETE == storageChangeType) { - ShortMsgManager& msg_manager = ShortMsgManager::getInstance(); - std::lock_guard lock(msg_manager.m_mutex); + std::lock_guard lock(short_msg_manager->m_mutex); std::map* rem_msgs[2] = { // Recently removed messages - &msg_manager.m_sms_removed_messages, &msg_manager.m_mms_removed_messages}; + &short_msg_manager->m_sms_removed_messages, &short_msg_manager->m_mms_removed_messages}; std::map* rem_convs[2] = {// Recently removed conversations - &msg_manager.m_sms_removed_msg_id_conv_id_map, - &msg_manager.m_mms_removed_msg_id_conv_id_map}; + &short_msg_manager->m_sms_removed_msg_id_conv_id_map, + &short_msg_manager->m_mms_removed_msg_id_conv_id_map}; EventMessages* dest_event[2] = {// SMS/MMS EventMessage to be propagated eventSMS, eventMMS}; - std::map* conv_map[2] = {// Map conversationId - object - &msg_manager.m_sms_removed_conv_id_object_map, - &msg_manager.m_mms_removed_conv_id_object_map}; + std::map* conv_map[2] = { + // Map conversationId - object + &short_msg_manager->m_sms_removed_conv_id_object_map, + &short_msg_manager->m_mms_removed_conv_id_object_map}; for (int event_i = 0; event_i < 2; ++event_i) { std::map& cur_rem_msgs = *(rem_msgs[event_i]); @@ -590,7 +587,7 @@ void ShortMsgManager::storage_change_cb(msg_handle_t handle, PlatformResult ret(ErrorCode::NO_ERROR); for (int i = 0; i < pMsgIdList->nCount; ++i) { msg_struct_t msg; - ret = ShortMsgManager::getInstance().getMessage(pMsgIdList->msgIdList[i], &msg); + ret = short_msg_manager->getMessage(pMsgIdList->msgIdList[i], &msg); if (ret.IsError() || NULL == msg) { LoggerE("Failed to load short message"); delete eventSMS; @@ -632,7 +629,8 @@ void ShortMsgManager::storage_change_cb(msg_handle_t handle, } if (!eventSMS->items.empty() || !eventSMS->removed_conversations.empty()) { - PlatformResult ret = ShortMsgManager::callProperEventMessages(eventSMS, storageChangeType); + PlatformResult ret = + ShortMsgManager::callProperEventMessages(eventSMS, storageChangeType, short_msg_manager); // PlatformResult could be ignored here. eventSMS is deleted in callProperEventMessages() } else { LoggerD("No SMS messages, not triggering eventSMS"); @@ -640,7 +638,8 @@ void ShortMsgManager::storage_change_cb(msg_handle_t handle, eventSMS = NULL; } if (!eventMMS->items.empty() || !eventMMS->removed_conversations.empty()) { - PlatformResult ret = ShortMsgManager::callProperEventMessages(eventMMS, storageChangeType); + PlatformResult ret = + ShortMsgManager::callProperEventMessages(eventMMS, storageChangeType, short_msg_manager); // PlatformResult could be ignored here. eventMMS is deleted in callProperEventMessages() } else { LoggerD("No MMS messages, not triggering eventMMS"); @@ -653,10 +652,12 @@ void ShortMsgManager::registerStatusCallback(msg_handle_t msg_handle) { ScopeLogger(); m_msg_handle = msg_handle; // set message sent status callback - if (MSG_SUCCESS != msg_reg_sent_status_callback(m_msg_handle, &sent_status_cb, NULL)) { + if (MSG_SUCCESS != + msg_reg_sent_status_callback(m_msg_handle, &sent_status_cb, static_cast(this))) { LoggerE("sent status callback register error!!!"); } - if (MSG_SUCCESS != msg_reg_storage_change_callback(m_msg_handle, &storage_change_cb, NULL)) { + if (MSG_SUCCESS != + msg_reg_storage_change_callback(m_msg_handle, &storage_change_cb, static_cast(this))) { LoggerE("storage change callback register error!"); } } @@ -847,7 +848,7 @@ PlatformResult ShortMsgManager::getMessage(int msg_id, msg_struct_t* out_msg) { PlatformResult ShortMsgManager::getConversationsForMessages( MessagePtrVector messages, msg_storage_change_type_t storageChangeType, - ConversationPtrVector* result) { + ConversationPtrVector* result, ShortMsgManager* shortMsgManager) { ScopeLogger("messages.size()=%d storageChangeType=%d", messages.size(), storageChangeType); std::unordered_set unique_conv_ids; @@ -864,7 +865,7 @@ PlatformResult ShortMsgManager::getConversationsForMessages( unique_conv_ids.insert(conv_id); ConversationPtr conv; PlatformResult ret = MessageConversation::convertMsgConversationToObject( - conv_id, ShortMsgManager::getInstance().m_msg_handle, &conv); + conv_id, shortMsgManager->m_msg_handle, &conv); if (ret.IsError()) { LoggerD("Convert msg conversation to object failed (%s)", ret.message().c_str()); return ret; diff --git a/src/messaging/short_message_manager.h b/src/messaging/short_message_manager.h index 3af6142..6bfe440 100644 --- a/src/messaging/short_message_manager.h +++ b/src/messaging/short_message_manager.h @@ -40,7 +40,8 @@ class FindMsgCallbackUserData; class ShortMsgManager { public: - static ShortMsgManager& getInstance(); + ShortMsgManager(); + virtual ~ShortMsgManager(); common::PlatformResult sendMessage(MessageRecipientsCallbackData* callback); void sendStatusCallback(msg_struct_t sent_status); @@ -58,11 +59,6 @@ class ShortMsgManager { std::string getMessageStatus(int id); private: - ShortMsgManager(); - ShortMsgManager(const ShortMsgManager&); - void operator=(const ShortMsgManager&); - virtual ~ShortMsgManager(); - /** * Listener for msg storage changes. Calls callbacks from ChangeListenerContainer. * @param handle @@ -87,9 +83,10 @@ class ShortMsgManager { */ static common::PlatformResult getConversationsForMessages( MessagePtrVector messages, msg_storage_change_type_t storageChangeType, - ConversationPtrVector* result); - static common::PlatformResult callProperEventMessages( - EventMessages* event, msg_storage_change_type_t storageChangeType); + ConversationPtrVector* result, ShortMsgManager* shortMsgManager); + static common::PlatformResult callProperEventMessages(EventMessages* event, + msg_storage_change_type_t storageChangeType, + ShortMsgManager* shortMsgManager); typedef std::map SendReqMap; SendReqMap m_sendRequests; msg_handle_t m_msg_handle; -- 2.7.4 From dcbd9d3bea193cf4e0ea5f788b52c91141444dd0 Mon Sep 17 00:00:00 2001 From: Piotr Kosko Date: Wed, 22 Nov 2017 14:48:04 +0100 Subject: [PATCH 02/16] [version] 2.09 Change-Id: I53fba98b16652feeabc5285b0bfba978767c2350 Signed-off-by: Piotr Kosko --- packaging/webapi-plugins.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec index d085250..f61a60d 100644 --- a/packaging/webapi-plugins.spec +++ b/packaging/webapi-plugins.spec @@ -10,7 +10,7 @@ %define crosswalk_extensions_path %{_libdir}/%{crosswalk_extensions} Name: webapi-plugins -Version: 2.08 +Version: 2.09 Release: 0 License: Apache-2.0 and BSD-3-Clause and MIT Group: Development/Libraries -- 2.7.4 From 44c3bc9d989b1ff537b4b1247f4ef5864072047f Mon Sep 17 00:00:00 2001 From: Pawel Kaczmarczyk Date: Thu, 30 Nov 2017 15:03:33 +0100 Subject: [PATCH 03/16] [Messaging] Fix problem with adding drafts [Bug] Managers were created in wrong order. MessagingManager calls registerStatusCallback on ShortMsgManager, so ShortMsgManager has to be created before. [Verification] 100% passrate (with re-run) tct-messaging-email-tizen-tests tct-messaging-sms-tizen-tests tct-messaging-mms-tizen-tests change-Id: Ia4e4b1771f40e60a4f5ef4fcd6f3c5f420637546 Signed-off-by: Pawel Kaczmarczyk --- src/messaging/messaging_instance.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/messaging/messaging_instance.h b/src/messaging/messaging_instance.h index d5ff5d7..c3f11e0 100644 --- a/src/messaging/messaging_instance.h +++ b/src/messaging/messaging_instance.h @@ -58,9 +58,9 @@ class MessagingInstance : public common::ParsedInstance { void MessageStorageRemoveChangeListener(const picojson::value& args, picojson::object& out); void MessageGetMessageStatus(const picojson::value& args, picojson::object& out); - MessagingManager manager_; ShortMsgManager short_msg_manager_; EmailManager email_manager_; + MessagingManager manager_; PostQueue queue_; }; -- 2.7.4 From 0bb4c7286865587172a1f21b9c10581db9746156 Mon Sep 17 00:00:00 2001 From: Piotr Kosko Date: Fri, 1 Dec 2017 12:29:00 +0100 Subject: [PATCH 04/16] [version] 2.10 Change-Id: I8bb24470539accbf96eb383ebe4ae521b11f3908 --- packaging/webapi-plugins.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec index f61a60d..f6e896b 100644 --- a/packaging/webapi-plugins.spec +++ b/packaging/webapi-plugins.spec @@ -10,7 +10,7 @@ %define crosswalk_extensions_path %{_libdir}/%{crosswalk_extensions} Name: webapi-plugins -Version: 2.09 +Version: 2.10 Release: 0 License: Apache-2.0 and BSD-3-Clause and MIT Group: Development/Libraries -- 2.7.4 From c1a36288ebfa8206c51df34326babf1d4eb969b4 Mon Sep 17 00:00:00 2001 From: Piotr Kosko Date: Mon, 27 Nov 2017 08:07:18 +0100 Subject: [PATCH 05/16] [Common] Preventing logger from runtime format definition [Bug] 1. ScopeLogger macro was using string format defined in runtime, instead of compilation time. 2. Some logs had invalid format specifiers, needed a hack with replacing body of ScopeLogger and Logger* with printf to discover them. [Solution] ScopeLogger class constructor is now not responsible for logging object creation. This log was moved to macro, which makes possible compilation time format specification. [Verification] Currently, __dlog_print implementation seems not to validate formats as printf() does. I replaced the body of ScopeLogger macro with printf() call, to find invalid format cases(compilation warnings appeared). After fixing, I recovered __dlog_print based implementation. 1. Code compiles without errors. 2. ScopeLogger enter and exit logs appear correctly. 3. Undefining TIZEN_DEBUG_ENABLE makes that ScopeLogger objects are no longer created - checked with logs and chrome console. Change-Id: I736ad5ed7ce191c7099417ef2e0cd81de4eb00a2 Signed-off-by: Piotr Kosko --- src/alarm/alarm_manager.cc | 5 +- src/archive/archive_callback_data.cc | 2 +- src/calendar/calendar.cc | 2 +- src/calendar/calendar_item.cc | 10 +-- src/calendar/calendar_manager.cc | 2 +- src/common/logger.h | 26 +++----- src/contact/addressbook.cc | 2 +- src/contact/contact_search_engine.cc | 4 +- src/exif/exif_information.cc | 2 +- src/exif/exif_tag_saver.cc | 6 +- src/exif/rational.cc | 2 +- .../humanactivitymonitor_manager.cc | 72 +++++++++++----------- src/mediacontroller/mediacontroller_client.cc | 2 +- src/mediacontroller/mediacontroller_server.cc | 2 +- src/messaging/DBus/MessageProxy.cpp | 4 +- src/messaging/MsgCommon/AbstractFilter.cpp | 5 +- src/messaging/change_listener_container.cc | 10 +-- src/messaging/email_manager.cc | 14 ++--- src/messaging/message.cc | 5 +- src/messaging/message_conversation.cc | 2 +- src/messaging/message_service_email.cc | 4 +- src/messaging/message_service_short_msg.cc | 2 +- src/messaging/messages_change_callback.cc | 12 ++-- src/messaging/messaging_database_manager.cc | 6 +- src/messaging/short_message_manager.cc | 9 +-- src/nfc/nfc_adapter.cc | 4 +- src/notification/notification_manager.cc | 4 +- src/radio/radio_manager.cc | 2 +- src/sensor/sensor_service.cc | 64 +++++++++---------- src/sound/sound_manager.cc | 2 +- 30 files changed, 142 insertions(+), 146 deletions(-) diff --git a/src/alarm/alarm_manager.cc b/src/alarm/alarm_manager.cc index 8ca564b..2588fa2 100644 --- a/src/alarm/alarm_manager.cc +++ b/src/alarm/alarm_manager.cc @@ -541,7 +541,7 @@ PlatformResult AlarmManager::GetAlarm(int id, picojson::object& obj) { if (!platform_result) { return LogAndCreateResult( platform_result.error_code(), platform_result.message().c_str(), - ("Failed to get AppControl: %d (%s)", platform_result.error_code(), + ("Failed to get AppControl: %d (%s)", static_cast(platform_result.error_code()), platform_result.message().c_str())); } } @@ -720,10 +720,10 @@ static bool AlarmIterateCB(int alarm_id, void* user_data) { alarm_ids->push_back(alarm_id); return true; } +#include void AlarmManager::GetAll(const picojson::value& args, picojson::object& out) { ScopeLogger(); - std::vector alarm_ids; int ret = alarm_foreach_registered_alarm(AlarmIterateCB, &alarm_ids); @@ -793,7 +793,6 @@ void AlarmManager::GetRemainingSeconds(const picojson::value& args, picojson::ob void AlarmManager::GetNextScheduledDate(const picojson::value& args, picojson::object& out) { ScopeLogger(); - int id = 0; if (args.contains("id") && args.get("id").is()) { diff --git a/src/archive/archive_callback_data.cc b/src/archive/archive_callback_data.cc index f761270..8924616 100644 --- a/src/archive/archive_callback_data.cc +++ b/src/archive/archive_callback_data.cc @@ -58,7 +58,7 @@ OperationCallbackData::~OperationCallbackData() { } void OperationCallbackData::setError(const ErrorCode& err_code, const std::string& err_message) { - ScopeLogger("Setting error, code is: [%d]", err_code); + ScopeLogger("Setting error, code is: [%d]", static_cast(err_code)); // store only first error if (!m_is_error) { m_err_code = err_code; diff --git a/src/calendar/calendar.cc b/src/calendar/calendar.cc index ef161c0..556274d 100644 --- a/src/calendar/calendar.cc +++ b/src/calendar/calendar.cc @@ -598,7 +598,7 @@ PlatformResult Calendar::Find(const picojson::object& args, picojson::array& arr if ((status = ErrorChecker(error_code)).IsError()) return status; } else { return LogAndCreateResult(ErrorCode::INVALID_VALUES_ERR, "Invalid union type!", - ("Invalid union type: %d", calType)); + ("Invalid union type: %d", static_cast(calType))); } } intermediate_filters.pop_back(); diff --git a/src/calendar/calendar_item.cc b/src/calendar/calendar_item.cc index 7e209b4..d42f743 100644 --- a/src/calendar/calendar_item.cc +++ b/src/calendar/calendar_item.cc @@ -384,7 +384,7 @@ PlatformResult CalendarItem::SetInt(int type, calendar_record_h rec, const std:: PlatformResult CalendarItem::SetInt(int type, calendar_record_h rec, const std::string& property, int value) { - ScopeLogger("set: %s" + property); + ScopeLogger("set: %s", property.c_str()); unsigned int prop; PlatformResult status = GetPlatformProperty(type, property, &prop); @@ -397,7 +397,7 @@ PlatformResult CalendarItem::SetInt(int type, calendar_record_h rec, const std:: PlatformResult CalendarItem::GetInt(int type, calendar_record_h rec, const std::string& property, int* value) { - ScopeLogger("set: %s" + property); + ScopeLogger("set: %s", property.c_str()); unsigned int prop; PlatformResult status = GetPlatformProperty(type, property, &prop); @@ -541,7 +541,7 @@ PlatformResult CalendarItem::SetCaltime(calendar_record_h rec, unsigned int prop PlatformResult CalendarItem::GetCaltime(int type, calendar_record_h rec, const std::string& property, calendar_time_s* cal_time, bool throw_on_error) { - ScopeLogger("set: %s" + property); + ScopeLogger("set: %s", property.c_str()); unsigned int prop; PlatformResult status = GetPlatformProperty(type, property, &prop); @@ -588,7 +588,7 @@ PlatformResult CalendarItem::SetLli(calendar_record_h rec, unsigned int property PlatformResult CalendarItem::GetLli(int type, calendar_record_h rec, const std::string& property, long long int* lli) { - ScopeLogger("set: %s" + property); + ScopeLogger("set: %s", property.c_str()); unsigned int prop; PlatformResult status = GetPlatformProperty(type, property, &prop); @@ -615,7 +615,7 @@ PlatformResult CalendarItem::GetLli(calendar_record_h rec, unsigned int property } Date CalendarItem::DateFromJson(const picojson::object& in) { - ScopeLogger("json date " + picojson::value(in).serialize()); + ScopeLogger("json date %s", picojson::value(in).serialize().c_str()); Date date = {(long long int)common::FromJson(in, "UTCTimestamp"), (int)common::FromJson(in, "year"), diff --git a/src/calendar/calendar_manager.cc b/src/calendar/calendar_manager.cc index 4c2edaf..3a6abd5 100644 --- a/src/calendar/calendar_manager.cc +++ b/src/calendar/calendar_manager.cc @@ -162,7 +162,7 @@ PlatformResult CalendarManager::GetCalendar(const JsonObject& args, JsonObject& if (type != calendar_type) { return LogAndCreateResult(ErrorCode::NOT_FOUND_ERR, "Calendar not found", - ("Calendar type doesn't match requested type %s", type)); + ("Calendar type doesn't match requested type %d", type)); } status = CalendarRecord::CalendarToJson(record_ptr.get(), &out); diff --git a/src/common/logger.h b/src/common/logger.h index fd159bb..93b0ee5 100644 --- a/src/common/logger.h +++ b/src/common/logger.h @@ -233,18 +233,6 @@ class ScopeLogger { public: ScopeLogger(const std::string& f, const std::string& m, int l, const std::string& ex = "") : file_(f), method_(m), extra_(ex) { - LoggerD("%s: %s(%d) > Enter %s", file_.c_str(), method_.c_str(), l, extra_.c_str()); - } - - template - ScopeLogger(const std::string& f, const std::string& m, int l, const std::string& ex, - Args... args) - : file_(f), method_(m), extra_(ex) { -#ifdef TIZEN_DEBUG_ENABLE - __dlog_print(LOG_ID_MAIN, DLOG_DEBUG, LOGGER_TAG, - ("%s: %s(%d) > %s: %s(%d) > Enter " + extra_).c_str(), __MODULE__, __func__, - __LINE__, file_.c_str(), method_.c_str(), l, args...); -#endif } ~ScopeLogger() { @@ -259,9 +247,15 @@ class ScopeLogger { } // common -#define ScopeLogger(EX, args...) \ - const common::ScopeLogger __sl__ { \ - __MODULE__, __func__, __LINE__, EX, ##args \ - } +#ifdef TIZEN_DEBUG_ENABLE +#define ScopeLogger(EX, args...) \ + __dlog_print(LOG_ID_MAIN, DLOG_DEBUG, LOGGER_TAG, \ + "logger.h: ScopeLogger > %s: %s(%d) > Enter " EX, __MODULE__, __func__, __LINE__, \ + ##args); \ + const common::ScopeLogger __sl__{__MODULE__, __func__, __LINE__, EX}; + +#else +#define ScopeLogger(EX, args...) +#endif #endif // COMMON_LOGGER_H_ diff --git a/src/contact/addressbook.cc b/src/contact/addressbook.cc index 447b171..012e921 100644 --- a/src/contact/addressbook.cc +++ b/src/contact/addressbook.cc @@ -364,7 +364,7 @@ PlatformResult AddressBookFind(const JsonObject& args, JsonArray& array) { long address_book_id = common::stol(FromJson(args, "addressBookId")); - LoggerD("Searching in address book: %d", address_book_id); + LoggerD("Searching in address book: %ld", address_book_id); ContactSearchEngine engine; if (!IsUnified(address_book_id)) { diff --git a/src/contact/contact_search_engine.cc b/src/contact/contact_search_engine.cc index 2769e2c..cee971e 100644 --- a/src/contact/contact_search_engine.cc +++ b/src/contact/contact_search_engine.cc @@ -671,7 +671,7 @@ PlatformResult ContactSearchEngine::GetContacts(Iterator begin, Iterator end, contacts_record_h record = nullptr; int error_code = contacts_db_get_record(_contacts_contact._uri, id, &record); if (CONTACTS_ERROR_NONE != error_code) { - LoggerE("Failed to get contact with ID: %d", id); + LoggerE("Failed to get contact with ID: %ld", static_cast(id)); continue; } @@ -683,7 +683,7 @@ PlatformResult ContactSearchEngine::GetContacts(Iterator begin, Iterator end, error_code = contacts_record_get_int(record, _contacts_contact.address_book_id, &address_book_id); if (CONTACTS_ERROR_NONE != error_code) { - LoggerE("Failed to get address book ID of contact with ID: %d", id); + LoggerE("Failed to get address book ID of contact with ID: %ld", static_cast(id)); continue; } diff --git a/src/exif/exif_information.cc b/src/exif/exif_information.cc index ac3f4cc..9a07286 100644 --- a/src/exif/exif_information.cc +++ b/src/exif/exif_information.cc @@ -456,7 +456,7 @@ void ExifInformation::unset(ExifInformationAttribute attribute) { } void ExifInformation::set(std::string attributeName, const picojson::value& v) { - ScopeLogger(attributeName); + ScopeLogger("%s", attributeName.c_str()); switch (str2int(attributeName.c_str())) { case str2int(EI_URI): { diff --git a/src/exif/exif_tag_saver.cc b/src/exif/exif_tag_saver.cc index 7ead390..0d91766 100644 --- a/src/exif/exif_tag_saver.cc +++ b/src/exif/exif_tag_saver.cc @@ -28,10 +28,10 @@ namespace extension { namespace exif { void ExifTagSaver::removeExifEntryWithTag(const ExifTag tag, ExifData* exif_data) { - ScopeLogger("tag:%d (0x%x)", tag, exif_data); + ScopeLogger("tag: %d (%p)", tag, exif_data); ExifEntry* exif_entry = exif_data_get_entry(exif_data, tag); if (!exif_entry) { - LoggerE("Exif entry with tag:%d (0x%x) is not present", tag, tag); + LoggerE("Exif entry with tag: %d (0x%x) is not present", tag, tag); return; } @@ -319,7 +319,7 @@ common::PlatformResult ExifTagSaver::saveGpsLocationToExif(const ExifGPSLocation } ExifEntry* ExifTagSaver::prepareEntry(ExifData* exif_data, ExifTag tag) { - ScopeLogger("tag:%d (0x%x)", tag, exif_data); + ScopeLogger("tag: %d (%p)", tag, exif_data); ExifEntry* exif_entry = exif_data_get_entry(exif_data, tag); if (!exif_entry) { diff --git a/src/exif/rational.cc b/src/exif/rational.cc index 93bf5bd..987a61b 100644 --- a/src/exif/rational.cc +++ b/src/exif/rational.cc @@ -44,7 +44,7 @@ Rational::Rational(const ExifRational& exif_rational) } Rational Rational::createFromDouble(const double value, const long precision) { - ScopeLogger("value:%f precision:%d", value, precision); + ScopeLogger("value: %f precision: %ld", value, precision); if (value < 0.0) { LoggerW("Trying to create negative Rational: %f!", value); return Rational(); diff --git a/src/humanactivitymonitor/humanactivitymonitor_manager.cc b/src/humanactivitymonitor/humanactivitymonitor_manager.cc index 10385c6..8e8e58d 100644 --- a/src/humanactivitymonitor/humanactivitymonitor_manager.cc +++ b/src/humanactivitymonitor/humanactivitymonitor_manager.cc @@ -271,11 +271,11 @@ class HumanActivityMonitorManager::Monitor { class GpsMonitor; explicit Monitor(const std::string& t) : type_(t) { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); } virtual ~Monitor() { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); } std::string type() const { @@ -287,7 +287,7 @@ class HumanActivityMonitorManager::Monitor { } PlatformResult SetListener(JsonCallback callback, const picojson::value& args) { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); auto result = IsSupported(); if (!result) { @@ -304,7 +304,7 @@ class HumanActivityMonitorManager::Monitor { } PlatformResult UnsetListener() { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); auto result = IsSupported(); if (!result) { @@ -321,7 +321,7 @@ class HumanActivityMonitorManager::Monitor { } PlatformResult GetData(picojson::value* data) { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); auto result = IsSupported(); if (!result) { @@ -332,7 +332,7 @@ class HumanActivityMonitorManager::Monitor { } PlatformResult StartDataRecorder(int interval, int retention_period) { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); auto result = IsSupported(); if (!result) { @@ -343,13 +343,13 @@ class HumanActivityMonitorManager::Monitor { } PlatformResult StopDataRecorder() { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); return StopDataRecorderImpl(); } PlatformResult ReadRecorderData(picojson::array* data, const picojson::value& query) { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); auto result = IsSupported(); if (!result) { @@ -361,44 +361,44 @@ class HumanActivityMonitorManager::Monitor { protected: virtual PlatformResult IsSupportedImpl(bool* supported) const { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); *supported = false; return PlatformResult(ErrorCode::NO_ERROR); } virtual PlatformResult SetListenerImpl(const picojson::value& args) { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); return LogAndCreateResult(ErrorCode::NOT_SUPPORTED_ERR, "NOT_SUPPORTED_ERR"); } virtual PlatformResult UnsetListenerImpl() { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); return LogAndCreateResult(ErrorCode::NOT_SUPPORTED_ERR, "NOT_SUPPORTED_ERR"); } virtual PlatformResult GetDataImpl(picojson::value* data) const { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); return LogAndCreateResult(ErrorCode::NOT_SUPPORTED_ERR, "NOT_SUPPORTED_ERR"); } virtual PlatformResult StartDataRecorderImpl(int interval, int retention_period) const { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); return LogAndCreateResult(ErrorCode::NOT_SUPPORTED_ERR, "NOT_SUPPORTED_ERR"); } virtual PlatformResult StopDataRecorderImpl() const { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); return LogAndCreateResult(ErrorCode::NOT_SUPPORTED_ERR, "NOT_SUPPORTED_ERR"); } virtual PlatformResult ReadRecorderDataImpl(picojson::array* data, const picojson::value& query) { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); return LogAndCreateResult(ErrorCode::NOT_SUPPORTED_ERR, "NOT_SUPPORTED_ERR"); } public: PlatformResult IsSupported() { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); if (!is_supported_) { bool is_supported = false; @@ -427,17 +427,17 @@ class HumanActivityMonitorManager::Monitor::GestureMonitor : public HumanActivityMonitorManager::Monitor { public: explicit GestureMonitor(const std::string& t) : Monitor(t), handle_(nullptr) { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); } virtual ~GestureMonitor() override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); UnsetListenerImpl(); } protected: virtual PlatformResult IsSupportedImpl(bool* s) const override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); bool supported = false; @@ -459,7 +459,7 @@ class HumanActivityMonitorManager::Monitor::GestureMonitor } virtual PlatformResult SetListenerImpl(const picojson::value&) override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); if (!handle_) { int ret = gesture_create(&handle_); @@ -482,7 +482,7 @@ class HumanActivityMonitorManager::Monitor::GestureMonitor } virtual PlatformResult UnsetListenerImpl() override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); if (handle_) { int ret = gesture_stop_recognition(handle_); @@ -538,17 +538,17 @@ class HumanActivityMonitorManager::Monitor::SensorMonitor converter_(c), converter_recorded_(r), recorded_data_(nullptr) { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); } virtual ~SensorMonitor() override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); UnsetListenerImpl(); } protected: virtual PlatformResult IsSupportedImpl(bool* s) const override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); bool supported = false; @@ -564,7 +564,7 @@ class HumanActivityMonitorManager::Monitor::SensorMonitor } virtual PlatformResult SetListenerImpl(const picojson::value& args) override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); if (!handle_) { sensor_h sensor_handle = nullptr; @@ -617,7 +617,7 @@ class HumanActivityMonitorManager::Monitor::SensorMonitor } virtual PlatformResult UnsetListenerImpl() override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); if (handle_) { int ret = sensor_listener_stop(handle_); @@ -648,7 +648,7 @@ class HumanActivityMonitorManager::Monitor::SensorMonitor } virtual PlatformResult GetDataImpl(picojson::value* data) const override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); if (!handle_) { return LogAndCreateResult(ErrorCode::SERVICE_NOT_AVAILABLE_ERR, "SERVICE_NOT_AVAILABLE_ERR"); @@ -679,7 +679,7 @@ class HumanActivityMonitorManager::Monitor::SensorMonitor } virtual PlatformResult StartDataRecorderImpl(int interval, int retention_period) const override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); sensor_recorder_option_h option = nullptr; @@ -710,7 +710,7 @@ class HumanActivityMonitorManager::Monitor::SensorMonitor } virtual PlatformResult StopDataRecorderImpl() const override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); int ret = sensor_recorder_stop(sensor_); if (SENSOR_ERROR_NONE != ret) { @@ -724,7 +724,7 @@ class HumanActivityMonitorManager::Monitor::SensorMonitor virtual PlatformResult ReadRecorderDataImpl(picojson::array* data, const picojson::value& query) override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); std::lock_guard lock(mutex_); this->recorded_data_ = data; @@ -879,17 +879,17 @@ class HumanActivityMonitorManager::Monitor::GpsMonitor : public HumanActivityMonitorManager::Monitor { public: explicit GpsMonitor(const std::string& t) : Monitor(t), handle_(nullptr) { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); } virtual ~GpsMonitor() override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); UnsetListenerImpl(); } protected: virtual PlatformResult IsSupportedImpl(bool* s) const override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); int ret = 0; ret = system_info_get_platform_bool("http://tizen.org/feature/location.batch", s); @@ -902,7 +902,7 @@ class HumanActivityMonitorManager::Monitor::GpsMonitor } virtual PlatformResult SetListenerImpl(const picojson::value& args) override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); int ret = 0; @@ -959,7 +959,7 @@ class HumanActivityMonitorManager::Monitor::GpsMonitor } virtual PlatformResult UnsetListenerImpl() override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); if (handle_) { int ret = location_manager_stop_batch(handle_); @@ -991,7 +991,7 @@ class HumanActivityMonitorManager::Monitor::GpsMonitor } virtual PlatformResult GetDataImpl(picojson::value* data) const override { - ScopeLogger(type()); + ScopeLogger("type %s", type().c_str()); if (!handle_) { return LogAndCreateResult(ErrorCode::SERVICE_NOT_AVAILABLE_ERR, "SERVICE_NOT_AVAILABLE_ERR"); diff --git a/src/mediacontroller/mediacontroller_client.cc b/src/mediacontroller/mediacontroller_client.cc index 99ca583..e6597e5 100644 --- a/src/mediacontroller/mediacontroller_client.cc +++ b/src/mediacontroller/mediacontroller_client.cc @@ -463,7 +463,7 @@ void MediaControllerClient::OnMetadataUpdate(const char* server_name, mc_metadat picojson::value metadata = picojson::value(picojson::object()); PlatformResult result = Types::ConvertMetadata(metadata_h, &metadata.get()); if (!result) { - LoggerE("ConvertMetadata failed, error: ", result.message().c_str()); + LoggerE("ConvertMetadata failed, error: %s", result.message().c_str()); return; } diff --git a/src/mediacontroller/mediacontroller_server.cc b/src/mediacontroller/mediacontroller_server.cc index 0c4d811..66c6b3a 100644 --- a/src/mediacontroller/mediacontroller_server.cc +++ b/src/mediacontroller/mediacontroller_server.cc @@ -212,7 +212,7 @@ void MediaControllerServer::OnCommandReceived(const char* client_name, const cha std::string err; picojson::parse(data, data_str, data_str + strlen(data_str), &err); if (!err.empty()) { - LoggerE("Failed to parse bundle data: %d", err); + LoggerE("Failed to parse bundle data: %s", err.c_str()); return; } diff --git a/src/messaging/DBus/MessageProxy.cpp b/src/messaging/DBus/MessageProxy.cpp index 30e17b5..ffe8f4b 100644 --- a/src/messaging/DBus/MessageProxy.cpp +++ b/src/messaging/DBus/MessageProxy.cpp @@ -35,7 +35,7 @@ MessageProxy::MessageProxy(EmailManager& manager) : common::dbus::Proxy(kDBusPathEmailStorageChange, kDBusIfaceEmailStorageChange, kDBusNameSignalEmail, kDBusPathEmailStorageChange, kDBusIfaceEmailStorageChange), - email_manager_(manager) { + email_manager_(manager) { ScopeLogger(); } @@ -97,7 +97,7 @@ void MessageProxy::signalCallback(GDBusConnection* connection, const gchar* send LoggerD("Unrecognized status: %d", status); } if (ret.IsError()) { - LoggerE("%d (%s)", ret.error_code(), (ret.message()).c_str()); + LoggerE("%d (%s)", static_cast(ret.error_code()), (ret.message()).c_str()); } g_free(name); } diff --git a/src/messaging/MsgCommon/AbstractFilter.cpp b/src/messaging/MsgCommon/AbstractFilter.cpp index 3f30d4d..b036581 100644 --- a/src/messaging/MsgCommon/AbstractFilter.cpp +++ b/src/messaging/MsgCommon/AbstractFilter.cpp @@ -176,8 +176,9 @@ bool FilterUtils::isTimeStampInRange(const time_t& time_stamp, tizen::AnyPtr& in bool is_in_range = FilterUtils::isBetweenTimeRange(time_stamp, from_time, to_time); - LoggerD("%d is%s in time range <%d, %d>", time_stamp, (is_in_range ? "" : " NOT"), from_time, - to_time); + LoggerD("%lld is%s in time range <%lld, %lld>", static_cast(time_stamp), + (is_in_range ? "" : " NOT"), static_cast(from_time), + static_cast(to_time)); return is_in_range; } diff --git a/src/messaging/change_listener_container.cc b/src/messaging/change_listener_container.cc index b082446..bd764dd 100644 --- a/src/messaging/change_listener_container.cc +++ b/src/messaging/change_listener_container.cc @@ -58,12 +58,12 @@ class ChangeListenerContainer::ChangeListeners { for (auto& it : groups_) { if (it.second->Remove(id)) { - LoggerD("Listener with id: %d removed from group: %d", id, it.first); + LoggerD("Listener with id: %ld removed from group: %d", id, it.first); return; } } - LoggerW("WatchId %d not found", id); + LoggerW("WatchId %ld not found", id); } template @@ -155,11 +155,11 @@ class ChangeListenerContainer::ChangeListeners { bool ret = false; if (true == (ret = message_callbacks_.Remove(id))) { - LoggerD("Message listener with id: %d removed", id); + LoggerD("Message listener with id: %ld removed", id); } else if (true == (ret = conversation_callbacks_.Remove(id))) { - LoggerD("Conversation listener with id: %d removed", id); + LoggerD("Conversation listener with id: %ld removed", id); } else if (true == (ret = folder_callbacks_.Remove(id))) { - LoggerD("Folder listener with id: %d removed", id); + LoggerD("Folder listener with id: %ld removed", id); } return ret; diff --git a/src/messaging/email_manager.cc b/src/messaging/email_manager.cc index 9a80c0d..0654d6a 100644 --- a/src/messaging/email_manager.cc +++ b/src/messaging/email_manager.cc @@ -925,7 +925,7 @@ void EmailManager::removeMessages(MessagesCallbackUserData* callback) { PlatformResult ret = RemoveMessagesPlatform(callback); if (ret.IsError()) { - LoggerE("%d (%s)", ret.error_code(), (ret.message()).c_str()); + LoggerE("%d (%s)", static_cast(ret.error_code()), (ret.message()).c_str()); callback->SetError(ret); removeEmailCompleteCB(callback); } @@ -1003,7 +1003,7 @@ void EmailManager::updateMessages(MessagesCallbackUserData* callback) { PlatformResult ret = UpdateMessagesPlatform(callback); if (ret.IsError()) { - LoggerE("%d (%s)", ret.error_code(), (ret.message()).c_str()); + LoggerE("%d (%s)", static_cast(ret.error_code()), (ret.message()).c_str()); callback->SetError(ret); } @@ -1071,7 +1071,7 @@ void EmailManager::findMessages(FindMsgCallbackUserData* callback) { PlatformResult ret = FindMessagesPlatform(callback); if (ret.IsError()) { - LoggerE("%d (%s)", ret.error_code(), (ret.message()).c_str()); + LoggerE("%d (%s)", static_cast(ret.error_code()), (ret.message()).c_str()); callback->SetError(ret); } @@ -1117,7 +1117,7 @@ PlatformResult EmailManager::FindConversationsPlatform(ConversationCallbackData* PlatformResult ret = MessageConversation::convertEmailConversationToObject( conversationsInfo.at(i).id, &conversation); if (ret.IsError()) { - LoggerE("%d (%s)", ret.error_code(), (ret.message()).c_str()); + LoggerE("%d (%s)", static_cast(ret.error_code()), (ret.message()).c_str()); return ret; } conversation->setUnreadMessages(conversationsInfo.at(i).unreadMessages); @@ -1137,7 +1137,7 @@ void EmailManager::findConversations(ConversationCallbackData* callback) { PlatformResult ret = FindConversationsPlatform(callback); if (ret.IsError()) { - LoggerE("%d (%s)", ret.error_code(), (ret.message()).c_str()); + LoggerE("%d (%s)", static_cast(ret.error_code()), (ret.message()).c_str()); callback->SetError(ret); } @@ -1256,7 +1256,7 @@ void EmailManager::findFolders(FoldersCallbackData* callback) { PlatformResult ret = FindFoldersPlatform(callback); if (ret.IsError()) { - LoggerE("%d (%s)", ret.error_code(), (ret.message()).c_str()); + LoggerE("%d (%s)", static_cast(ret.error_code()), (ret.message()).c_str()); callback->SetError(ret); } @@ -1338,7 +1338,7 @@ void EmailManager::removeConversations(ConversationCallbackData* callback) { PlatformResult ret = RemoveConversationsPlatform(callback); if (ret.IsError()) { - LoggerE("%d (%s)", ret.error_code(), (ret.message()).c_str()); + LoggerE("%d (%s)", static_cast(ret.error_code()), (ret.message()).c_str()); callback->SetError(ret); } diff --git a/src/messaging/message.cc b/src/messaging/message.cc index d439357..ca7b00e 100644 --- a/src/messaging/message.cc +++ b/src/messaging/message.cc @@ -1176,7 +1176,8 @@ PlatformResult Message::setMMSBodyAndAttachmentsFromStruct(Message* message, msg LoggerD("Loaded body: %s", message->getBody()->getPlainBody().c_str()); } else { - LoggerE("Unhandled error: %d (%s)!", ret.error_code(), ret.message().c_str()); + LoggerE("Unhandled error: %d (%s)!", static_cast(ret.error_code()), + ret.message().c_str()); LoggerD("[p:%d, m:%d] body is not set", p, m); } } else { @@ -1670,7 +1671,7 @@ bool Message::isMatchingAttribute(const std::string& attribute_name, bool Message::isMatchingAttributeRange(const std::string& attribute_name, AnyPtr initial_value, AnyPtr end_value) const { - ScopeLogger(attribute_name); + ScopeLogger("attribute name: %s", attribute_name.c_str()); using namespace MESSAGE_FILTER_ATTRIBUTE; if (TIMESTAMP == attribute_name) { diff --git a/src/messaging/message_conversation.cc b/src/messaging/message_conversation.cc index 5d1ea2c..3937eb4 100644 --- a/src/messaging/message_conversation.cc +++ b/src/messaging/message_conversation.cc @@ -473,7 +473,7 @@ bool MessageConversation::isMatchingAttribute(const std::string& attribute_name, bool MessageConversation::isMatchingAttributeRange(const std::string& attribute_name, AnyPtr initial_value, AnyPtr end_value) const { - ScopeLogger("attribute_name: " + attribute_name); + ScopeLogger("attribute_name: %s", attribute_name.c_str()); using namespace CONVERSATION_FILTER_ATTRIBUTE; diff --git a/src/messaging/message_service_email.cc b/src/messaging/message_service_email.cc index 9a8a874..ac15312 100644 --- a/src/messaging/message_service_email.cc +++ b/src/messaging/message_service_email.cc @@ -47,7 +47,7 @@ static gboolean sendMessageTask(void* data) { auto ret = callback->getEmailManager().sendMessage(callback); if (!ret) { - LoggerE("Error: %d - %s", ret.error_code(), ret.message().c_str()); + LoggerE("Error: %d - %s", static_cast(ret.error_code()), ret.message().c_str()); } return FALSE; @@ -116,7 +116,7 @@ static gboolean loadMessageAttachmentTask(void* data) { const auto ret = callback->getEmailManager().loadMessageAttachment(callback); if (!ret) { - LoggerE("Error: %d - %s", ret.error_code(), ret.message().c_str()); + LoggerE("Error: %d - %s", static_cast(ret.error_code()), ret.message().c_str()); } } } else { diff --git a/src/messaging/message_service_short_msg.cc b/src/messaging/message_service_short_msg.cc index a5ca744..235b483 100644 --- a/src/messaging/message_service_short_msg.cc +++ b/src/messaging/message_service_short_msg.cc @@ -54,7 +54,7 @@ static gboolean sendMessageThread(void* data) { auto ret = callback->getShortMsgManager().sendMessage(callback); if (!ret) { - LoggerE("Error: %d - %s", ret.error_code(), ret.message().c_str()); + LoggerE("Error: %d - %s", static_cast(ret.error_code()), ret.message().c_str()); } return FALSE; diff --git a/src/messaging/messages_change_callback.cc b/src/messaging/messages_change_callback.cc index d476d9c..e0567dc 100644 --- a/src/messaging/messages_change_callback.cc +++ b/src/messaging/messages_change_callback.cc @@ -81,17 +81,17 @@ MessagePtrVector MessagesChangeCallback::filterMessages(tizen::AbstractFilterPtr } LoggerD("[%d] is Message(%p) {", i, message.get()); - LoggerD("[%d] messageId: %d", i, message->getId()); - LoggerD("[%d] message subject: %s", i, message->getSubject().c_str()); - LoggerD("[%d] from: %s", i, message->getFrom().c_str()); + LoggerD("messageId: %d", message->getId()); + LoggerD("message subject: %s", message->getSubject().c_str()); + LoggerD("from: %s", message->getFrom().c_str()); if (message->getBody()) { const std::string& pBody = message->getBody()->getPlainBody(); - LoggerD("[%d] message plainBody: %s", i, limitedString(pBody).c_str()); + LoggerD("message plainBody: %s", limitedString(pBody).c_str()); } - LoggerD("[%d] matched filter: %s", i, matched ? "YES" : "NO"); - LoggerD("[%d] }"); + LoggerD("matched filter: %s", matched ? "YES" : "NO"); + LoggerD("}"); } LoggerD("returning matching %d of %d messages", filtered_messages.size(), diff --git a/src/messaging/messaging_database_manager.cc b/src/messaging/messaging_database_manager.cc index 4e4edff..f0df6e6 100644 --- a/src/messaging/messaging_database_manager.cc +++ b/src/messaging/messaging_database_manager.cc @@ -203,9 +203,9 @@ msg_error_t MessagingDatabaseManager::connect() { return MSG_ERR_DB_CONNECT; } - LoggerD("DB connecting success: [%d]", sqlHandle); + LoggerD("DB connecting success: [%p]", sqlHandle); } else { - LoggerD("DB connection exists: [%d]", sqlHandle); + LoggerD("DB connection exists: [%p]", sqlHandle); } return MSG_SUCCESS; @@ -474,7 +474,7 @@ PlatformResult MessagingDatabaseManager::getAttributeFilterQuery(AbstractFilterP break; default: - LoggerE("Unexpected folder ID: %d", folder_id); + LoggerE("Unexpected folder ID: %ld", static_cast(folder_id)); folder_id = -1; break; } diff --git a/src/messaging/short_message_manager.cc b/src/messaging/short_message_manager.cc index 6007a59..050971f 100644 --- a/src/messaging/short_message_manager.cc +++ b/src/messaging/short_message_manager.cc @@ -431,7 +431,7 @@ PlatformResult ShortMsgManager::callProperEventMessages(EventMessages* event, updated_conv.push_back(cur_conv); } - LoggerD("%s conversation with id:%d last_msg_id:d", (new_conv ? "ADDED" : "UPDATED"), + LoggerD("%s conversation with id:%d last_msg_id:%d", (new_conv ? "ADDED" : "UPDATED"), cur_conv->getConversationId(), cur_conv->getLastMessageId()); } @@ -675,7 +675,7 @@ void ShortMsgManager::addDraftMessage(MessageCallbackUserData* callback) { PlatformResult ret = addDraftMessagePlatform(message); if (ret.IsError()) { - LoggerE("%d (%s)", ret.error_code(), ret.message().c_str()); + LoggerE("%d (%s)", static_cast(ret.error_code()), ret.message().c_str()); callback->SetError(ret); } } @@ -892,7 +892,8 @@ void ShortMsgManager::findMessages(FindMsgCallbackUserData* callback) { PlatformResult ret = MessagingDatabaseManager::getInstance().findShortMessages(callback, &messagesIds); if (ret.IsError()) { - LoggerE("Failed to find short message: %s (%d)", ret.message().c_str(), ret.error_code()); + LoggerE("Failed to find short message: %s (%d)", ret.message().c_str(), + static_cast(ret.error_code())); callback->SetError(ret); } @@ -1090,7 +1091,7 @@ void ShortMsgManager::removeConversations(ConversationCallbackData* callback) { "saved MessageConversation(%p) with conv_id:%d", conv_index, msg_index, cur_msg_id, conv.get(), conv_id); } else { - LoggerE("[%d] Couldn't get msg_id, error: %d!", error); + LoggerE("[%d] Couldn't get msg_id, error: %s!", error, get_error_message(error)); } } } else { diff --git a/src/nfc/nfc_adapter.cc b/src/nfc/nfc_adapter.cc index cad6baa..0c81b29 100644 --- a/src/nfc/nfc_adapter.cc +++ b/src/nfc/nfc_adapter.cc @@ -846,7 +846,7 @@ PlatformResult NFCAdapter::TagNDEFSizeGetter(int /*tag_id*/, unsigned int* size) int err = nfc_tag_get_ndef_size(m_last_tag_handle, size); if (NFC_ERROR_NONE != err) { - LoggerE("Failed to get tag NDEF size: %d, %s", err); + LoggerE("Failed to get tag NDEF size: %d, %s", err, get_error_message(err)); return NFCUtil::CodeToResult(err, "Failed to get tag NDEF size"); } return PlatformResult(ErrorCode::NO_ERROR); @@ -1259,7 +1259,7 @@ PlatformResult NFCAdapter::GetCachedMessage(picojson::object& out) { PlatformResult ret = NFCMessageUtils::ReportNdefMessageFromData(raw_data, size, out); free(raw_data); if (ret.IsError()) { - LoggerE("Error: %d", ret.message().c_str()); + LoggerE("Error: %s", ret.message().c_str()); NFCMessageUtils::RemoveMessageHandle(message_handle); return ret; } diff --git a/src/notification/notification_manager.cc b/src/notification/notification_manager.cc index a7b3418..8d0a0e2 100644 --- a/src/notification/notification_manager.cc +++ b/src/notification/notification_manager.cc @@ -236,7 +236,7 @@ PlatformResult NotificationManager::PlayLEDCustomEffect(const picojson::object& ret = device_led_play_custom(timeOn, timeOff, color, platformFlags); if (DEVICE_ERROR_NONE != ret) { return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Cannot play LED custom effect", - ("Cannot play LED custom effect: ", ret)); + ("Cannot play LED custom effect: %d", ret)); } return PlatformResult(ErrorCode::NO_ERROR); @@ -248,7 +248,7 @@ PlatformResult NotificationManager::StopLEDCustomEffect() { int ret = device_led_stop_custom(); if (DEVICE_ERROR_NONE != ret) { return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Cannot stop LED custom effect", - ("Cannot stop LED custom effect: ", ret)); + ("Cannot stop LED custom effect: %d", ret)); } return PlatformResult(ErrorCode::NO_ERROR); diff --git a/src/radio/radio_manager.cc b/src/radio/radio_manager.cc index e33cd4c..2e9ea1e 100644 --- a/src/radio/radio_manager.cc +++ b/src/radio/radio_manager.cc @@ -353,7 +353,7 @@ FMRadioManager::~FMRadioManager() { } PlatformResult FMRadioManager::Start(double frequency) { - ScopeLogger("freq: %d", frequency); + ScopeLogger("freq: %lf", frequency); radio_state_e state; const auto err = radio_get_state(radio_instance_, &state); diff --git a/src/sensor/sensor_service.cc b/src/sensor/sensor_service.cc index 8c65220..1dcc339 100644 --- a/src/sensor/sensor_service.cc +++ b/src/sensor/sensor_service.cc @@ -284,7 +284,7 @@ SensorData::SensorData(SensorInstance& instance, sensor_type_e type_enum, const } SensorData::~SensorData() { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); if (listener_) { sensor_destroy_listener(listener_); @@ -337,7 +337,7 @@ void SensorData::SensorCallback(sensor_h sensor, sensor_event_s* event, void* us } PlatformResult SensorData::CheckInitialization() { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); std::lock_guard lock(initialization_mutex_); if (!handle_) { @@ -360,7 +360,7 @@ PlatformResult SensorData::CheckInitialization() { } PlatformResult SensorData::IsSupported(bool* supported) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); if (!is_supported_) { bool is_supported = false; @@ -377,7 +377,7 @@ PlatformResult SensorData::IsSupported(bool* supported) { } PlatformResult SensorData::IsSupportedImpl(bool* supported) const { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); bool is_supported = false; int ret = sensor_is_supported(type_enum_, &is_supported); @@ -392,7 +392,7 @@ PlatformResult SensorData::IsSupportedImpl(bool* supported) const { } bool SensorData::is_supported() { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); if (!is_supported_) { bool is_supported = false; @@ -408,7 +408,7 @@ bool SensorData::is_supported() { } bool SensorData::UpdateEvent(sensor_event_s* event) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); if (comparator_(&previous_event_, event, sensor_value_count_)) { // previous and current events are the same -> no update @@ -444,7 +444,7 @@ PlatformResult SensorData::AddDelayedStartSuccessCb(const std::function& PlatformResult SensorData::Start( const std::shared_ptr& result, const std::function&)>& report_result) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); auto res = CheckInitialization(); if (!res) { @@ -484,7 +484,7 @@ PlatformResult SensorData::Start( } PlatformResult SensorData::Stop() { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); auto res = CheckInitialization(); @@ -513,7 +513,7 @@ PlatformResult SensorData::Stop() { } PlatformResult SensorData::SetChangeListener(unsigned int interval, unsigned int batch_latency) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); auto res = CheckInitialization(); @@ -544,7 +544,7 @@ PlatformResult SensorData::SetChangeListener(unsigned int interval, unsigned int } PlatformResult SensorData::UnsetChangeListener() { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); auto res = CheckInitialization(); @@ -568,7 +568,7 @@ PlatformResult SensorData::UnsetChangeListener() { } PlatformResult SensorData::GetSensorData(picojson::object* data) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); auto res = CheckInitialization(); @@ -590,7 +590,7 @@ PlatformResult SensorData::GetSensorData(picojson::object* data) { } PlatformResult SensorData::GetHardwareInfo(picojson::object* data) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); auto res = CheckInitialization(); @@ -629,42 +629,42 @@ PlatformResult SensorData::GetHardwareInfo(picojson::object* data) { int ret = sensor_get_name(handle_, &name); if (ret != SENSOR_ERROR_NONE) { - LoggerE("Failed to sensor_get_name error code: %d", &ret); + LoggerE("Failed to sensor_get_name error code: %d", ret); return native_result(ret); } ret = sensor_get_vendor(handle_, &vendor); if (ret != SENSOR_ERROR_NONE) { - LoggerE("Failed to sensor_get_vendor error code: %d", &ret); + LoggerE("Failed to sensor_get_vendor error code: %d", ret); return native_result(ret); } ret = sensor_get_type(handle_, &type); if (ret != SENSOR_ERROR_NONE) { - LoggerE("Failed to sensor_get_type error code: %d", &ret); + LoggerE("Failed to sensor_get_type error code: %d", ret); return native_result(ret); } ret = sensor_get_min_range(handle_, &min_range); if (ret != SENSOR_ERROR_NONE) { - LoggerE("Failed to sensor_get_min_range error code: %d", &ret); + LoggerE("Failed to sensor_get_min_range error code: %d", ret); return native_result(ret); } ret = sensor_get_max_range(handle_, &max_range); if (ret != SENSOR_ERROR_NONE) { - LoggerE("Failed to sensor_get_max_range error code: %d", &ret); + LoggerE("Failed to sensor_get_max_range error code: %d", ret); return native_result(ret); } ret = sensor_get_resolution(handle_, &resolution); if (ret != SENSOR_ERROR_NONE) { - LoggerE("Failed to sensor_get_resolution error code: %d", &ret); + LoggerE("Failed to sensor_get_resolution error code: %d", ret); return native_result(ret); } ret = sensor_get_min_interval(handle_, &min_interval); if (ret != SENSOR_ERROR_NONE) { - LoggerE("Failed to sensor_get_min_interval error code: %d", &ret); + LoggerE("Failed to sensor_get_min_interval error code: %d", ret); return native_result(ret); } ret = sensor_get_max_batch_count(handle_, &max_batch_count); if (ret != SENSOR_ERROR_NONE) { - LoggerE("Failed to sensor_get_max_batch_count error code: %d", &ret); + LoggerE("Failed to sensor_get_max_batch_count error code: %d", ret); return native_result(ret); } @@ -710,7 +710,7 @@ class HrmSensorData : public SensorData { HrmSensorData::HrmSensorData(SensorInstance& instance) : SensorData(instance, SENSOR_CUSTOM, "HRM_RAW", 1) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); // For amount of retrieved values from sensors please refer to native guides. AddSensor(new SensorData(instance, SENSOR_HRM_LED_IR, "LED_IR", 1)); AddSensor(new SensorData(instance, SENSOR_HRM_LED_RED, "LED_RED", 1)); @@ -718,16 +718,16 @@ HrmSensorData::HrmSensorData(SensorInstance& instance) } HrmSensorData::~HrmSensorData() { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); } void HrmSensorData::AddSensor(SensorData* sensor) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); hrm_sensors_.insert(std::make_pair(sensor->type(), std::shared_ptr(sensor))); } PlatformResult HrmSensorData::CallMember(PlatformResult (SensorData::*member)()) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); bool is_any_supported = false; for (const auto& sensor : hrm_sensors_) { if (sensor.second->is_supported()) { @@ -751,7 +751,7 @@ PlatformResult HrmSensorData::CallMember( const std::function&)>&), const std::shared_ptr& result, const std::function&)>& work) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); bool is_any_supported = false; for (const auto& sensor : hrm_sensors_) { if (sensor.second->is_supported()) { @@ -770,7 +770,7 @@ PlatformResult HrmSensorData::CallMember( } PlatformResult HrmSensorData::IsSupportedImpl(bool* supported) const { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); bool result = false; for (const auto& sensor : hrm_sensors_) { @@ -790,17 +790,17 @@ PlatformResult HrmSensorData::IsSupportedImpl(bool* supported) const { PlatformResult HrmSensorData::Start( const std::shared_ptr& result, const std::function&)>& work) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); return CallMember(&SensorData::Start, result, work); } PlatformResult HrmSensorData::Stop() { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); return CallMember(&SensorData::Stop); } PlatformResult HrmSensorData::SetChangeListener(unsigned int interval, unsigned int batch_latency) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); for (const auto& sensor : hrm_sensors_) { if (sensor.second->is_supported()) { auto res = sensor.second->SetChangeListener(interval, batch_latency); @@ -813,12 +813,12 @@ PlatformResult HrmSensorData::SetChangeListener(unsigned int interval, unsigned } PlatformResult HrmSensorData::UnsetChangeListener() { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); return CallMember(&SensorData::UnsetChangeListener); } PlatformResult HrmSensorData::GetSensorData(picojson::object* data) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); for (const auto& sensor : hrm_sensors_) { if (sensor.second->is_supported()) { // HRMRawSensor.getHRMRawSensorData() can return only one value, @@ -840,7 +840,7 @@ PlatformResult HrmSensorData::GetSensorData(picojson::object* data) { } PlatformResult HrmSensorData::GetHardwareInfo(picojson::object* data) { - ScopeLogger(type_to_string_map[type()]); + ScopeLogger("type: %s", type_to_string_map[type()].c_str()); for (const auto& sensor : hrm_sensors_) { if (sensor.second->is_supported()) { return sensor.second->GetHardwareInfo(data); diff --git a/src/sound/sound_manager.cc b/src/sound/sound_manager.cc index 3174436..8c98163 100644 --- a/src/sound/sound_manager.cc +++ b/src/sound/sound_manager.cc @@ -274,7 +274,7 @@ PlatformResult SoundManager::SetVolume(const picojson::object& args) { auto it = max_volume_map_.find(sound_type); if (it == max_volume_map_.end()) { return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Failed to find maxVolume", - ("Failed to find maxVolume of type: %d", type.c_str())); + ("Failed to find maxVolume of type: %s", type.c_str())); } int max_volume = it->second; -- 2.7.4 From e9969e132ec7ced15469c0511a26852dedfdb836 Mon Sep 17 00:00:00 2001 From: Lukasz Bardeli Date: Mon, 4 Dec 2017 15:49:52 +0100 Subject: [PATCH 06/16] [Iotcon] Fix preventing crash. Fix with adding id to vector to hold information about possible remote resources. If id is present in vector then map with remote resources is checked if pointer exist. If not then callback is ignored [Verification] Tested in chrome console. TCT auto tests 100% Change-Id: I2032e0c8c93846ef84ac871944bbf326b8eafac7 Signed-off-by: Lukasz Bardeli --- src/iotcon/iotcon_client_manager.cc | 37 +++++++++++++++++++++++++++++ src/iotcon/iotcon_client_manager.h | 5 ++++ src/iotcon/iotcon_instance.cc | 46 +++++++++++++++++++++++++------------ src/iotcon/iotcon_utils.h | 1 + 4 files changed, 74 insertions(+), 15 deletions(-) diff --git a/src/iotcon/iotcon_client_manager.cc b/src/iotcon/iotcon_client_manager.cc index bfa83fe..e34193f 100644 --- a/src/iotcon/iotcon_client_manager.cc +++ b/src/iotcon/iotcon_client_manager.cc @@ -43,6 +43,42 @@ IotconClientManager& IotconClientManager::GetInstance() { return instance; } +long long* IotconClientManager::Add(long long id) { + ScopeLogger(); + ids_.push_back(new long long(id)); + return ids_.back(); +} + +void IotconClientManager::Remove(long long id) { + ScopeLogger(); + auto it = ids_.end(); + while (it > ids_.begin()) { + --it; + if (**it == id) { + ids_.erase(it); + return; + } + } +} + +bool IotconClientManager::IfExists(long long id) { + ScopeLogger(); + for (auto v : ids_) { + if (*v == id) { + return true; + } + } + return false; +} + +FoundRemoteInfoPtr IotconClientManager::GetFoundRemoteInfoPtr(long long id) { + ScopeLogger(); + if (IfExists(id)) { + return remotes_map_.at(id); + } + return nullptr; +} + void IotconClientManager::PresenceHandler(iotcon_presence_h presence, iotcon_error_e err, iotcon_presence_response_h response, void* user_data) { ScopeLogger(); @@ -118,6 +154,7 @@ picojson::value IotconClientManager::RemoveRemoteResource(FoundRemoteInfoPtr ptr ptr->ref_count--; if (ptr->ref_count <= 0) { LoggerD("Handle not needed anymore, removing from map"); + Remove(ptr->id); remotes_map_.erase(ptr->id); return PrepareManageIdAnswer(false); } diff --git a/src/iotcon/iotcon_client_manager.h b/src/iotcon/iotcon_client_manager.h index 56bd87e..f3fccef 100644 --- a/src/iotcon/iotcon_client_manager.h +++ b/src/iotcon/iotcon_client_manager.h @@ -42,6 +42,10 @@ class IotconClientManager { picojson::value RemoveRemoteResource(FoundRemoteInfoPtr ptr); common::TizenResult GetRemoteById(long long id, FoundRemoteInfoPtr* res_pointer) const; picojson::value PrepareManageIdAnswer(bool keep_id, long long id = 0); + long long* Add(long long id); + void Remove(long long id); + bool IfExists(long long id); + FoundRemoteInfoPtr GetFoundRemoteInfoPtr(long long id); private: IotconClientManager() = default; @@ -55,6 +59,7 @@ class IotconClientManager { PresenceMap presence_map_; FoundRemotesMap remotes_map_; + IdVector ids_; }; } // namespace iotcon diff --git a/src/iotcon/iotcon_instance.cc b/src/iotcon/iotcon_instance.cc index c71deeb..1ca926d 100644 --- a/src/iotcon/iotcon_instance.cc +++ b/src/iotcon/iotcon_instance.cc @@ -936,9 +936,12 @@ common::TizenResult IotconInstance::RemoteResourceMethodDelete(const picojson::o static void ObserveCallback(iotcon_remote_resource_h resource, iotcon_error_e err, int sequence_number, iotcon_response_h response, void* user_data) { ScopeLogger(); - FoundRemoteInfo* ptr = static_cast(user_data); + long long* id = static_cast(user_data); + + FoundRemoteInfoPtr ptr = IotconClientManager::GetInstance().GetFoundRemoteInfoPtr(*id); + if (nullptr == ptr) { - LoggerE("ObserveCallback() failed. Ignoring callback"); + LoggerE("ObserveCallback() failed. Ignoring callback"); return; } @@ -1015,14 +1018,17 @@ common::TizenResult IotconInstance::RemoteResourceStartObserving(const picojson: } } - result = IotconUtils::ConvertIotconError(iotcon_remote_resource_observe_register( - ptr->handle, observe_policy, query, ObserveCallback, ptr.get())); + picojson::value ret = IotconClientManager::GetInstance().StoreRemoteResource(ptr); + result = IotconUtils::ConvertIotconError( + iotcon_remote_resource_observe_register(ptr->handle, observe_policy, query, ObserveCallback, + IotconClientManager::GetInstance().Add(ptr->id))); if (!result) { + IotconClientManager::GetInstance().RemoveRemoteResource(ptr); return result; } observing_started_ = true; - return common::TizenSuccess{IotconClientManager::GetInstance().StoreRemoteResource(ptr)}; + return common::TizenSuccess{ret}; } common::TizenResult IotconInstance::RemoteResourceStopObserving(const picojson::object& args) { @@ -1078,9 +1084,12 @@ common::TizenResult IotconInstance::RemoteResourceStopObserving(const picojson:: static void RepresentationChangedCallback(iotcon_remote_resource_h resource, iotcon_representation_h representation, void* user_data) { ScopeLogger(); - FoundRemoteInfo* ptr = static_cast(user_data); + long long* id = static_cast(user_data); + + FoundRemoteInfoPtr ptr = IotconClientManager::GetInstance().GetFoundRemoteInfoPtr(*id); + if (nullptr == ptr) { - LoggerE("RepresentationChangeCallback() failed. Ignoring callback"); + LoggerE("RepresentationChangeCallback() failed. Ignoring callback"); return; } @@ -1121,14 +1130,16 @@ common::TizenResult IotconInstance::RemoteResourceStartCaching(const picojson::o Post(kRemoteResourceCacheChangeListener, common::TizenSuccess{response}); }; - result = IotconUtils::ConvertIotconError( - iotcon_remote_resource_start_caching(ptr->handle, RepresentationChangedCallback, ptr.get())); + picojson::value ret = IotconClientManager::GetInstance().StoreRemoteResource(ptr); + result = IotconUtils::ConvertIotconError(iotcon_remote_resource_start_caching( + ptr->handle, RepresentationChangedCallback, IotconClientManager::GetInstance().Add(ptr->id))); if (!result) { + IotconClientManager::GetInstance().RemoveRemoteResource(ptr); return result; } caching_started_ = true; - return common::TizenSuccess{IotconClientManager::GetInstance().StoreRemoteResource(ptr)}; + return common::TizenSuccess{ret}; } common::TizenResult IotconInstance::RemoteResourceStopCaching(const picojson::object& args) { @@ -1164,9 +1175,12 @@ common::TizenResult IotconInstance::RemoteResourceStopCaching(const picojson::ob static void MonitoringCallback(iotcon_remote_resource_h resource, iotcon_remote_resource_state_e state, void* user_data) { ScopeLogger(); - FoundRemoteInfo* ptr = static_cast(user_data); + long long* id = static_cast(user_data); + + FoundRemoteInfoPtr ptr = IotconClientManager::GetInstance().GetFoundRemoteInfoPtr(*id); + if (nullptr == ptr) { - LoggerE("MonitoringCallback() failed. Ignoring callback"); + LoggerE("MonitoringCallback() failed. Ignoring callback"); return; } @@ -1201,13 +1215,15 @@ common::TizenResult IotconInstance::RemoteResourceSetResourceStateChangeListener Post(kRemoteResourceStateChangeListener, common::TizenSuccess{response}); }; - result = IotconUtils::ConvertIotconError( - iotcon_remote_resource_start_monitoring(ptr->handle, MonitoringCallback, ptr.get())); + picojson::value ret = IotconClientManager::GetInstance().StoreRemoteResource(ptr); + result = IotconUtils::ConvertIotconError(iotcon_remote_resource_start_monitoring( + ptr->handle, MonitoringCallback, IotconClientManager::GetInstance().Add(ptr->id))); if (!result) { + IotconClientManager::GetInstance().RemoveRemoteResource(ptr); return result; } monitoring_started_ = true; - return common::TizenSuccess{IotconClientManager::GetInstance().StoreRemoteResource(ptr)}; + return common::TizenSuccess{ret}; } common::TizenResult IotconInstance::RemoteResourceUnsetResourceStateChangeListener( diff --git a/src/iotcon/iotcon_utils.h b/src/iotcon/iotcon_utils.h index aa37b5d..47a75c9 100644 --- a/src/iotcon/iotcon_utils.h +++ b/src/iotcon/iotcon_utils.h @@ -78,6 +78,7 @@ typedef std::shared_ptr PresenceEventPtr; typedef std::map PresenceMap; typedef std::shared_ptr FoundRemoteInfoPtr; typedef std::map FoundRemotesMap; +typedef std::vector IdVector; using ResponsePtr = std::shared_ptr::type>; -- 2.7.4 From 230291fd01d0426f95001a2fba49684eb047b437 Mon Sep 17 00:00:00 2001 From: Lukasz Bardeli Date: Mon, 4 Dec 2017 15:49:52 +0100 Subject: [PATCH 07/16] [Iotcon] Fix preventing crash. Fix with adding id to vector to hold information about possible remote resources. If id is present in vector then map with remote resources is checked if pointer exist. If not then callback is ignored [Verification] Tested in chrome console. TCT auto tests 100% Change-Id: I2032e0c8c93846ef84ac871944bbf326b8eafac7 Signed-off-by: Lukasz Bardeli --- src/iotcon/iotcon_client_manager.cc | 37 +++++++++++++++++++++++++++++ src/iotcon/iotcon_client_manager.h | 5 ++++ src/iotcon/iotcon_instance.cc | 46 +++++++++++++++++++++++++------------ src/iotcon/iotcon_utils.h | 1 + 4 files changed, 74 insertions(+), 15 deletions(-) diff --git a/src/iotcon/iotcon_client_manager.cc b/src/iotcon/iotcon_client_manager.cc index bfa83fe..e34193f 100644 --- a/src/iotcon/iotcon_client_manager.cc +++ b/src/iotcon/iotcon_client_manager.cc @@ -43,6 +43,42 @@ IotconClientManager& IotconClientManager::GetInstance() { return instance; } +long long* IotconClientManager::Add(long long id) { + ScopeLogger(); + ids_.push_back(new long long(id)); + return ids_.back(); +} + +void IotconClientManager::Remove(long long id) { + ScopeLogger(); + auto it = ids_.end(); + while (it > ids_.begin()) { + --it; + if (**it == id) { + ids_.erase(it); + return; + } + } +} + +bool IotconClientManager::IfExists(long long id) { + ScopeLogger(); + for (auto v : ids_) { + if (*v == id) { + return true; + } + } + return false; +} + +FoundRemoteInfoPtr IotconClientManager::GetFoundRemoteInfoPtr(long long id) { + ScopeLogger(); + if (IfExists(id)) { + return remotes_map_.at(id); + } + return nullptr; +} + void IotconClientManager::PresenceHandler(iotcon_presence_h presence, iotcon_error_e err, iotcon_presence_response_h response, void* user_data) { ScopeLogger(); @@ -118,6 +154,7 @@ picojson::value IotconClientManager::RemoveRemoteResource(FoundRemoteInfoPtr ptr ptr->ref_count--; if (ptr->ref_count <= 0) { LoggerD("Handle not needed anymore, removing from map"); + Remove(ptr->id); remotes_map_.erase(ptr->id); return PrepareManageIdAnswer(false); } diff --git a/src/iotcon/iotcon_client_manager.h b/src/iotcon/iotcon_client_manager.h index 56bd87e..f3fccef 100644 --- a/src/iotcon/iotcon_client_manager.h +++ b/src/iotcon/iotcon_client_manager.h @@ -42,6 +42,10 @@ class IotconClientManager { picojson::value RemoveRemoteResource(FoundRemoteInfoPtr ptr); common::TizenResult GetRemoteById(long long id, FoundRemoteInfoPtr* res_pointer) const; picojson::value PrepareManageIdAnswer(bool keep_id, long long id = 0); + long long* Add(long long id); + void Remove(long long id); + bool IfExists(long long id); + FoundRemoteInfoPtr GetFoundRemoteInfoPtr(long long id); private: IotconClientManager() = default; @@ -55,6 +59,7 @@ class IotconClientManager { PresenceMap presence_map_; FoundRemotesMap remotes_map_; + IdVector ids_; }; } // namespace iotcon diff --git a/src/iotcon/iotcon_instance.cc b/src/iotcon/iotcon_instance.cc index c71deeb..1ca926d 100644 --- a/src/iotcon/iotcon_instance.cc +++ b/src/iotcon/iotcon_instance.cc @@ -936,9 +936,12 @@ common::TizenResult IotconInstance::RemoteResourceMethodDelete(const picojson::o static void ObserveCallback(iotcon_remote_resource_h resource, iotcon_error_e err, int sequence_number, iotcon_response_h response, void* user_data) { ScopeLogger(); - FoundRemoteInfo* ptr = static_cast(user_data); + long long* id = static_cast(user_data); + + FoundRemoteInfoPtr ptr = IotconClientManager::GetInstance().GetFoundRemoteInfoPtr(*id); + if (nullptr == ptr) { - LoggerE("ObserveCallback() failed. Ignoring callback"); + LoggerE("ObserveCallback() failed. Ignoring callback"); return; } @@ -1015,14 +1018,17 @@ common::TizenResult IotconInstance::RemoteResourceStartObserving(const picojson: } } - result = IotconUtils::ConvertIotconError(iotcon_remote_resource_observe_register( - ptr->handle, observe_policy, query, ObserveCallback, ptr.get())); + picojson::value ret = IotconClientManager::GetInstance().StoreRemoteResource(ptr); + result = IotconUtils::ConvertIotconError( + iotcon_remote_resource_observe_register(ptr->handle, observe_policy, query, ObserveCallback, + IotconClientManager::GetInstance().Add(ptr->id))); if (!result) { + IotconClientManager::GetInstance().RemoveRemoteResource(ptr); return result; } observing_started_ = true; - return common::TizenSuccess{IotconClientManager::GetInstance().StoreRemoteResource(ptr)}; + return common::TizenSuccess{ret}; } common::TizenResult IotconInstance::RemoteResourceStopObserving(const picojson::object& args) { @@ -1078,9 +1084,12 @@ common::TizenResult IotconInstance::RemoteResourceStopObserving(const picojson:: static void RepresentationChangedCallback(iotcon_remote_resource_h resource, iotcon_representation_h representation, void* user_data) { ScopeLogger(); - FoundRemoteInfo* ptr = static_cast(user_data); + long long* id = static_cast(user_data); + + FoundRemoteInfoPtr ptr = IotconClientManager::GetInstance().GetFoundRemoteInfoPtr(*id); + if (nullptr == ptr) { - LoggerE("RepresentationChangeCallback() failed. Ignoring callback"); + LoggerE("RepresentationChangeCallback() failed. Ignoring callback"); return; } @@ -1121,14 +1130,16 @@ common::TizenResult IotconInstance::RemoteResourceStartCaching(const picojson::o Post(kRemoteResourceCacheChangeListener, common::TizenSuccess{response}); }; - result = IotconUtils::ConvertIotconError( - iotcon_remote_resource_start_caching(ptr->handle, RepresentationChangedCallback, ptr.get())); + picojson::value ret = IotconClientManager::GetInstance().StoreRemoteResource(ptr); + result = IotconUtils::ConvertIotconError(iotcon_remote_resource_start_caching( + ptr->handle, RepresentationChangedCallback, IotconClientManager::GetInstance().Add(ptr->id))); if (!result) { + IotconClientManager::GetInstance().RemoveRemoteResource(ptr); return result; } caching_started_ = true; - return common::TizenSuccess{IotconClientManager::GetInstance().StoreRemoteResource(ptr)}; + return common::TizenSuccess{ret}; } common::TizenResult IotconInstance::RemoteResourceStopCaching(const picojson::object& args) { @@ -1164,9 +1175,12 @@ common::TizenResult IotconInstance::RemoteResourceStopCaching(const picojson::ob static void MonitoringCallback(iotcon_remote_resource_h resource, iotcon_remote_resource_state_e state, void* user_data) { ScopeLogger(); - FoundRemoteInfo* ptr = static_cast(user_data); + long long* id = static_cast(user_data); + + FoundRemoteInfoPtr ptr = IotconClientManager::GetInstance().GetFoundRemoteInfoPtr(*id); + if (nullptr == ptr) { - LoggerE("MonitoringCallback() failed. Ignoring callback"); + LoggerE("MonitoringCallback() failed. Ignoring callback"); return; } @@ -1201,13 +1215,15 @@ common::TizenResult IotconInstance::RemoteResourceSetResourceStateChangeListener Post(kRemoteResourceStateChangeListener, common::TizenSuccess{response}); }; - result = IotconUtils::ConvertIotconError( - iotcon_remote_resource_start_monitoring(ptr->handle, MonitoringCallback, ptr.get())); + picojson::value ret = IotconClientManager::GetInstance().StoreRemoteResource(ptr); + result = IotconUtils::ConvertIotconError(iotcon_remote_resource_start_monitoring( + ptr->handle, MonitoringCallback, IotconClientManager::GetInstance().Add(ptr->id))); if (!result) { + IotconClientManager::GetInstance().RemoveRemoteResource(ptr); return result; } monitoring_started_ = true; - return common::TizenSuccess{IotconClientManager::GetInstance().StoreRemoteResource(ptr)}; + return common::TizenSuccess{ret}; } common::TizenResult IotconInstance::RemoteResourceUnsetResourceStateChangeListener( diff --git a/src/iotcon/iotcon_utils.h b/src/iotcon/iotcon_utils.h index aa37b5d..47a75c9 100644 --- a/src/iotcon/iotcon_utils.h +++ b/src/iotcon/iotcon_utils.h @@ -78,6 +78,7 @@ typedef std::shared_ptr PresenceEventPtr; typedef std::map PresenceMap; typedef std::shared_ptr FoundRemoteInfoPtr; typedef std::map FoundRemotesMap; +typedef std::vector IdVector; using ResponsePtr = std::shared_ptr::type>; -- 2.7.4 From 2ed280b87960093bb0ff88b85a75dd5be3012cf9 Mon Sep 17 00:00:00 2001 From: Rafal Walczyna Date: Tue, 5 Dec 2017 13:39:17 +0100 Subject: [PATCH 08/16] [Application] Killing and launching moved to main thread Because of the fact that appfw APIs are not thread safe some functions need to be called from main thread [Verification] 100% passrate on TM1: tct-appcontrol-tizen-tests tct-application-tizen-tests Change-Id: I092cc84e2ac244cfd6439566c3c65a5e2652813c Signed-off-by: Rafal Walczyna --- src/application/application_manager.cc | 72 ++++++---------------------------- 1 file changed, 12 insertions(+), 60 deletions(-) diff --git a/src/application/application_manager.cc b/src/application/application_manager.cc index 6557a50..8744c0c 100644 --- a/src/application/application_manager.cc +++ b/src/application/application_manager.cc @@ -169,42 +169,7 @@ class TerminateHandler { response); } - void LaunchCheckTerminate() { - ScopeLogger(); - timeout_id_ = g_timeout_add(3000, CheckTerminate, this); - LoggerD("END"); - } - private: - static gboolean CheckTerminate(gpointer user_data) { - ScopeLogger(); - TerminateHandler* that = static_cast(user_data); - LoggerD("PID: %d", that->pid_); - - // we're canceling the callback by returning false, no need for Invoke() to do that again - that->timeout_id_ = 0; - - char* app_id = nullptr; - std::shared_ptr response{new picojson::value(picojson::object())}; - - LoggerD("checking if application is still alive"); - int ret = app_manager_get_app_id(that->pid_, &app_id); - if (APP_MANAGER_ERROR_NONE == ret) { - free(app_id); - // context is still alive, report error - LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to kill application."), - &response->get(), ("application is alive - failure")); - } else { - LoggerD("application is dead - success: %d (%s)", ret, get_error_message(ret)); - ReportSuccess(response->get()); - } - - that->Invoke(response); - delete that; - - return false; - } - int callback_handle_; pid_t pid_; guint timeout_id_; @@ -264,7 +229,7 @@ void ApplicationManager::Kill(const picojson::value& args) { } auto kill = [this, callback_id, context_id]() -> void { - ScopeLogger("Kill async"); + ScopeLogger("Kill"); std::shared_ptr response = std::shared_ptr(new picojson::value(picojson::object())); @@ -292,7 +257,7 @@ void ApplicationManager::Kill(const picojson::value& args) { CHECK_RESULT(result, response, handler) } - LoggerD("Kill async, pid: %d", pid); + LoggerD("Kill, pid: %d", pid); char* app_id = nullptr; int ret = app_manager_get_app_id(pid, &app_id); @@ -306,7 +271,7 @@ void ApplicationManager::Kill(const picojson::value& args) { CHECK_RESULT(result, response, handler) } - LoggerD("Kill async, app ID: %s", app_id); + LoggerD("Kill, app ID: %s", app_id); // acquire application context app_context_h app_context = nullptr; @@ -352,7 +317,7 @@ void ApplicationManager::Kill(const picojson::value& args) { } }; - LoggerD("Kill async, setting callback"); + LoggerD("Kill, setting callback"); handler->set_pid(pid); ret = app_manager_set_app_context_event_cb(terminate_callback, handler); @@ -363,12 +328,7 @@ void ApplicationManager::Kill(const picojson::value& args) { CHECK_RESULT(result, response, handler) } - // due to platform issue, sometimes termination event is not reported to callback - // registered with app_manager_set_app_context_event_cb() - // this is a workaround, it should be removed when issue is solved - // handler->LaunchCheckTerminate(); - - LoggerD("Kill async, KILL!!!!!!!!!"); + LoggerD("Kill, calling native function"); // terminate application ret = app_manager_terminate_app(app_context); @@ -380,10 +340,10 @@ void ApplicationManager::Kill(const picojson::value& args) { CHECK_RESULT(result, response, handler) } - LoggerD("Kill async, end, waiting for notification"); + LoggerD("Kill, end, waiting for notification"); }; - TaskQueue::GetInstance().Queue(kill); + kill(); } void ApplicationManager::Launch(const picojson::value& args) { @@ -409,7 +369,7 @@ void ApplicationManager::Launch(const picojson::value& args) { const std::string& id = app_id.get(); auto launch = [id](const std::shared_ptr& response) -> void { - ScopeLogger("Entered into asynchronous function, launch"); + ScopeLogger("launch"); PlatformResult result = PlatformResult(ErrorCode::NO_ERROR); const char* app_id = id.c_str(); const int retry_count = 3; @@ -458,11 +418,8 @@ void ApplicationManager::Launch(const picojson::value& args) { } }; - auto launch_response = [this](const std::shared_ptr& response) -> void { - Instance::PostMessage(&this->instance_, response->serialize().c_str()); - }; - - TaskQueue::GetInstance().Queue(launch, launch_response, response); + launch(response); + Instance::PostMessage(&this->instance_, response->serialize().c_str()); } void ApplicationManager::LaunchAppControl(const picojson::value& args) { @@ -651,13 +608,8 @@ void ApplicationManager::LaunchAppControl(const picojson::value& args) { ReportSuccess(response->get()); }; - auto launch_response = [this](const std::shared_ptr& response) -> void { - ScopeLogger("launch_response"); - - Instance::PostMessage(&this->instance_, response->serialize().c_str()); - }; - - TaskQueue::GetInstance().Queue(launch, launch_response, response); + launch(response); + Instance::PostMessage(&this->instance_, response->serialize().c_str()); } // internal impl of app_control_foreach_app_matched() for handling APP_CONTROL_ERROR_APP_NOT_FOUND -- 2.7.4 From 0b5af23df3df83472ef48158a9e438e1666c28a7 Mon Sep 17 00:00:00 2001 From: Piotr Kosko Date: Wed, 6 Dec 2017 09:57:40 +0100 Subject: [PATCH 09/16] [Package] Fix SVACE issue - memory leak [Fix] pkg_info is now destroyed properly [Verification] TCT auto and manual 100% passrate Change-Id: I2918fd9eeb85d1ca983f0770af6371f0a1f8a16b Signed-off-by: Piotr Kosko --- src/package/package_instance.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/package/package_instance.cc b/src/package/package_instance.cc index 0bf31f7..d0a1147 100644 --- a/src/package/package_instance.cc +++ b/src/package/package_instance.cc @@ -359,6 +359,8 @@ void PackageInstance::PackageManagerUninstall(const picojson::value& args, picoj "any other platform error occurs")); } } else { + // pkg_info was gathered in this case, need to release memory - it is not needed + package_info_destroy(pkg_info); int request_id = 0; int ret = package_manager_request_uninstall(request_, id.c_str(), &request_id); if (ret != PACKAGE_MANAGER_ERROR_NONE) { -- 2.7.4 From 57a7a7d68663b364ff5ba61d0bd34289041da9ee Mon Sep 17 00:00:00 2001 From: Michal Bistyga Date: Mon, 27 Nov 2017 14:20:25 +0100 Subject: [PATCH 10/16] [Bluetooth] Fix bug with ConnectStateChangeListener ConnectStateChangeListener's onConnected callback has been called even when connection failed. [Verification] 1) automatic bluetooth tests have pass rate 100% 2) All manual tests related to add*/removeConnectStateChangeListener functions passed. Change-Id: Ic765cc6710c64f82132c96f4b76edcd62bc69305 Signed-off-by: Michal Bistyga Signed-off-by: Piotr Kosko --- src/bluetooth/bluetooth_le_device.cc | 84 +++++++++++++++++++++++------------- src/bluetooth/bluetooth_le_device.h | 6 ++- 2 files changed, 59 insertions(+), 31 deletions(-) diff --git a/src/bluetooth/bluetooth_le_device.cc b/src/bluetooth/bluetooth_le_device.cc index c10ebc8..b0f6413 100644 --- a/src/bluetooth/bluetooth_le_device.cc +++ b/src/bluetooth/bluetooth_le_device.cc @@ -426,22 +426,63 @@ void BluetoothLEDevice::GetServiceAllUuids(const picojson::value& data, picojson void BluetoothLEDevice::GattConnectionState(int result, bool connected, const char* remote_address, void* user_data) { ScopeLogger("%s connected: %d", remote_address, connected); - auto le_device = static_cast(user_data); - - if (!le_device) { + if (!user_data) { LoggerE("user_data is NULL"); return; } + BluetoothLEDevice* le_device = static_cast(user_data); + + // check state change success + PlatformResult operation_success = ValidateConnectionChange(result); + if (operation_success) { + if (connected) { // connect success + le_device->is_connected_.insert(remote_address); + } else { // disconnect success + le_device->CleanClientInfo(remote_address); + } + } - if (connected) { - le_device->is_connected_.insert(remote_address); + // trigger connect/disconnect callback (success or error) + le_device->TriggerConnectCallback(remote_address, operation_success); + + // trigger state change listener, if operation succeed + if (operation_success) { + le_device->TriggerConnectStateChangeListener(remote_address, connected); + } +} + +PlatformResult BluetoothLEDevice::ValidateConnectionChange(int err_code) { + ScopeLogger(); + if (BT_ERROR_NONE != err_code) { + return LogAndCreateResult( + ErrorCode::UNKNOWN_ERR, "Failed to get connection state", + ("GattConnectionState error: %d (%s)", err_code, get_error_message(err_code))); + } + return PlatformResult(ErrorCode::NO_ERROR); +} + +void BluetoothLEDevice::CleanClientInfo(const char* remote_address) { + ScopeLogger(); + is_connected_.erase(remote_address); + // inform that this device is not connected anymore + service_.TryDestroyClient(remote_address); +} + +void BluetoothLEDevice::TriggerConnectCallback(const char* remote_address, PlatformResult result) { + ScopeLogger(); + auto it = connecting_.find(remote_address); + if (connecting_.end() != it) { + instance_.AsyncResponse(it->second, result); + connecting_.erase(it); } else { - le_device->is_connected_.erase(remote_address); - // inform that this device is not connected anymore - le_device->service_.TryDestroyClient(remote_address); + LoggerW("Given address is not in waiting connections list"); } +} - if (le_device->is_listener_set_) { +void BluetoothLEDevice::TriggerConnectStateChangeListener(const char* remote_address, + bool connected) { + ScopeLogger(); + if (is_listener_set_) { picojson::value value = picojson::value(picojson::object()); picojson::object* data_obj = &value.get(); if (connected) { @@ -451,29 +492,12 @@ void BluetoothLEDevice::GattConnectionState(int result, bool connected, const ch LoggerD("OnDisconnected"); data_obj->insert(std::make_pair(kAction, picojson::value(kOnDisconnected))); } - data_obj->insert(std::make_pair(kDeviceAddress, picojson::value(remote_address))); - - le_device->instance_.FireEvent(kConnectChangeEvent, value); - } - - auto it = le_device->connecting_.find(remote_address); - if (le_device->connecting_.end() == it) { - LoggerW("Given address is not in waiting connections list"); - return; - } - - PlatformResult ret = PlatformResult(ErrorCode::NO_ERROR); - if (BT_ERROR_NONE != result) { - ret = LogAndCreateResult( - ErrorCode::UNKNOWN_ERR, "Failed to get connection state", - ("GattConnectionState error: %d (%s)", result, get_error_message(result))); + instance_.FireEvent(kConnectChangeEvent, value); + } else { + LoggerD("Listener is not registered - ignoring event"); } - - le_device->instance_.AsyncResponse(it->second, ret); - - le_device->connecting_.erase(it); -} +}; } // namespace bluetooth } // namespace extension diff --git a/src/bluetooth/bluetooth_le_device.h b/src/bluetooth/bluetooth_le_device.h index 2715bcf..e2a161a 100644 --- a/src/bluetooth/bluetooth_le_device.h +++ b/src/bluetooth/bluetooth_le_device.h @@ -53,7 +53,11 @@ class BluetoothLEDevice { private: static void GattConnectionState(int result, bool connected, const char* remote_address, void* user_data); - + bool IsInConnecting(const char* remote_address); + static common::PlatformResult ValidateConnectionChange(int err_code); + void TriggerConnectCallback(const char* remote_address, common::PlatformResult result); + void CleanClientInfo(const char* remote_address); + void TriggerConnectStateChangeListener(const char* remote_address, bool connected); BluetoothInstance& instance_; BluetoothGATTService& service_; std::unordered_map connecting_; -- 2.7.4 From 609e4d1e54bfd65d795cab21fce64954670b7e75 Mon Sep 17 00:00:00 2001 From: Piotr Kosko Date: Wed, 6 Dec 2017 12:53:38 +0100 Subject: [PATCH 11/16] [version] 2.11 Change-Id: Ice6548513ef6a67b213c1c33ae92f7f6c3e601c0 Signed-off-by: Piotr Kosko --- packaging/webapi-plugins.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec index f6e896b..4f57fed 100644 --- a/packaging/webapi-plugins.spec +++ b/packaging/webapi-plugins.spec @@ -10,7 +10,7 @@ %define crosswalk_extensions_path %{_libdir}/%{crosswalk_extensions} Name: webapi-plugins -Version: 2.10 +Version: 2.11 Release: 0 License: Apache-2.0 and BSD-3-Clause and MIT Group: Development/Libraries -- 2.7.4 From 031d8ad21a9a6c35e372e8aab671794b27a86015 Mon Sep 17 00:00:00 2001 From: Piotr Kosko Date: Thu, 7 Dec 2017 09:52:24 +0100 Subject: [PATCH 12/16] [common] Fixed spec file for wearable emulator build Change-Id: I759f43851410febffbcf419433dfc200bac85717 Signed-off-by: Piotr Kosko --- packaging/webapi-plugins.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec index 71b684e..42492e2 100644 --- a/packaging/webapi-plugins.spec +++ b/packaging/webapi-plugins.spec @@ -1168,7 +1168,7 @@ install -p -m 644 plugins.json %{buildroot}%{crosswalk_extensions_path}/wearable mkdir -p %{buildroot}%{crosswalk_extensions_path}/wearable_emulator install -p -m 644 out/bin_wearable_emulator/libtizen*.so %{buildroot}%{crosswalk_extensions_path}/wearable_emulator # execute desc_gentool -LD_LIBRARY_PATH=$LD_LIBRARY_PATH:%{buildroot}%{crosswalk_extensions_path}/mobile_emulator out/Default/desc_gentool \ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:%{buildroot}%{crosswalk_extensions_path}/wearable_emulator out/Default/desc_gentool \ %{crosswalk_extensions_path}/wearable_emulator \ %{buildroot}%{crosswalk_extensions_path}/wearable_emulator > plugins.json -- 2.7.4 From e588fd2338d3c88a03d822c6d60d9dd0faaea580 Mon Sep 17 00:00:00 2001 From: Lukasz Bardeli Date: Thu, 7 Dec 2017 13:09:10 +0100 Subject: [PATCH 13/16] [Iotcon] fix for crash while finding resource Fix for crash when ResourceFoundCallback is called first time with TIMEOUT and second time with proper value. Now data is deleted 10 seconds after time when device stopped finding resources [Verification] Code compiles without error. TCT tests 100% passrate Change-Id: I3320a70dabddbbb1b5ff8fcc0161dbe1ffc23b95 Signed-off-by: Lukasz Bardeli --- src/iotcon/iotcon_instance.cc | 115 +++++++++++++++++++++++------------------- 1 file changed, 63 insertions(+), 52 deletions(-) diff --git a/src/iotcon/iotcon_instance.cc b/src/iotcon/iotcon_instance.cc index 1ca926d..d650699 100644 --- a/src/iotcon/iotcon_instance.cc +++ b/src/iotcon/iotcon_instance.cc @@ -45,11 +45,6 @@ struct CallbackData { } }; -struct CallbackData2 { - common::PostCallback fun; - bool callback_called; -}; - long long GetId(const picojson::object& args) { return static_cast(args.find(kId)->second.get()); } @@ -110,7 +105,6 @@ void RemoteResourceResponseCallback(iotcon_remote_resource_h resource, iotcon_er ret = IotconUtils::ResponseToJson(response, &value.get()); if (CallbackDataManager::GetInstance()->IfExists(data.get())) { LoggerD("user_data was called earlier, so ignore."); - data.release(); return; } break; @@ -119,7 +113,6 @@ void RemoteResourceResponseCallback(iotcon_remote_resource_h resource, iotcon_er ret = IotconUtils::ConvertIotconError(err); if (CallbackDataManager::GetInstance()->IfExists(data.get())) { LoggerD("user_data was called earlier, so ignore."); - data.release(); return; } break; @@ -127,13 +120,13 @@ void RemoteResourceResponseCallback(iotcon_remote_resource_h resource, iotcon_er ret = IotconUtils::ConvertIotconError(err); if (CallbackDataManager::GetInstance()->IfExists(data.get())) { LoggerD("user_data was called earlier, so ignore."); - data.release(); return; } break; } CallbackDataManager::GetInstance()->Add(data.get()); data->fun(ret, value); + data.release(); } else { LoggerE("Native callback data is null"); } @@ -1302,38 +1295,28 @@ common::TizenResult IotconInstance::RemoteResourceSetTimeInterval(const picojson bool IotconInstance::ResourceFoundCallback(iotcon_remote_resource_h resource, iotcon_error_e result, void* user_data) { ScopeLogger(); - CallbackData2* data = static_cast(user_data); + CallbackData* data = static_cast(user_data); if (nullptr == data) { LoggerE("ResourceFoundCallback() failed. Ignoring callback"); return IOTCON_FUNC_STOP; } + picojson::value v{picojson::object{}}; + common::TizenResult ret = common::TizenSuccess(); switch (result) { case IOTCON_ERROR_NONE: + ret = IotconUtils::RemoteResourceToJson(resource, &v.get()); break; case IOTCON_ERROR_TIMEOUT: - LoggerD("IOTCON_TIMEOUT data->callback_called :%d", data->callback_called); - if (!data->callback_called) { - auto ret = IotconUtils::ConvertIotconError(result); - data->fun(ret, picojson::value{}); - } - delete data; - return IOTCON_FUNC_STOP; + LoggerD("IOTCON_TIMEOUT"); default: - auto ret = IotconUtils::ConvertIotconError(result); - data->fun(ret, picojson::value{}); - return IOTCON_FUNC_STOP; + ret = IotconUtils::ConvertIotconError(result); } - picojson::value json_result = picojson::value(picojson::object()); - - auto ret = IotconUtils::RemoteResourceToJson(resource, &(json_result.get())); + data->fun(ret, v); if (!ret) { - data->fun(ret, picojson::value{}); return IOTCON_FUNC_STOP; } - data->callback_called = true; - data->fun(ret, json_result); return IOTCON_FUNC_CONTINUE; } @@ -1386,9 +1369,7 @@ common::TizenResult IotconInstance::ClientFindResource(const picojson::object& a Post(kFindResourceListenerToken, common::TizenSuccess{response}); }; - CallbackData2* data = new CallbackData2{}; - data->fun = response; - data->callback_called = false; + CallbackData* data = new CallbackData{response}; LoggerD("Running find with:\nhost_address: %s,\nconnectivity_type: %d", host_address, connectivity_type); @@ -1397,6 +1378,20 @@ common::TizenResult IotconInstance::ClientFindResource(const picojson::object& a if (!result) { delete data; LogAndReturnTizenError(result); + } else { + int timeout = 60; //default value set much bigger than default value for iotcon = 30s + auto result = IotconUtils::ConvertIotconError(iotcon_get_timeout(&timeout)); + if (!result) { + LoggerE("iotcon_get_timeout - function call failed, using default value %d", timeout); + } else { + timeout = timeout + 10; //add 10 extra second to prevent too fast delete + } + // adding listener to delete data, when find would be finished + std::thread([data, timeout]() { + std::this_thread::sleep_for(std::chrono::seconds(timeout)); + LoggerD("Deleting resource find data: %p", data); + delete data; + }).detach(); } return common::TizenSuccess(); @@ -1471,7 +1466,7 @@ common::TizenResult IotconInstance::ClientRemovePresenceEventListener( bool IotconDeviceInfoCb(iotcon_device_info_h device_info, iotcon_error_e result, void* user_data) { ScopeLogger(); - CallbackData2* data = static_cast(user_data); + CallbackData* data = static_cast(user_data); if (nullptr == data) { LoggerE("IotconDeviceInfoCb() failed. Ignoring callback"); return IOTCON_FUNC_STOP; @@ -1483,21 +1478,17 @@ bool IotconDeviceInfoCb(iotcon_device_info_h device_info, iotcon_error_e result, switch (result) { case IOTCON_ERROR_NONE: ret = IotconUtils::DeviceInfoToJson(device_info, &v.get()); - data->callback_called = true; break; case IOTCON_ERROR_TIMEOUT: - LoggerD("IOTCON_TIMEOUT data->callback_called :%d", data->callback_called); - if (!data->callback_called) { - ret = IotconUtils::ConvertIotconError(result); - data->fun(ret, v); - } - delete data; - return IOTCON_FUNC_STOP; + LoggerD("IOTCON_TIMEOUT"); default: ret = IotconUtils::ConvertIotconError(result); } data->fun(ret, v); + if (!ret) { + return IOTCON_FUNC_STOP; + } return IOTCON_FUNC_CONTINUE; } @@ -1550,9 +1541,7 @@ common::TizenResult IotconInstance::ClientFindDeviceInfo(const picojson::object& Post(kFindDeviceInfoListenerToken, common::TizenSuccess{response}); }; - CallbackData2* data = new CallbackData2{}; - data->fun = response; - data->callback_called = false; + CallbackData* data = new CallbackData{response}; auto result = IotconUtils::ConvertIotconError( iotcon_find_device_info(host_address, con_type_e, query, IotconDeviceInfoCb, data)); @@ -1560,6 +1549,20 @@ common::TizenResult IotconInstance::ClientFindDeviceInfo(const picojson::object& if (!result) { delete data; LogAndReturnTizenError(result); + } else { + int timeout = 60; //default value set much bigger than default value for iotcon = 30s + auto result = IotconUtils::ConvertIotconError(iotcon_get_timeout(&timeout)); + if (!result) { + LoggerE("iotcon_get_timeout - function call failed, using default value %d", timeout); + } else { + timeout = timeout + 10; //add 10 extra second to prevent too fast delete + } + // adding listener to delete data, when find would be finished + std::thread([data, timeout]() { + std::this_thread::sleep_for(std::chrono::seconds(timeout)); + LoggerD("Deleting resource find data: %p", data); + delete data; + }).detach(); } return common::TizenSuccess(); @@ -1569,7 +1572,7 @@ bool IotconPlatformInfoCb(iotcon_platform_info_h platform_info, iotcon_error_e r void* user_data) { ScopeLogger(); - CallbackData2* data = static_cast(user_data); + CallbackData* data = static_cast(user_data); if (nullptr == data) { LoggerE("IotconPlatformInfoCb() failed. Ignoring callback"); return IOTCON_FUNC_STOP; @@ -1581,21 +1584,17 @@ bool IotconPlatformInfoCb(iotcon_platform_info_h platform_info, iotcon_error_e r switch (result) { case IOTCON_ERROR_NONE: ret = IotconUtils::PlatformInfoToJson(platform_info, &v.get()); - data->callback_called = true; break; case IOTCON_ERROR_TIMEOUT: - LoggerD("IOTCON_TIMEOUT data->callback_called :%d", data->callback_called); - if (!data->callback_called) { - ret = IotconUtils::ConvertIotconError(result); - data->fun(ret, v); - } - delete data; - return IOTCON_FUNC_STOP; + LoggerD("IOTCON_TIMEOUT"); default: ret = IotconUtils::ConvertIotconError(result); } data->fun(ret, v); + if (!ret) { + return IOTCON_FUNC_STOP; + } return IOTCON_FUNC_CONTINUE; } @@ -1648,9 +1647,7 @@ common::TizenResult IotconInstance::ClientFindPlatformInfo(const picojson::objec Post(kFindPlatformInfoListenerToken, common::TizenSuccess{response}); }; - CallbackData2* data = new CallbackData2{}; - data->fun = response; - data->callback_called = false; + CallbackData* data = new CallbackData{response}; auto result = IotconUtils::ConvertIotconError( iotcon_find_platform_info(host_address, con_type_e, query, IotconPlatformInfoCb, data)); @@ -1658,6 +1655,20 @@ common::TizenResult IotconInstance::ClientFindPlatformInfo(const picojson::objec if (!result) { delete data; LogAndReturnTizenError(result); + } else { + int timeout = 60; //default value set much bigger than default value for iotcon = 30s + auto result = IotconUtils::ConvertIotconError(iotcon_get_timeout(&timeout)); + if (!result) { + LoggerE("iotcon_get_timeout - function call failed, using default value %d", timeout); + } else { + timeout = timeout + 10; //add 10 extra second to prevent too fast delete + } + // adding listener to delete data, when find would be finished + std::thread([data, timeout]() { + std::this_thread::sleep_for(std::chrono::seconds(timeout)); + LoggerD("Deleting resource find data: %p", data); + delete data; + }).detach(); } return common::TizenSuccess(); -- 2.7.4 From 9a745b3da2ff5d8a2f0b360fb7f29cb502a640db Mon Sep 17 00:00:00 2001 From: Piotr Kosko Date: Fri, 8 Dec 2017 16:09:12 +0900 Subject: [PATCH 14/16] [version] 2.12 Change-Id: I55a1a98894acfed37f0524afdb3844684d1fbc3b Signed-off-by: Piotr Kosko --- packaging/webapi-plugins.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec index 4f57fed..545ab7d 100644 --- a/packaging/webapi-plugins.spec +++ b/packaging/webapi-plugins.spec @@ -10,7 +10,7 @@ %define crosswalk_extensions_path %{_libdir}/%{crosswalk_extensions} Name: webapi-plugins -Version: 2.11 +Version: 2.12 Release: 0 License: Apache-2.0 and BSD-3-Clause and MIT Group: Development/Libraries -- 2.7.4 From 6641d10d6608fbabb094a327bd9dd877a2eff84b Mon Sep 17 00:00:00 2001 From: Lukasz Bardeli Date: Tue, 12 Dec 2017 06:57:57 +0100 Subject: [PATCH 15/16] [Spec] fix for profile build [Verification] Code compiles without error. Plugins on different repositories build properly. Change-Id: Ic10cb4937738f45aa619ec927f7d8883a0417e58 Signed-off-by: Lukasz Bardeli --- packaging/webapi-plugins.spec | 65 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec index 81deb70..40f9c56 100644 --- a/packaging/webapi-plugins.spec +++ b/packaging/webapi-plugins.spec @@ -1029,9 +1029,7 @@ popd # Unified: common/ Others: its own profile %if "%{?profile}" != "mobile" && "%{?profile}" != "tv" && "%{?profile}" != "wearable" && "%{?profile}" != "ivi" GYP_OPTIONS="--depth=. -Dtizen=1 -Dextension_build_type=Debug -Dextension_host_os=common -Dprivilege_engine=%{tizen_common_privilege_engine}" -%else -GYP_OPTIONS="--depth=. -Dtizen=1 -Dextension_build_type=Debug -Dextension_host_os=%{profile} -Dprivilege_engine=%{tizen_privilege_engine}" -%endif + GYP_OPTIONS="$GYP_OPTIONS -Ddisplay_type=%{display_type}" GYP_OPTIONS="$GYP_OPTIONS -Dcrosswalk_extensions_path=%{crosswalk_extensions_path}" @@ -1088,6 +1086,67 @@ GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_tvinputdevice_support=%{?tizen_common_ GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_voicecontrol_support=%{?tizen_common_feature_voicecontrol_support}" GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_ppm_support=%{?tizen_common_feature_ppm_support}" +%else +GYP_OPTIONS="--depth=. -Dtizen=1 -Dextension_build_type=Debug -Dextension_host_os=%{profile} -Dprivilege_engine=%{tizen_privilege_engine}" + +GYP_OPTIONS="$GYP_OPTIONS -Ddisplay_type=%{display_type}" +GYP_OPTIONS="$GYP_OPTIONS -Dcrosswalk_extensions_path=%{crosswalk_extensions_path}" + +# feature flags +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_account_support=%{?tizen_feature_account_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_alarm_support=%{?tizen_feature_alarm_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_app_control_settings_support=%{?tizen_feature_app_control_settings_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_application_support=%{?tizen_feature_application_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_archive_support=%{?tizen_feature_archive_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_badge_support=%{?tizen_feature_badge_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_bluetooth_support=%{?tizen_feature_bluetooth_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_bookmark_support=%{?tizen_feature_bookmark_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_calendar_support=%{?tizen_feature_calendar_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_callhistory_support=%{?tizen_feature_callhistory_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_contact_support=%{?tizen_feature_contact_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_content_support=%{?tizen_feature_content_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_datacontrol_support=%{?tizen_feature_datacontrol_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_datasync_support=%{?tizen_feature_datasync_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_download_support=%{?tizen_feature_download_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_exif_support=%{?tizen_feature_exif_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_feedback_support=%{?tizen_feature_feedback_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_filesystem_support=%{?tizen_feature_filesystem_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_fm_radio_support=%{?tizen_feature_fm_radio_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_ham_support=%{?tizen_feature_ham_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_iotcon_support=%{?tizen_feature_iotcon_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_location_batch=%{?tizen_feature_location_batch}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_key_manager_support=%{?tizen_feature_key_manager_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_media_controller_support=%{?tizen_feature_media_controller_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_media_key_support=%{?tizen_feature_media_key_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_message_port_support=%{?tizen_feature_message_port_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_messaging_support=%{?tizen_feature_messaging_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_nbs_support=%{?tizen_feature_nbs_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_nfc_emulation_support=%{?tizen_feature_nfc_emulation_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_nfc_support=%{?tizen_feature_nfc_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_notification_support=%{?tizen_feature_notification_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_package_support=%{?tizen_feature_package_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_player_util_support=%{?tizen_feature_player_util_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_power_support=%{?tizen_feature_power_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_preference_support=%{?tizen_feature_preference_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_push_support=%{?tizen_feature_push_support}" +#GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_sap_support=%{?tizen_feature_sap_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_sensor_support=%{?tizen_feature_sensor_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_se_support=%{?tizen_feature_se_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_sound_support=%{?tizen_feature_sound_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_system_info_support=%{?tizen_feature_system_info_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_system_setting_support=%{?tizen_feature_system_setting_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_telephony_support=%{?tizen_feature_telephony_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_time_support=%{?tizen_feature_time_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_inputdevice_support=%{?tizen_feature_inputdevice_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_web_setting_support=%{?tizen_feature_web_setting_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_widget_service_support=%{?tizen_feature_widget_service_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_wi_fi_support=%{?tizen_feature_wi_fi_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_tvinputdevice_support=%{?tizen_feature_tvinputdevice_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_voicecontrol_support=%{?tizen_feature_voicecontrol_support}" +GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_ppm_support=%{?tizen_feature_ppm_support}" + +%endif + ./tools/gyp/gyp $GYP_OPTIONS src/tizen-wrt.gyp %if "%{?profile}" != "mobile" && "%{?profile}" != "tv" && "%{?profile}" != "wearable" && "%{?profile}" != "ivi" -- 2.7.4 From 1682d3b79d389b8025a30cb0fd6428546ed39123 Mon Sep 17 00:00:00 2001 From: Lukasz Bardeli Date: Thu, 14 Dec 2017 12:06:41 +0100 Subject: [PATCH 16/16] [SPEC] fix for building emulator wearable or mobile When profile is defined this fix help build plugins on emulator [Verification] Code complies without error. Proper modules are visible in chrome console. All rpm's were checked if proper .so are included. Change-Id: Idde16b44e54370a36428b76f0346282dcb2739d2 Signed-off-by: Lukasz Bardeli --- packaging/webapi-plugins.spec | 91 +++++++++---------------------------------- 1 file changed, 18 insertions(+), 73 deletions(-) diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec index 40f9c56..78bc239 100644 --- a/packaging/webapi-plugins.spec +++ b/packaging/webapi-plugins.spec @@ -655,10 +655,8 @@ webapi-plugins development headers export GYP_GENERATORS='ninja' -%if "%{?unified_build}" == "1" -# Build All Profiles - -# Mobile +%if "%{?unified_build}" == "1" || "%{?profile}" == "mobile" +# MOBILE GYP_OPTIONS="--depth=. -Dtizen=1 -Dextension_build_type=Debug -Dextension_host_os=mobile -Dprivilege_engine=%{tizen_mobile_privilege_engine}" GYP_OPTIONS="$GYP_OPTIONS -Ddisplay_type=%{display_type}" GYP_OPTIONS="$GYP_OPTIONS -Dcrosswalk_extensions_path=%{crosswalk_extensions_path}" @@ -809,8 +807,10 @@ ninja -C out/Default %{?_smp_mflags} pushd out mv Default bin_mobile_emulator popd -%endif +%endif # mobile-extension-emulator +%endif # MOBILE +%if "%{?unified_build}" == "1" || "%{?profile}" == "wearable" # WEARABLE GYP_OPTIONS="--depth=. -Dtizen=1 -Dextension_build_type=Debug -Dextension_host_os=wearable -Dprivilege_engine=%{tizen_wearable_privilege_engine}" GYP_OPTIONS="$GYP_OPTIONS -Ddisplay_type=%{display_type}" @@ -957,8 +957,10 @@ ninja -C out/Default %{?_smp_mflags} pushd out mv Default bin_wearable_emulator popd -%endif +%endif # wearable-extension-emulator +%endif # WEARABLE +%if "%{?unified_build}" == "1" || "%{?profile}" == "tv" # TV GYP_OPTIONS="--depth=. -Dtizen=1 -Dextension_build_type=Debug -Dextension_host_os=tv -Dprivilege_engine=%{tizen_tv_privilege_engine}" GYP_OPTIONS="$GYP_OPTIONS -Ddisplay_type=%{display_type}" @@ -1024,10 +1026,11 @@ pushd out mv Default bin_tv popd -%endif +%endif # TV + +%if "%{?unified_build}" == "1" || "%{?profile}" == "common" || "%{?profile}" != "ivi" -# Unified: common/ Others: its own profile -%if "%{?profile}" != "mobile" && "%{?profile}" != "tv" && "%{?profile}" != "wearable" && "%{?profile}" != "ivi" +# UNIFIED / COMMON or IVI GYP_OPTIONS="--depth=. -Dtizen=1 -Dextension_build_type=Debug -Dextension_host_os=common -Dprivilege_engine=%{tizen_common_privilege_engine}" GYP_OPTIONS="$GYP_OPTIONS -Ddisplay_type=%{display_type}" @@ -1086,70 +1089,10 @@ GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_tvinputdevice_support=%{?tizen_common_ GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_voicecontrol_support=%{?tizen_common_feature_voicecontrol_support}" GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_ppm_support=%{?tizen_common_feature_ppm_support}" -%else -GYP_OPTIONS="--depth=. -Dtizen=1 -Dextension_build_type=Debug -Dextension_host_os=%{profile} -Dprivilege_engine=%{tizen_privilege_engine}" - -GYP_OPTIONS="$GYP_OPTIONS -Ddisplay_type=%{display_type}" -GYP_OPTIONS="$GYP_OPTIONS -Dcrosswalk_extensions_path=%{crosswalk_extensions_path}" - -# feature flags -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_account_support=%{?tizen_feature_account_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_alarm_support=%{?tizen_feature_alarm_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_app_control_settings_support=%{?tizen_feature_app_control_settings_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_application_support=%{?tizen_feature_application_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_archive_support=%{?tizen_feature_archive_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_badge_support=%{?tizen_feature_badge_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_bluetooth_support=%{?tizen_feature_bluetooth_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_bookmark_support=%{?tizen_feature_bookmark_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_calendar_support=%{?tizen_feature_calendar_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_callhistory_support=%{?tizen_feature_callhistory_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_contact_support=%{?tizen_feature_contact_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_content_support=%{?tizen_feature_content_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_datacontrol_support=%{?tizen_feature_datacontrol_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_datasync_support=%{?tizen_feature_datasync_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_download_support=%{?tizen_feature_download_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_exif_support=%{?tizen_feature_exif_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_feedback_support=%{?tizen_feature_feedback_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_filesystem_support=%{?tizen_feature_filesystem_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_fm_radio_support=%{?tizen_feature_fm_radio_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_ham_support=%{?tizen_feature_ham_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_iotcon_support=%{?tizen_feature_iotcon_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_location_batch=%{?tizen_feature_location_batch}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_key_manager_support=%{?tizen_feature_key_manager_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_media_controller_support=%{?tizen_feature_media_controller_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_media_key_support=%{?tizen_feature_media_key_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_message_port_support=%{?tizen_feature_message_port_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_messaging_support=%{?tizen_feature_messaging_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_nbs_support=%{?tizen_feature_nbs_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_nfc_emulation_support=%{?tizen_feature_nfc_emulation_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_nfc_support=%{?tizen_feature_nfc_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_notification_support=%{?tizen_feature_notification_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_package_support=%{?tizen_feature_package_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_player_util_support=%{?tizen_feature_player_util_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_power_support=%{?tizen_feature_power_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_preference_support=%{?tizen_feature_preference_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_push_support=%{?tizen_feature_push_support}" -#GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_sap_support=%{?tizen_feature_sap_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_sensor_support=%{?tizen_feature_sensor_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_se_support=%{?tizen_feature_se_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_sound_support=%{?tizen_feature_sound_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_system_info_support=%{?tizen_feature_system_info_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_system_setting_support=%{?tizen_feature_system_setting_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_telephony_support=%{?tizen_feature_telephony_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_time_support=%{?tizen_feature_time_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_inputdevice_support=%{?tizen_feature_inputdevice_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_web_setting_support=%{?tizen_feature_web_setting_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_widget_service_support=%{?tizen_feature_widget_service_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_wi_fi_support=%{?tizen_feature_wi_fi_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_tvinputdevice_support=%{?tizen_feature_tvinputdevice_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_voicecontrol_support=%{?tizen_feature_voicecontrol_support}" -GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_ppm_support=%{?tizen_feature_ppm_support}" - -%endif - ./tools/gyp/gyp $GYP_OPTIONS src/tizen-wrt.gyp -%if "%{?profile}" != "mobile" && "%{?profile}" != "tv" && "%{?profile}" != "wearable" && "%{?profile}" != "ivi" +%if "%{?unified_build}" == "1" +# UNIFIED ninja -C out/Default %{?_smp_mflags} pushd out mv Default bin_common @@ -1160,13 +1103,15 @@ ln -sf bin_common Default cp -R bin_common bin_ivi popd -%else +%else # UNIFIED +# COMMON or IVI ninja -C out/Default %{?_smp_mflags} pushd out mv Default bin_%{?profile} ln -sf bin_%{?profile} Default popd -%endif +%endif # COMMON or IVI +%endif # UNIFIED / COMMON or IVI %install -- 2.7.4