From 2f00eaf661290a40d17853debbd9b051e1304301 Mon Sep 17 00:00:00 2001 From: Tomasz Marciniak Date: Mon, 9 Mar 2015 14:00:28 +0100 Subject: [PATCH] [Alarm] Added AlarmRelative/Absolute methods implementation. [Feature] Added getRemainingSeconds() and getNextScheduledDate() methods implementation. Change-Id: I58b2f11fd0a00795fc5db2f6c5a7468510474488 Signed-off-by: Tomasz Marciniak --- src/alarm/alarm_manager.cc | 74 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/src/alarm/alarm_manager.cc b/src/alarm/alarm_manager.cc index 5580a83a..8bbc112f 100644 --- a/src/alarm/alarm_manager.cc +++ b/src/alarm/alarm_manager.cc @@ -432,10 +432,84 @@ void AlarmManager::GetAll(const picojson::value& args, picojson::object& out) { void AlarmManager::GetRemainingSeconds(const picojson::value& args, picojson::object& out) { LoggerD("Entered"); + + struct tm date; + struct tm current; + time_t current_time; + time_t next_time; + + int id = 0; + + if (args.contains("id") && args.get("id").is()) { + id = static_cast(args.get("id").get()); + } + + picojson::value result = picojson::value(picojson::object()); + picojson::object& result_obj = result.get(); + + int ret = alarm_get_scheduled_date(id, &date); + if(ALARM_ERROR_NONE != ret) { + LoggerI("alarm_get_scheduled_date error %d", ret); + if (ALARM_ERROR_INVALID_PARAMETER == ret || ALARM_ERROR_CONNECTION_FAIL == ret) { + result_obj.insert(std::make_pair("seconds", picojson::value())); + ReportSuccess(result, out); + return; + } else { + LoggerE("Platform unknown error."); + ReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Platform unknown error."), &out); + return; + } + } + + alarm_get_current_time(¤t); + next_time = mktime(&date); + current_time = mktime(¤t); + + long seconds = next_time - current_time; + + result_obj.insert(std::make_pair("seconds", picojson::value(std::to_string(seconds)))); + ReportSuccess(result, out); } void AlarmManager::GetNextScheduledDate(const picojson::value& args, picojson::object& out) { LoggerD("Entered"); + + int id = 0; + + if (args.contains("id") && args.get("id").is()) { + id = static_cast(args.get("id").get()); + } + + struct tm date; + int ret = alarm_get_scheduled_date(id, &date); + + picojson::value result = picojson::value(picojson::object()); + picojson::object& result_obj = result.get(); + + if (ALARM_ERROR_NONE != ret) { + result_obj.insert(std::make_pair("year", picojson::value())); + ReportSuccess(result, out); + return; + } + + struct tm curr_date; + ret = alarm_get_current_time(&curr_date); + if (ALARM_ERROR_NONE != ret || mktime(&date) < mktime(&curr_date)) { + result_obj.insert(std::make_pair("year", picojson::value())); + ReportSuccess(result, out); + return; + } + + // tm struct contains years since 1900 + // there is added 1900 to tm_year to return proper date + result_obj.insert(std::make_pair("year", picojson::value(std::to_string(date.tm_year + 1900)))); + result_obj.insert(std::make_pair("month", picojson::value(std::to_string(date.tm_mon)))); + result_obj.insert(std::make_pair("day", picojson::value(std::to_string(date.tm_mday)))); + result_obj.insert(std::make_pair("hour", picojson::value(std::to_string(date.tm_hour)))); + result_obj.insert(std::make_pair("min", picojson::value(std::to_string(date.tm_min)))); + result_obj.insert(std::make_pair("sec", picojson::value(std::to_string(date.tm_sec)))); + + ReportSuccess(result, out); } } // namespace alarm -- 2.34.1