From: Piotr Kosko Date: Thu, 25 Jun 2015 09:49:17 +0000 (+0200) Subject: [Messaging] Additional check before calling listener X-Git-Tag: submit/tizen/20151026.073646^2^2~51^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5abc9fce081273bf9f88774a38b8526144e7d9df;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [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 --- 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;