//################################## ^stopSync #################################
+void EmailManager::RemoveSyncCallback(long op_id) {
+ LoggerD("Entered");
+ m_proxy_sync->removeCallback(op_id);
+}
+
void removeEmailCompleteCB(MessagesCallbackUserData* callback)
{
LoggerD("Entered");
void syncFolder(SyncFolderCallbackData* callback);
void stopSync(long op_id);
+ void RemoveSyncCallback(long op_id);
+
// void registerStatusCallback(msg_handle_t msg_handle);
/**
LoggerD("Entered");
}
-MessageServiceEmail::~MessageServiceEmail()
-{
- LoggerD("Entered");
+MessageServiceEmail::~MessageServiceEmail() {
+ LoggerD("Entered");
+
+ for (auto id : registered_callbacks_) {
+ // this may internally fail, because we don't have information about
+ // callbacks which already have fired
+ EmailManager::getInstance().RemoveSyncCallback(id);
+ }
}
static gboolean sendMessageTask(void* data)
return PlatformResult(ErrorCode::UNKNOWN_ERR, "Could not add task");
}
*operation_id = op_id;
+ registered_callbacks_.insert(op_id);
return PlatformResult(ErrorCode::NO_ERROR);
}
return PlatformResult(ErrorCode::UNKNOWN_ERR, "Could not add task");
}
*operation_id = op_id;
+ registered_callbacks_.insert(op_id);
return PlatformResult(ErrorCode::NO_ERROR);
}
{
LoggerD("Entered");
+ registered_callbacks_.erase(op_id);
long* data = new long(op_id);
guint id = g_idle_add(stopSyncTask, static_cast<void*>(data));
#include "message_service.h"
+#include <unordered_set>
+
namespace extension {
namespace messaging {
virtual common::PlatformResult sync(SyncCallbackData *callback, long* operation_id);
virtual common::PlatformResult syncFolder(SyncFolderCallbackData *callback, long* operation_id);
virtual common::PlatformResult stopSync(long op_id);
+
+private:
+ std::unordered_set<long> registered_callbacks_;
};
} // messaging