[Messaging] Additional check before calling listener
authorPiotr Kosko <p.kosko@samsung.com>
Thu, 25 Jun 2015 09:49:17 +0000 (11:49 +0200)
committerTomasz Marciniak <t.marciniak@samsung.com>
Tue, 6 Oct 2015 08:55:39 +0000 (10:55 +0200)
[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 <p.kosko@samsung.com>
src/messaging/DBus/MessageProxy.cpp
src/messaging/change_listener_container.cc
src/messaging/change_listener_container.h

index 536435d8860650e0c2b2dbff2fbda0ba3217ee05..d0c1d3f54022cda154e71fa93a750a8f8a498ea2 100644 (file)
@@ -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<Message> 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<Message> 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);
 }
 
index 6f201c7cae100d9cf26cf299db3a14f2f66d777c..4888b27b40a76b4b3ff5bb0e883ad4bc3924a281 100755 (executable)
@@ -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<MessagesChangeCallback> callback)
index 115950ad3b4d997a87d2aebc2d102a68544c7f89..a60e6c71da8ab013b6fcaca947f4faff2cb3659d 100755 (executable)
@@ -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;