LoggerD("Entered");
}
-MessageStorage::~MessageStorage()
-{
- LoggerD("Entered");
+MessageStorage::~MessageStorage() {
+ LoggerD("Entered");
+
+ for (auto id : registered_listeners_) {
+ ChangeListenerContainer::getInstance().removeChangeListener(id);
+ }
}
int MessageStorage::getMsgServiceId() const
long MessageStorage::addMessagesChangeListener(std::shared_ptr<MessagesChangeCallback> callback)
{
LoggerD("Entered");
- return ChangeListenerContainer::getInstance().addMessageChangeListener(callback);
+ long id = ChangeListenerContainer::getInstance().addMessageChangeListener(callback);
+ registered_listeners_.insert(id);
+ return id;
}
long MessageStorage::addConversationsChangeListener(
std::shared_ptr<ConversationsChangeCallback> callback)
{
LoggerD("Entered");
- return ChangeListenerContainer::getInstance().addConversationChangeListener(callback);
+ long id = ChangeListenerContainer::getInstance().addConversationChangeListener(callback);
+ registered_listeners_.insert(id);
+ return id;
}
long MessageStorage::addFoldersChangeListener(std::shared_ptr<FoldersChangeCallback> callback)
{
LoggerD("Entered");
- return ChangeListenerContainer::getInstance().addFolderChangeListener(callback);
+ long id = ChangeListenerContainer::getInstance().addFolderChangeListener(callback);
+ registered_listeners_.insert(id);
+ return id;
}
void MessageStorage::removeChangeListener(long watchId)
{
LoggerD("Entered");
- return ChangeListenerContainer::getInstance().removeChangeListener(watchId);
+ ChangeListenerContainer::getInstance().removeChangeListener(watchId);
+ registered_listeners_.erase(watchId);
}
} //messaging
#define MESSAGING_MESSAGE_STORAGE_H_
#include <memory>
+#include <unordered_set>
#include "common/platform_result.h"
#include "common/logger.h"
protected:
int m_id;
MessageType m_msg_type;
+ std::unordered_set<long> registered_listeners_;
};
} //messaging