#include <vector>
#include <functional>
+#include <Ecore.h>
namespace model {
/**
model::AlarmList& GetAlarms();
private:
model::AlarmList alarms_;
+ Ecore_Idler *idler_job_;
void Sync();
void ScheduleSync();
bool HasActiveAlarms();
+ static Eina_Bool IdlerCallback(void *data);
+ void AlarmListChanged(model::AlarmList::Iterator it);
+ std::vector<utils::Connection> connections_;
};
} /* model */
using namespace model;
using namespace utils;
+using std::placeholders::_1;
-AlarmProvider::AlarmProvider()
+AlarmProvider::AlarmProvider() : idler_job_(nullptr)
{
BinaryFileReader reader(TizenAppUtils::GetResourcePath(TizenAppUtils::APP_DIR_DATA, DATABASE_FILE));
if (HasActiveAlarms())
Notifier::GetInstance().AlarmNotiPost();
+
+ connections_.push_back(alarms_.OnAdded.Connect(
+ std::bind(&AlarmProvider::AlarmListChanged, this, _1)));
+ connections_.push_back(alarms_.OnRemoved.Connect(
+ std::bind(&AlarmProvider::AlarmListChanged, this, _1)));
+ connections_.push_back(alarms_.OnReplaced.Connect(
+ std::bind(&AlarmProvider::AlarmListChanged, this, _1)));
}
AlarmProvider::~AlarmProvider()
{
Sync();
+ if (idler_job_) ecore_idler_del(idler_job_);
}
void AlarmProvider::Sync()
void AlarmProvider::ScheduleSync()
{
- Sync();
+ if (idler_job_) return;
+ idler_job_ = ecore_idle_enterer_add(AlarmProvider::IdlerCallback, this);
+}
+
+Eina_Bool AlarmProvider::IdlerCallback(void *data)
+{
+ AlarmProvider *provider = static_cast<AlarmProvider*>(data);
+ provider->idler_job_ = nullptr;
+ provider->Sync();
+
+ return EINA_FALSE;
+}
+
+void AlarmProvider::AlarmListChanged(model::AlarmList::Iterator it)
+{
+ ScheduleSync();
}