/* * AlarmsRecord.cpp * * Created on: 15 lip 2019 * Author: kuba */ #include "AlarmsRecord.hpp" #include "ThreadRecord.hpp" #include "AlarmsTable.hpp" AlarmsRecordInterface::AlarmsRecordInterface(AlarmsDB *alarmsDb) : alarmsDB(alarmsDb) {} AlarmsRecordInterface::~AlarmsRecordInterface() {} bool AlarmsRecordInterface::Add(const AlarmsRecord &rec) { // Create alarm alarmsDB->alarms.Add( AlarmsTableRow{.time = rec.time, .snooze = rec.snooze, .status = rec.status, .path = rec.path}); // TODO: error check return true; } uint32_t AlarmsRecordInterface::GetCount() { return alarmsDB->alarms.GetCount(); } std::unique_ptr> AlarmsRecordInterface::GetLimitOffsetByField(uint32_t offset, uint32_t limit, AlarmsRecordField field, const char *str) { auto records = std::make_unique>(); std::vector alarm; switch (field) { case AlarmsRecordField::Time: alarm = alarmsDB->alarms.GetLimitOffsetByField(offset, limit, AlarmsTableFields::Time, str); break; case AlarmsRecordField::Snooze: alarm = alarmsDB->alarms.GetLimitOffsetByField(offset, limit, AlarmsTableFields::Snooze, str); break; case AlarmsRecordField::Status: alarm = alarmsDB->alarms.GetLimitOffsetByField(offset, limit, AlarmsTableFields::Status, str); break; default: return records; } return records; } std::unique_ptr> AlarmsRecordInterface::GetLimitOffset(uint32_t offset, uint32_t limit) { auto alarm = alarmsDB->alarms.GetLimitOffset(offset, limit); auto records = std::make_unique>(); AlarmsRecordInterface alarmsInterface(alarmsDB); for (const auto &w : alarm) { auto alarmsRec = alarmsInterface.GetByID(w.ID); records->push_back({ .ID = w.ID, .time = w.time, .snooze = w.snooze, .status = w.status, .path = w.path, }); } return records; } bool AlarmsRecordInterface::Update(const AlarmsRecord &rec) { auto alarm = alarmsDB->alarms.GetByID(rec.ID); if (alarm.ID == 0) { return false; } alarmsDB->alarms.Update( AlarmsTableRow{.ID = rec.ID, .time = rec.time, .snooze = rec.snooze, .status = rec.status, .path = rec.path}); return true; } bool AlarmsRecordInterface::RemoveByID(uint32_t id) { auto alarm = alarmsDB->alarms.GetByID(id); if (alarm.ID == 0) { return false; } // Remove alarm if (alarmsDB->alarms.RemoveByID(id) == false) { return false; } return true; } bool AlarmsRecordInterface::RemoveByField(AlarmsRecordField field, const char *str) { switch (field) { case AlarmsRecordField ::Time: return alarmsDB->alarms.RemoveByField(AlarmsTableFields::Time, str); default: return false; } } AlarmsRecord AlarmsRecordInterface::GetByID(uint32_t id) { auto alarm = alarmsDB->alarms.GetByID(id); return AlarmsRecord{ .ID = alarm.ID, .time = alarm.time, .snooze = alarm.snooze, .status = alarm.status, .path = alarm.path}; } AlarmsRecord AlarmsRecordInterface::GetNext(time_t time) { auto alarm = alarmsDB->alarms.GetNext(time); return AlarmsRecord{ .ID = alarm.ID, .time = alarm.time, .snooze = alarm.snooze, .status = alarm.status, .path = alarm.path}; }