[Messasging] removeChangeListener (for emails)
authorMaciek Blim <m.blim@samsung.com>
Mon, 22 Dec 2014 14:34:51 +0000 (15:34 +0100)
committerMaciek Blim <m.blim@samsung.com>
Thu, 8 Jan 2015 14:41:01 +0000 (15:41 +0100)
Change-Id: I2ba149529ecc4c99364be46696a45ba2e4331bd5
Signed-off-by: Maciek Blim <m.blim@samsung.com>
src/messaging/change_listener_container.cc
src/messaging/message_storage.cc
src/messaging/message_storage.h
src/messaging/messaging_api.js
src/messaging/messaging_instance.cc

index 4110353..b79b58a 100644 (file)
@@ -139,10 +139,10 @@ void ChangeListenerContainer::removeChangeListener(long id)
             m_email_conversation_callbacks, id)) {
         LoggerD("Email conversation listener with id: %d removed", id);
     }
-    //else if (removeCallbackIfExists<FoldersChangeCallback>(
-            //context, m_email_folder_callbacks,id)) {
-        //LoggerD("Email folder listener with id: %d removed", id);
-    //}
+    else if (removeCallbackIfExists<FoldersChangeCallback>(
+            m_email_folder_callbacks,id)) {
+        LoggerD("Email folder listener with id: %d removed", id);
+    }
     else {
         LoggerW("WatchId %d not found", id);
     }
index 9006744..d5abfe5 100644 (file)
@@ -55,9 +55,10 @@ long MessageStorage::addFoldersChangeListener(std::shared_ptr<FoldersChangeCallb
     return ChangeListenerContainer::getInstance().addFolderChangeListener(callback);
 }
 
-void MessageStorage::removeChangeListener()
+void MessageStorage::removeChangeListener(long watchId)
 {
     LoggerD("Entered");
+    return ChangeListenerContainer::getInstance().removeChangeListener(watchId);
 }
 
 } //messaging
index 4c966d5..d657370 100644 (file)
@@ -47,7 +47,7 @@ public:
     long addMessagesChangeListener(std::shared_ptr<MessagesChangeCallback> callback);
     long addConversationsChangeListener(std::shared_ptr<ConversationsChangeCallback> callback);
     long addFoldersChangeListener(std::shared_ptr<FoldersChangeCallback> callback);
-    void removeChangeListener();
+    void removeChangeListener(long watchId);
 
 protected:
     int m_id;
index 1e0ab73..0d588fd 100644 (file)
@@ -1054,6 +1054,7 @@ MessageStorage.prototype.addMessagesChangeListener = function () {
         }
     });
 
+    bridge.attach(cid, 'watchId', result);
     return result;
 };
 
@@ -1106,6 +1107,7 @@ MessageStorage.prototype.addConversationsChangeListener = function () {
         }
     });
 
+    bridge.attach(cid, 'watchId', result);
     return result;
 };
 
@@ -1158,6 +1160,7 @@ MessageStorage.prototype.addFoldersChangeListener = function () {
         }
     });
 
+    bridge.attach(cid, 'watchId', result);
     return result;
 };
 
@@ -1166,12 +1169,20 @@ MessageStorage.prototype.removeChangeListener = function () {
         {name: 'watchId', type: types_.LONG}
     ]);
 
-    bridge.sync({
+    var self = this;
+
+    var result = bridge.sync({
         cmd: 'MessageStorage_removeChangeListener',
         args: {
-            watchId: args.watchId
+            watchId: args.watchId,
+            serviceId: self.service.id
         }
     });
+
+    bridge.find('watchId', args.watchId).forEach(function (e) {
+        bridge.remove(e.id);
+    });
+    return result;
 };
 
 function MessageConversation(data) {
index 336a41a..cca250c 100644 (file)
@@ -625,6 +625,15 @@ void MessagingInstance::MessageStorageRemoveChangeListener(const picojson::value
         picojson::object& out)
 {
     LoggerD("Entered");
+    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    const long watchId = static_cast<long>(
+            data.at(REMOVE_CHANGE_LISTENER_ARGS_WATCHID).get<double>());
+
+    int serviceId = static_cast<int>(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get<double>());
+    auto service = MessagingManager::getInstance().getMessageServiceEmail(serviceId);
+
+    service->getMsgStorage()->removeChangeListener(watchId);
+    ReportSuccess(out);
 }
 
 } // namespace messaging