From 5abc9fce081273bf9f88774a38b8526144e7d9df Mon Sep 17 00:00:00 2001
From: Piotr Kosko
Date: Thu, 25 Jun 2015 11:49:17 +0200
Subject: [PATCH] [Messaging] Additional check before calling listener
[Feature] Added checking if some listener is registered before start to handle
on change listener event.
[Verification] Code compiles without errors.
TCT passrate 100%. Didn't change after this change.
Change-Id: Iaf3dc6c615a5cfc323e49f34b6278a8c22b2fe84
Signed-off-by: Piotr Kosko
---
src/messaging/DBus/MessageProxy.cpp | 98 +++++++++++-----------
src/messaging/change_listener_container.cc | 8 ++
src/messaging/change_listener_container.h | 2 +
3 files changed, 61 insertions(+), 47 deletions(-)
diff --git a/src/messaging/DBus/MessageProxy.cpp b/src/messaging/DBus/MessageProxy.cpp
index 536435d8..d0c1d3f5 100644
--- a/src/messaging/DBus/MessageProxy.cpp
+++ b/src/messaging/DBus/MessageProxy.cpp
@@ -117,71 +117,75 @@ PlatformResult MessageProxy::handleEmailEvent(int account_id, int mail_id, int t
{
LoggerD("Enter");
- if(NOTI_MAIL_UPDATE == event) {
+ if (ChangeListenerContainer::getInstance().isEmailListenerRegistered()) {
+ LoggerD("Listener registered - perform action");
+ if(NOTI_MAIL_UPDATE == event) {
//getting thread_id from message
email_mail_data_t *mail_data = NULL;
if(EMAIL_ERROR_NONE != email_get_mail_data(mail_id, &mail_data)) {
- if (mail_data) email_free_mail_data(&mail_data, 1);
+ if (mail_data) email_free_mail_data(&mail_data, 1);
- LoggerE("Failed to get mail data during setting conversation id in MessageProxy.");
- //TODO maybe error should be ignored
- return PlatformResult(ErrorCode::UNKNOWN_ERR,
- "Failed to get mail data during setting"
- " conversation id in MessageProxy.");
+ LoggerE("Failed to get mail data during setting conversation id in MessageProxy.");
+ return PlatformResult(ErrorCode::UNKNOWN_ERR,
+ "Failed to get mail data during setting"
+ " conversation id in MessageProxy.");
}
thread_id = mail_data->thread_id;
if(EMAIL_ERROR_NONE != email_free_mail_data(&mail_data,1)) {
- LoggerE("Failed to free mail data memory");
+ LoggerE("Failed to free mail data memory");
}
- }
+ }
- email_mail_data_t* mail_data = EmailManager::getInstance().loadMessage(mail_id);
- if (mail_data == NULL) {
- return PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to load email");
- }
- std::shared_ptr msg;
- PlatformResult ret = Message::convertPlatformEmailToObject(*mail_data, &msg);
- if (ret.IsError()) return ret;
- ConversationPtr conv;
- ret = MessageConversation::convertEmailConversationToObject(
- thread_id, &conv);
- if (ret.IsError()) return ret;
+ email_mail_data_t* mail_data = EmailManager::getInstance().loadMessage(mail_id);
+ if (mail_data == NULL) {
+ return PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to load email");
+ }
+ std::shared_ptr msg;
+ PlatformResult ret = Message::convertPlatformEmailToObject(*mail_data, &msg);
+ if (ret.IsError()) return ret;
+ ConversationPtr conv;
+ ret = MessageConversation::convertEmailConversationToObject(
+ thread_id, &conv);
+ if (ret.IsError()) return ret;
- EventMessages* eventMsg = new EventMessages();
- eventMsg->service_type = MessageType::EMAIL;
- eventMsg->service_id = account_id;
- eventMsg->items.push_back(msg);
- EventConversations* eventConv = new EventConversations();
- eventConv->service_type = MessageType::EMAIL;
- eventConv->service_id = account_id;
- eventConv->items.push_back(conv);
- switch (event) {
+ EventMessages* eventMsg = new EventMessages();
+ eventMsg->service_type = MessageType::EMAIL;
+ eventMsg->service_id = account_id;
+ eventMsg->items.push_back(msg);
+ EventConversations* eventConv = new EventConversations();
+ eventConv->service_type = MessageType::EMAIL;
+ eventConv->service_id = account_id;
+ eventConv->items.push_back(conv);
+ switch (event) {
case NOTI_MAIL_ADD:
- ChangeListenerContainer::getInstance().callMessageAdded(eventMsg);
- if (conv->getMessageCount() == 1) {
- LoggerD("This thread is new, triggering conversationAdded");
- ChangeListenerContainer::getInstance().callConversationAdded(eventConv);
- } else {
- LoggerD("This thread is not new, but it's updated");
- ChangeListenerContainer::getInstance().callConversationUpdated(eventConv);
- }
- break;
- case NOTI_MAIL_UPDATE:
- ChangeListenerContainer::getInstance().callMessageUpdated(eventMsg);
+ ChangeListenerContainer::getInstance().callMessageAdded(eventMsg);
+ if (conv->getMessageCount() == 1) {
+ LoggerD("This thread is new, triggering conversationAdded");
+ ChangeListenerContainer::getInstance().callConversationAdded(eventConv);
+ } else {
+ LoggerD("This thread is not new, but it's updated");
ChangeListenerContainer::getInstance().callConversationUpdated(eventConv);
- break;
+ }
+ break;
+ case NOTI_MAIL_UPDATE:
+ ChangeListenerContainer::getInstance().callMessageUpdated(eventMsg);
+ ChangeListenerContainer::getInstance().callConversationUpdated(eventConv);
+ break;
default:
- LoggerW("Unknown event type: %d", event);
- break;
+ LoggerW("Unknown event type: %d", event);
+ break;
- }
- delete eventMsg;
- delete eventConv;
+ }
+ delete eventMsg;
+ delete eventConv;
- EmailManager::getInstance().freeMessage(mail_data);
+ EmailManager::getInstance().freeMessage(mail_data);
+ } else {
+ LoggerD("Listener not registered just ignore");
+ }
return PlatformResult(ErrorCode::NO_ERROR);
}
diff --git a/src/messaging/change_listener_container.cc b/src/messaging/change_listener_container.cc
index 6f201c7c..4888b27b 100755
--- a/src/messaging/change_listener_container.cc
+++ b/src/messaging/change_listener_container.cc
@@ -39,6 +39,14 @@ ChangeListenerContainer::ChangeListenerContainer():
getNextId();
}
+bool ChangeListenerContainer::isEmailListenerRegistered()
+{
+ LoggerD("isEmailListenerRegistered(): message_callbacks.empty() %d, "
+ "conversation_callbacks.empty() %d", m_email_message_callbacks.empty(),
+ m_email_conversation_callbacks.empty());
+ return !(m_email_message_callbacks.empty() && m_email_conversation_callbacks.empty());
+}
+
// --- Listeners registration functions ---
long ChangeListenerContainer::addMessageChangeListener(
std::shared_ptr callback)
diff --git a/src/messaging/change_listener_container.h b/src/messaging/change_listener_container.h
index 115950ad..a60e6c71 100755
--- a/src/messaging/change_listener_container.h
+++ b/src/messaging/change_listener_container.h
@@ -104,6 +104,8 @@ class ChangeListenerContainer {
void callFolderUpdated(EventFolders* event);
void callFolderRemoved(EventFolders* event);
+ bool isEmailListenerRegistered();
+
private:
//! Highest used id (in most cases id of last registered listener)
long m_current_id;
--
2.34.1