/*
* Calendar Service
*
- * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2012 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
#include <stdlib.h>
-
#include <sys/time.h>
#include <unistd.h>
-
#include <alarm.h>
#include <vconf.h>
#include <app.h>
-#include "cal_internal.h"
#include "calendar.h"
-#include "cal_time.h"
#include "cal_typedef.h"
+#include "cal_internal.h"
+#include "cal_time.h"
#include "cal_inotify.h"
-
#include "cal_db_util.h"
#include "cal_db.h"
#include "cal_db_query.h"
-#include "cal_server_reminder.h"
+#include "cal_server_service.h"
+#include "cal_server_ondemand.h"
+#include "cal_server_dbus.h"
+#include "cal_server_alarm.h"
-#define CAL_SEARCH_LOOP_MAX 4
+#define CAL_SERVER_ALARM_THREAD_NAME "cal_server_alarm"
-#define COLOR_CYAN "\033[0;36m"
-#define COLOR_END "\033[0;m"
+GThread *_cal_server_alarm_thread = NULL;
+GCond _cal_server_alarm_cond;
+GMutex _cal_server_alarm_mutex;
+static bool server_killed = false;
+static bool signal_called = false;
-struct _alarm_data_s
-{
+struct _alarm_data_s {
int event_id;
- long long int alert_utime; // to compare
+ long long int alert_utime; /* to compare */
int unit;
int tick;
- int type; // utime, local
+ int type; /* utime, localtime */
long long int time;
- int record; // todo, event
- char datetime[32];
+ int record; /* todo, event */
+ char datetime[CAL_STR_SHORT_LEN32];
int system_type;
};
-// this api is necessary for repeat instance.
-static int __cal_server_alarm_unset_alerted_alarmmgr_id(int alarm_id)
+struct alarm_ud {
+ GList *alarm_list;
+};
+
+/* this api is necessary for repeat instance. */
+static int cal_server_alarm_unset_alerted_alarmmgr_id(int alarm_id)
{
- int ret = CALENDAR_ERROR_NONE;
char query[CAL_DB_SQL_MAX_LEN] = {0};
- cal_db_util_error_e dbret = CAL_DB_OK;
+ int ret = 0;
- ret = _cal_db_util_begin_trans();
- if (CALENDAR_ERROR_NONE != ret)
- {
- ERR("_cal_db_util_begin_trans() failed");
+ ret = cal_db_util_begin_trans();
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_begin_trans() Fail");
return CALENDAR_ERROR_DB_FAILED;
+ /* LCOV_EXCL_STOP */
}
DBG("alarm_id(%d)", alarm_id);
snprintf(query, sizeof(query), "UPDATE %s SET alarm_id = 0 WHERE alarm_id =%d ",
CAL_TABLE_ALARM, alarm_id);
-
- dbret = _cal_db_util_query_exec(query);
- if (CAL_DB_OK != dbret)
- {
- ERR("_cal_db_util_query_exec() Failed(%d)", dbret);
- switch (dbret)
- {
- case CAL_DB_ERROR_NO_SPACE:
- _cal_db_util_end_trans(false);
- return CALENDAR_ERROR_FILE_NO_SPACE;
- default:
- _cal_db_util_end_trans(false);
- return CALENDAR_ERROR_DB_FAILED;
- }
+ ret = cal_db_util_query_exec(query);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_exec() Fail(%d)", ret);
+ SECURE("[%s]", query);
+ cal_db_util_end_trans(false);
+ return ret;
+ /* LCOV_EXCL_STOP */
}
- _cal_db_util_end_trans(true);
+ cal_db_util_end_trans(true);
return CALENDAR_ERROR_NONE;
}
-static int __cal_server_alarm_clear_all_cb(alarm_id_t alarm_id, void *data)
+static int _cal_server_alarm_clear_all_cb(alarm_id_t alarm_id, void *data)
{
int ret;
DBG("remove alarm id(%d)", alarm_id);
- __cal_server_alarm_unset_alerted_alarmmgr_id(alarm_id);
+ cal_server_alarm_unset_alerted_alarmmgr_id(alarm_id);
ret = alarmmgr_remove_alarm(alarm_id);
- if (ret != ALARMMGR_RESULT_SUCCESS)
- {
- ERR("alarmmgr_remove_alarm() failed(ret:%d)", ret);
+ if (ret != ALARMMGR_RESULT_SUCCESS) {
+ /* LCOV_EXCL_START */
+ ERR("alarmmgr_remove_alarm() Fail(ret:%d)", ret);
return ret;
+ /* LCOV_EXCL_STOP */
}
return CALENDAR_ERROR_NONE;
}
-static int __cal_server_alarm_update_alarm_id(int alarm_id, int event_id, int tick, int unit)
+static int _cal_server_alarm_update_alarm_id(int alarm_id, int event_id, int tick, int unit)
{
- int ret = CALENDAR_ERROR_NONE;
char query[CAL_DB_SQL_MAX_LEN] = {0};
- cal_db_util_error_e dbret = CAL_DB_OK;
+ int ret = 0;
- ret = _cal_db_util_begin_trans();
- if (CALENDAR_ERROR_NONE != ret)
- {
- ERR("_cal_db_util_begin_trans() failed");
+ ret = cal_db_util_begin_trans();
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_begin_trans() Fail");
return CALENDAR_ERROR_DB_FAILED;
+ /* LCOV_EXCL_STOP */
}
DBG("Update alarm_id(%d) in alarm table", alarm_id);
- snprintf(query, sizeof(query), "UPDATE %s SET "
- "alarm_id =%d "
+ snprintf(query, sizeof(query), "UPDATE %s SET alarm_id =%d "
"WHERE event_id =%d AND remind_tick =%d AND remind_tick_unit =%d",
- CAL_TABLE_ALARM,
- alarm_id,
- event_id, tick, unit);
-
- dbret = _cal_db_util_query_exec(query);
- if (CAL_DB_OK != dbret)
- {
- ERR("_cal_db_util_query_exec() Failed(%d)", dbret);
- switch (dbret)
- {
- case CAL_DB_ERROR_NO_SPACE:
- _cal_db_util_end_trans(false);
- return CALENDAR_ERROR_FILE_NO_SPACE;
- default:
- _cal_db_util_end_trans(false);
- return CALENDAR_ERROR_DB_FAILED;
- }
+ CAL_TABLE_ALARM, alarm_id, event_id, tick, unit);
+ ret = cal_db_util_query_exec(query);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_exec() Fail(%d)", ret);
+ SECURE("[%s]", query);
+ cal_db_util_end_trans(false);
+ return ret;
+ /* LCOV_EXCL_STOP */
}
- _cal_db_util_end_trans(true);
+ cal_db_util_end_trans(true);
return CALENDAR_ERROR_NONE;
}
-static long long int __cal_server_alarm_get_alert_utime(const char *field, int event_id, time_t current)
+static time_t _make_time(struct tm *time)
+{
+ time_t utc = mktime(time);
+
+ /* If an error occurs when isdst is 1, retry it after chaning isdst is 0 */
+ if (utc < 0 && time->tm_isdst != 0 ) {
+ time->tm_isdst = 0;
+ utc = mktime(time);
+ }
+ return utc;
+}
+
+static long long int _get_event_alert_utime(const char *field, int event_id, time_t current)
{
+ int ret = 0;
char query[CAL_DB_SQL_MAX_LEN] = {0};
snprintf(query, sizeof(query), "SELECT %s FROM %s "
"WHERE event_id=%d AND %s>%ld ORDER BY %s LIMIT 1",
- field, CAL_TABLE_NORMAL_INSTANCE, event_id, field, current, field);
+ field, CAL_TABLE_UTIME_INSTANCE, event_id, field, current, field);
sqlite3_stmt *stmt = NULL;
- stmt = _cal_db_util_query_prepare(query);
+ ret = cal_db_util_query_prepare(query, &stmt);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_prepare() Fail(%d)", ret);
+ SECURE("query[%s]", query);
+ return ret;
+ /* LCOV_EXCL_STOP */
+ }
long long int utime = 0;
- if (CAL_DB_ROW == _cal_db_util_stmt_step(stmt))
+ if (CAL_SQLITE_ROW == cal_db_util_stmt_step(stmt))
utime = sqlite3_column_int(stmt, 0);
sqlite3_finalize(stmt);
return utime;
}
-static int __cal_server_alarm_get_alert_localtime(const char *field, int event_id, time_t current)
+static int _get_event_alert_localtime(const char *field, int event_id, time_t current)
{
+ int ret = 0;
char query[CAL_DB_SQL_MAX_LEN] = {0};
struct tm st = {0};
- tzset();
- localtime_r(¤t, &st);
- time_t mod_current = timegm(&st);
+ struct tm now_s = {0};
+ char buf[256] = {0};
+
+ localtime_r(¤t, &now_s);
+ snprintf(buf, sizeof(buf), "%04d-%02d-%02dT%02d:%02d:%02d", (int)(now_s.tm_year + 1900),
+ (int)(now_s.tm_mon + 1), (int)now_s.tm_mday, (int)now_s.tm_hour,
+ (int)now_s.tm_min, (int)now_s.tm_sec);
+ DBG("Current time : (%s)", buf);
+
snprintf(query, sizeof(query), "SELECT %s FROM %s "
- "WHERE event_id=%d AND strftime('%%s', %s)>%ld ORDER BY %s LIMIT 1",
- field, CAL_TABLE_ALLDAY_INSTANCE, event_id, field, mod_current, field);
+ "WHERE event_id=%d AND (strftime('%%s', %s) - strftime('%%s', '%s') > 0) ORDER BY %s LIMIT 1",
+ field, CAL_TABLE_LOCALTIME_INSTANCE, event_id, field, buf, field);
sqlite3_stmt *stmt = NULL;
- stmt = _cal_db_util_query_prepare(query);
+ ret = cal_db_util_query_prepare(query, &stmt);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_prepare() Fail(%d)", ret);
+ SECURE("query[%s]", query);
+ return ret;
+ /* LCOV_EXCL_STOP */
+ }
const char *datetime = NULL;
- if (CAL_DB_ROW == _cal_db_util_stmt_step(stmt))
+ if (CAL_SQLITE_ROW == cal_db_util_stmt_step(stmt))
datetime = (const char *)sqlite3_column_text(stmt, 0);
+
if (NULL == datetime || '\0' == *datetime) {
+ /* LCOV_EXCL_START */
ERR("Invalid datetime [%s]", datetime);
sqlite3_finalize(stmt);
return 0;
+ /* LCOV_EXCL_STOP */
}
int y = 0, m = 0, d = 0;
st.tm_hour = h;
st.tm_min = n;
st.tm_sec = s;
+ st.tm_isdst = cal_time_is_dst_savings();
+
+ return (long long int)_make_time(&st);
+}
+
+static int64_t _get_todo_alert_utime(const char *field, int id, time_t now_t)
+{
+ int ret = 0;
+ char query[CAL_DB_SQL_MAX_LEN] = {0};
+ snprintf(query, sizeof(query), "SELECT %s FROM "CAL_TABLE_SCHEDULE" "
+ "WHERE id=%d AND %s>%ld ORDER BY %s LIMIT 1", field, id, field, now_t, field);
+
+ sqlite3_stmt *stmt = NULL;
+ ret = cal_db_util_query_prepare(query, &stmt);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_prepare() Fail(%d)", ret);
+ SECURE("query[%s]", query);
+ return ret;
+ /* LCOV_EXCL_STOP */
+ }
+
+ int64_t utime = 0;
+ ret = cal_db_util_stmt_step(stmt);
+ switch (ret) {
+ case CAL_SQLITE_ROW:
+ utime = (int64_t)sqlite3_column_int64(stmt, 0);
+ break;
+ /* LCOV_EXCL_START
+ case SQLITE_DONE:
+ ERR("No data");
+ break;*/ //Svace:371986
+ default:
+ ERR("Invalid return(%d)", ret);
+ break;
+ /* LCOV_EXCL_STOP */
+ }
- return (long long int)mktime(&st);
+ sqlite3_finalize(stmt);
+ return utime;
}
+static int _get_todo_alert_localtime(const char *field, int event_id, time_t current)
+{
+ int ret = 0;
+ char query[CAL_DB_SQL_MAX_LEN] = {0};
+ struct tm st = {0};
+ struct tm now_s = {0};
+ char buf[256] = {0};
+
+ localtime_r(¤t, &now_s);
+ snprintf(buf, sizeof(buf), "%04d-%02d-%02dT%02d:%02d:%02d", (int)(now_s.tm_year + 1900),
+ (int)(now_s.tm_mon + 1), (int)now_s.tm_mday, (int)now_s.tm_hour,
+ (int)now_s.tm_min, (int)now_s.tm_sec);
+ DBG("Current time : (%s)", buf);
+
+ snprintf(query, sizeof(query), "SELECT %s FROM %s "
+ "WHERE id=%d AND (strftime('%%s', %s) - strftime('%%s', '%s') > 0) ORDER BY %s LIMIT 1",
+ field, CAL_TABLE_SCHEDULE, event_id, field, buf, field);
+
+ sqlite3_stmt *stmt = NULL;
+ ret = cal_db_util_query_prepare(query, &stmt);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_prepare() Fail(%d)", ret);
+ SECURE("query[%s]", query);
+ return ret;
+ /* LCOV_EXCL_STOP */
+ }
+
+ const char *datetime = NULL;
+ if (CAL_SQLITE_ROW == cal_db_util_stmt_step(stmt))
+ datetime = (const char *)sqlite3_column_text(stmt, 0);
+
+ if (NULL == datetime || '\0' == *datetime) {
+ /* LCOV_EXCL_START */
+ ERR("Invalid datetime [%s]", datetime);
+ sqlite3_finalize(stmt);
+ return 0;
+ /* LCOV_EXCL_STOP */
+ }
+
+ int y = 0, m = 0, d = 0;
+ int h = 0, n = 0, s = 0;
+ sscanf(datetime, CAL_FORMAT_LOCAL_DATETIME, &y, &m, &d, &h, &n, &s);
+ sqlite3_finalize(stmt);
+
+ st.tm_year = y - 1900;
+ st.tm_mon = m - 1;
+ st.tm_mday = d;
+ st.tm_hour = h;
+ st.tm_min = n;
+ st.tm_sec = s;
+ st.tm_isdst = cal_time_is_dst_savings();
+
+ return (long long int)_make_time(&st);
+}
/*
- * to get aler time, time(NULL) is not accurate. 1 secs diff could be occured.
+ * time(NULL) is not appropriate as parameter.
+ * 1 seconds could be flowed before calling function.(1 sec time diff)
* so, searching DB is neccessary to find alert time.
*/
-static int __cal_server_alarm_get_alert_time(int alarm_id, time_t *tt_alert)
+static int cal_server_alarm_get_alert_time(int alarm_id, time_t *tt_alert)
{
- retvm_if(NULL == tt_alert, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter: tt_alert is NULL");
+ int ret = 0;
+ RETV_IF(NULL == tt_alert, CALENDAR_ERROR_INVALID_PARAMETER);
char query[CAL_DB_SQL_MAX_LEN] = {0};
snprintf(query, sizeof(query), "SELECT A.event_id, A.remind_tick_unit, A.remind_tick, "
- "A.alarm_type, A.alarm_utime, A.alarm_datetime, B.system_type, "
- "B.type, B.dtstart_type, B.dtend_type "
- "FROM %s as A, %s as B ON A.event_id = B.id WHERE alarm_id =%d ",
+ "A.alarm_type, A.alarm_utime, A.alarm_datetime, B.type, B.dtstart_type, "
+ "B.dtend_type FROM %s as A, %s as B ON A.event_id =B.id WHERE alarm_id =%d ",
CAL_TABLE_ALARM, CAL_TABLE_SCHEDULE, alarm_id);
sqlite3_stmt *stmt = NULL;
- stmt = _cal_db_util_query_prepare(query);
- retvm_if (NULL == stmt, CALENDAR_ERROR_DB_FAILED, "_cal_db_util_query_prepare() Failed");
+ ret = cal_db_util_query_prepare(query, &stmt);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_prepare() Fail(%d)", ret);
+ SECURE("query[%s]", query);
+ return ret;
+ /* LCOV_EXCL_STOP */
+ }
int event_id = 0;
int unit = 0;
int type = 0;
long long int utime = 0;
const char *datetime = NULL;
- int system_type = 0;
int record_type = 0;
int dtstart_type = 0;
int dtend_type = 0;
struct tm st = {0};
- if (CAL_DB_ROW == _cal_db_util_stmt_step(stmt)) {
- int index = 0;
- event_id = sqlite3_column_int(stmt, index++);
- unit = sqlite3_column_int(stmt, index++);
- tick = sqlite3_column_int(stmt, index++);
- type = sqlite3_column_int(stmt, index++);
- utime = sqlite3_column_int64(stmt, index++);
- datetime = (const char *)sqlite3_column_text(stmt, index++);
- system_type = sqlite3_column_int(stmt, index++);
- record_type = sqlite3_column_int(stmt, index++);
- dtstart_type = sqlite3_column_int(stmt, index++);
- dtend_type = sqlite3_column_int(stmt, index++);
- }
-
- if (NULL == tt_alert) {
- ERR("Invalid parameter: tt_alert is NULL");
- sqlite3_finalize(stmt);
- return CALENDAR_ERROR_INVALID_PARAMETER;
+ if (CAL_SQLITE_ROW == cal_db_util_stmt_step(stmt)) {
+ event_id = sqlite3_column_int(stmt, 0);
+ unit = sqlite3_column_int(stmt, 1);
+ tick = sqlite3_column_int(stmt, 2);
+ type = sqlite3_column_int(stmt, 3);
+ utime = sqlite3_column_int64(stmt, 4);
+ datetime = (const char *)sqlite3_column_text(stmt, 5);
+ record_type = sqlite3_column_int(stmt, 6);
+ dtstart_type = sqlite3_column_int(stmt, 7);
+ dtend_type = sqlite3_column_int(stmt, 8);
}
if (CALENDAR_ALARM_TIME_UNIT_SPECIFIC == unit) {
if (CALENDAR_TIME_UTIME == type) {
*tt_alert = utime;
-
} else {
int y = 0, m = 0, d = 0;
int h = 0, n = 0, s = 0;
- sscanf(datetime, CAL_FORMAT_LOCAL_DATETIME, &y, &m, &d, &h, &n, &s);
-
- st.tm_year = y - 1900;
- st.tm_mon = m - 1;
- st.tm_mday = d;
- st.tm_hour = h;
- st.tm_min = n;
- st.tm_sec = s;
- *tt_alert = (long long int)mktime(&st);
- DBG("datetime[%s] to %02d:%02d:%02d (%lld)", datetime, h, n, s, *tt_alert);
+ if (datetime) {
+ sscanf(datetime, CAL_FORMAT_LOCAL_DATETIME, &y, &m, &d, &h, &n, &s);
+
+ st.tm_year = y - 1900;
+ st.tm_mon = m - 1;
+ st.tm_mday = d;
+ st.tm_hour = h;
+ st.tm_min = n;
+ st.tm_sec = s;
+ st.tm_isdst = cal_time_is_dst_savings();
+ *tt_alert = _make_time(&st);
+ DBG("datetime[%s] to %02d:%02d:%02d (%ld)", datetime, h, n, s, *tt_alert);
+ }
}
sqlite3_finalize(stmt);
return CALENDAR_ERROR_NONE;
}
sqlite3_finalize(stmt);
- // not specific
-
time_t current = time(NULL);
+
current += (tick * unit);
- current -= 2; // in case time passed
+ current -= 2; /* in case time passed */
- switch (record_type)
- {
+ switch (record_type) {
case CALENDAR_BOOK_TYPE_EVENT:
- switch (dtstart_type)
- {
+ switch (dtstart_type) {
case CALENDAR_TIME_UTIME:
- utime = __cal_server_alarm_get_alert_utime("dtstart_utime", event_id, current);
+ utime = _get_event_alert_utime("dtstart_utime", event_id, current);
break;
case CALENDAR_TIME_LOCALTIME:
- utime = __cal_server_alarm_get_alert_localtime("dtstart_datetime", event_id, current);
+ utime = _get_event_alert_localtime("dtstart_datetime", event_id, current);
break;
}
break;
case CALENDAR_BOOK_TYPE_TODO:
- switch (dtend_type)
- {
+ switch (dtend_type) {
case CALENDAR_TIME_UTIME:
- utime = __cal_server_alarm_get_alert_utime("dtend_utime", event_id, current);
+ utime = _get_todo_alert_utime("dtend_utime", event_id, current);
break;
case CALENDAR_TIME_LOCALTIME:
- utime = __cal_server_alarm_get_alert_localtime("dtend_datetime", event_id, current);
+ utime = _get_todo_alert_localtime("dtend_datetime", event_id, current);
break;
}
break;
}
- DBG("alert_time(%lld) = utime(%lld) - (tick(%d) * unit(%d))", *tt_alert, utime, datetime, tick, unit);
-
*tt_alert = utime - (tick * unit);
+
+ DBG("alert_time(%ld) = utime(%lld) - (tick(%d) * unit(%d))", *tt_alert, utime, tick, unit);
+
return CALENDAR_ERROR_NONE;
}
-static void __cal_server_alarm_get_upcoming_specific_utime(time_t utime, bool get_all, GList **l) // case 1
+/*
+ * bool get_all is
+ * true : to get all alarms including same time event.
+ * (ig. if 3 diffrent alarms exist at 06:30, list has 3 data)
+ * false : to get only one alarm to register in alarm-manager.
+ * (ig. if 3 diffrent alarms exist at 06:30, list has only one)
+ */
+static void _cal_server_alarm_get_upcoming_specific_utime(time_t utime, bool get_all, GList **l)
{
- char query_specific_utime[CAL_DB_SQL_MAX_LEN] = {0};
- snprintf(query_specific_utime, sizeof(query_specific_utime),
- // alarm utime(normal event + todo)
- "SELECT event_id, remind_tick_unit, remind_tick, alarm_type, alarm_utime, alarm_datetime "
- "FROM %s "
- "WHERE remind_tick_unit =%d AND alarm_type =%d AND alarm_utime %s %ld %s",
- CAL_TABLE_ALARM,
+ int ret = 0;
+ char query[CAL_DB_SQL_MAX_LEN] = {0};
+ snprintf(query, sizeof(query), "SELECT A.event_id, A.remind_tick_unit, A.remind_tick,"
+ "A.alarm_type, A.alarm_utime, A.alarm_datetime "
+ "FROM "CAL_TABLE_ALARM" as A, "CAL_TABLE_SCHEDULE" as S ON A.event_id = S.id "
+ "WHERE S.link_base_id = 0 AND A.remind_tick_unit = %d AND A.alarm_type = %d "
+ "AND A.alarm_utime %s %ld %s",
CALENDAR_ALARM_TIME_UNIT_SPECIFIC, CALENDAR_TIME_UTIME,
- true == get_all ? "=" : ">",
- utime,
+ true == get_all ? "=" : ">", utime,
true == get_all ? "" : "ORDER BY alarm_utime ASC LIMIT 1");
sqlite3_stmt *stmt = NULL;
- stmt = _cal_db_util_query_prepare(query_specific_utime);
- if (NULL == stmt) {
- ERR("_cal_db_util_query_prepare() Failed");
- ERR("[%s]", query_specific_utime);
+ ret = cal_db_util_query_prepare(query, &stmt);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_prepare() Fail(%d)", ret);
+ SECURE("query[%s]", query);
return;
+ /* LCOV_EXCL_STOP */
}
- while (CAL_DB_ROW == _cal_db_util_stmt_step(stmt)) {
+ while (CAL_SQLITE_ROW == cal_db_util_stmt_step(stmt)) {
struct _alarm_data_s *ad = calloc(1, sizeof(struct _alarm_data_s));
+ if (NULL == ad) {
+ /* LCOV_EXCL_START */
+ ERR("calloc() Fail");
+ sqlite3_finalize(stmt);
+ return;
+ /* LCOV_EXCL_STOP */
+ }
- int index = 0;
- ad->event_id = sqlite3_column_int(stmt, index++);
- ad->unit = sqlite3_column_int(stmt, index++);
- ad->tick = sqlite3_column_int(stmt, index++);
- ad->type = sqlite3_column_int(stmt, index++);
- ad->time = (long long int)sqlite3_column_int64(stmt, index++);
- snprintf(ad->datetime, sizeof(ad->datetime), "%s", (const char *)sqlite3_column_text(stmt, index++));
+ ad->event_id = sqlite3_column_int(stmt, 0);
+ ad->unit = sqlite3_column_int(stmt, 1);
+ ad->tick = sqlite3_column_int(stmt, 2);
+ ad->type = sqlite3_column_int(stmt, 3);
+ ad->time = (long long int)sqlite3_column_int64(stmt, 4);
+ snprintf(ad->datetime, sizeof(ad->datetime), "%s", (const char *)sqlite3_column_text(stmt, 5));
*l = g_list_append(*l, ad);
DBG("found id(%d) unit(%d) tick(%d) type(%d) time(%lld) [%s]",
ad->event_id, ad->unit, ad->tick, ad->type, ad->time, ad->datetime);
sqlite3_finalize(stmt);
}
-static void __cal_server_alarm_get_upcoming_specific_localtime(const char *datetime, bool get_all, GList **l)
+static void _cal_server_alarm_get_upcoming_specific_localtime(const char *datetime, bool get_all, GList **l)
{
- char query_specific_localtime[CAL_DB_SQL_MAX_LEN] = {0};
- snprintf(query_specific_localtime, sizeof(query_specific_localtime),
- "SELECT event_id, remind_tick_unit, remind_tick, "
- "alarm_type, alarm_utime, alarm_datetime "
- "FROM %s "
- "WHERE remind_tick_unit=%d AND alarm_type=%d AND alarm_datetime %s '%s' %s",
- CAL_TABLE_ALARM,
+ int ret = 0;
+ char query[CAL_DB_SQL_MAX_LEN] = {0};
+ snprintf(query, sizeof(query), "SELECT A.event_id, A.remind_tick_unit, A.remind_tick,"
+ "A.alarm_type, A.alarm_utime, A.alarm_datetime "
+ "FROM "CAL_TABLE_ALARM" as A, "CAL_TABLE_SCHEDULE" as S ON A.event_id = S.id "
+ "WHERE S.link_base_id = 0 AND A.remind_tick_unit = %d AND A.alarm_type = %d "
+ "AND A.alarm_datetime %s '%s' %s",
CALENDAR_ALARM_TIME_UNIT_SPECIFIC, CALENDAR_TIME_LOCALTIME,
- true == get_all ? "=" : ">",
- datetime,
+ true == get_all ? "=" : ">", datetime,
true == get_all ? "" : "ORDER BY alarm_datetime ASC LIMIT 1");
sqlite3_stmt *stmt = NULL;
- stmt = _cal_db_util_query_prepare(query_specific_localtime);
- if (NULL == stmt) {
- ERR("_cal_db_util_query_prepare() Failed");
- ERR("[%s]", query_specific_localtime);
+ ret = cal_db_util_query_prepare(query, &stmt);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_prepare() Fail(%d)", ret);
+ SECURE("query[%s]", query);
return;
+ /* LCOV_EXCL_STOP */
}
- while (CAL_DB_ROW == _cal_db_util_stmt_step(stmt)) {
+ while (CAL_SQLITE_ROW == cal_db_util_stmt_step(stmt)) {
struct _alarm_data_s *ad = calloc(1, sizeof(struct _alarm_data_s));
+ if (NULL == ad) {
+ /* LCOV_EXCL_START */
+ ERR("calloc() Fail");
+ sqlite3_finalize(stmt);
+ return;
+ /* LCOV_EXCL_STOP */
+ }
- int index = 0;
- ad->event_id = sqlite3_column_int(stmt, index++);
- ad->unit = sqlite3_column_int(stmt, index++);
- ad->tick = sqlite3_column_int(stmt, index++);
- ad->type = sqlite3_column_int(stmt, index++);
- ad->time = (long long int)sqlite3_column_int64(stmt, index++);
- snprintf(ad->datetime, sizeof(ad->datetime), "%s", (const char *)sqlite3_column_text(stmt, index++));
+ ad->event_id = sqlite3_column_int(stmt, 0);
+ ad->unit = sqlite3_column_int(stmt, 1);
+ ad->tick = sqlite3_column_int(stmt, 2);
+ ad->type = sqlite3_column_int(stmt, 3);
+ ad->time = (long long int)sqlite3_column_int64(stmt, 4);
+ snprintf(ad->datetime, sizeof(ad->datetime), "%s", (const char *)sqlite3_column_text(stmt, 5));
*l = g_list_append(*l, ad);
DBG("found id(%d) unit(%d) tick(%d) type(%d) time(%lld) [%s]",
ad->event_id, ad->unit, ad->tick, ad->type, ad->time, ad->datetime);
st.tm_hour = h;
st.tm_min = n;
st.tm_sec = s;
- ad->alert_utime = (long long int)mktime(&st);
+ st.tm_isdst = cal_time_is_dst_savings();
+ ad->alert_utime = (long long int)_make_time(&st);
if (false == get_all) break;
}
sqlite3_finalize(stmt);
}
-static void __cal_server_alarm_get_upcoming_nonspecific_event_utime(time_t utime, bool get_all, GList **l)
+static void _cal_server_alarm_get_upcoming_nonspecific_event_utime(time_t utime, bool get_all, GList **l)
{
- char query_nonspecific_event_utime[CAL_DB_SQL_MAX_LEN] = {0};
- snprintf(query_nonspecific_event_utime, sizeof(query_nonspecific_event_utime),
- // A:alarm B:normal instance
- "SELECT A.event_id, A.remind_tick_unit, A.remind_tick, A.alarm_type, B.dtstart_utime, A.alarm_datetime "
- "FROM %s as A, %s as B ON A.event_id = B.event_id "
- "WHERE A.remind_tick_unit >%d AND (B.dtstart_utime - (A.remind_tick_unit * A.remind_tick)) %s %ld %s",
- CAL_TABLE_ALARM, CAL_TABLE_NORMAL_INSTANCE,
+ int ret = 0;
+ /*
+ * A:alarm
+ * B:utime
+ */
+ char query[CAL_DB_SQL_MAX_LEN] = {0};
+ snprintf(query, sizeof(query), "SELECT A.event_id,A.remind_tick_unit,A.remind_tick, "
+ "A.alarm_type,B.dtstart_utime,A.alarm_datetime "
+ "FROM "CAL_TABLE_ALARM" as A, "CAL_TABLE_UTIME_INSTANCE" as B, "CAL_TABLE_SCHEDULE" as S "
+ "ON A.event_id = B.event_id AND B.event_id = S.id "
+ "WHERE S.link_base_id = 0 AND A.remind_tick_unit > %d "
+ "AND (B.dtstart_utime - (A.remind_tick_unit * A.remind_tick)) %s %ld %s",
CALENDAR_ALARM_TIME_UNIT_SPECIFIC,
- true == get_all ? "=" : ">",
- utime,
+ true == get_all ? "=" : ">", utime,
true == get_all ? "" : "ORDER BY (B.dtstart_utime - (A.remind_tick_unit * A.remind_tick)) LIMIT 1");
sqlite3_stmt *stmt = NULL;
- stmt = _cal_db_util_query_prepare(query_nonspecific_event_utime);
- if (NULL == stmt) {
- ERR("_cal_db_util_query_prepare() Failed");
- ERR("[%s]", query_nonspecific_event_utime);
+ ret = cal_db_util_query_prepare(query, &stmt);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_prepare() Fail(%d)", ret);
+ SECURE("query[%s]", query);
return;
+ /* LCOV_EXCL_STOP */
}
- while (CAL_DB_ROW == _cal_db_util_stmt_step(stmt)) {
+ while (CAL_SQLITE_ROW == cal_db_util_stmt_step(stmt)) {
struct _alarm_data_s *ad = calloc(1, sizeof(struct _alarm_data_s));
+ if (NULL == ad) {
+ /* LCOV_EXCL_START */
+ ERR("calloc() Fail");
+ sqlite3_finalize(stmt);
+ return;
+ /* LCOV_EXCL_STOP */
+ }
- int index = 0;
- ad->event_id = sqlite3_column_int(stmt, index++);
- ad->unit = sqlite3_column_int(stmt, index++);
- ad->tick = sqlite3_column_int(stmt, index++);
- ad->type = sqlite3_column_int(stmt, index++);
- ad->time = (long long int)sqlite3_column_int64(stmt, index++);
- snprintf(ad->datetime, sizeof(ad->datetime), "%s", (const char *)sqlite3_column_text(stmt, index++));
+ ad->event_id = sqlite3_column_int(stmt, 0);
+ ad->unit = sqlite3_column_int(stmt, 1);
+ ad->tick = sqlite3_column_int(stmt, 2);
+ ad->type = sqlite3_column_int(stmt, 3);
+ ad->time = (long long int)sqlite3_column_int64(stmt, 4);
+ snprintf(ad->datetime, sizeof(ad->datetime), "%s", (const char *)sqlite3_column_text(stmt, 5));
*l = g_list_append(*l, ad);
DBG("found id(%d) unit(%d) tick(%d) type(%d) time(%lld) [%s]",
ad->event_id, ad->unit, ad->tick, ad->type, ad->time, ad->datetime);
sqlite3_finalize(stmt);
}
-static void __cal_server_alarm_get_upcoming_nonspecific_event_localtime(const char *datetime, bool get_all, GList **l)
+static void _cal_server_alarm_get_upcoming_nonspecific_event_localtime(const char *datetime, bool get_all, GList **l)
{
- char query_nonspecific_event_localtime[CAL_DB_SQL_MAX_LEN] = {0};
- snprintf(query_nonspecific_event_localtime, sizeof(query_nonspecific_event_localtime),
- // A:alarm B:allday
- "SELECT A.event_id, A.remind_tick_unit, A.remind_tick, A.alarm_type, A.alarm_utime, B.dtstart_datetime "
- "FROM %s as A, %s as B ON A.event_id = B.event_id "
- "WHERE A.remind_tick_unit >%d AND "
+ int ret = 0;
+ /*
+ * A:alarm
+ * B:localtime
+ */
+ char query[CAL_DB_SQL_MAX_LEN] = {0};
+ snprintf(query, sizeof(query), "SELECT A.event_id, A.remind_tick_unit, A.remind_tick, "
+ "A.alarm_type, A.alarm_utime, B.dtstart_datetime "
+ "FROM "CAL_TABLE_ALARM" as A, "CAL_TABLE_LOCALTIME_INSTANCE" as B, "CAL_TABLE_SCHEDULE" as S "
+ "ON A.event_id = B.event_id AND B.event_id = S.id "
+ "WHERE S.link_base_id = 0 AND A.remind_tick_unit >%d AND "
"(strftime('%%s', B.dtstart_datetime) - (A.remind_tick_unit * A.remind_tick) - strftime('%%s', '%s') %s 0) %s",
- CAL_TABLE_ALARM, CAL_TABLE_ALLDAY_INSTANCE,
CALENDAR_ALARM_TIME_UNIT_SPECIFIC,
- datetime,
- true == get_all ? "=" : ">",
+ datetime, true == get_all ? "=" : ">",
true == get_all ? "" : "ORDER BY (strftime('%s', B.dtstart_datetime) - (A.remind_tick_unit * A.remind_tick)) LIMIT 1 ");
sqlite3_stmt *stmt = NULL;
- stmt = _cal_db_util_query_prepare(query_nonspecific_event_localtime);
- if (NULL == stmt) {
- ERR("_cal_db_util_query_prepare() Failed");
- ERR("[%s]", query_nonspecific_event_localtime);
+ ret = cal_db_util_query_prepare(query, &stmt);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_prepare() Fail(%d)", ret);
+ SECURE("query[%s]", query);
return;
+ /* LCOV_EXCL_STOP */
}
- while (CAL_DB_ROW == _cal_db_util_stmt_step(stmt)) {
+ while (CAL_SQLITE_ROW == cal_db_util_stmt_step(stmt)) {
struct _alarm_data_s *ad = calloc(1, sizeof(struct _alarm_data_s));
+ if (NULL == ad) {
+ /* LCOV_EXCL_START */
+ ERR("calloc() Fail");
+ sqlite3_finalize(stmt);
+ return;
+ /* LCOV_EXCL_STOP */
+ }
- int index = 0;
- ad->event_id = sqlite3_column_int(stmt, index++);
- ad->unit = sqlite3_column_int(stmt, index++);
- ad->tick = sqlite3_column_int(stmt, index++);
- ad->type = sqlite3_column_int(stmt, index++);
- ad->time = (long long int)sqlite3_column_int64(stmt, index++);
- snprintf(ad->datetime, sizeof(ad->datetime), "%s", (const char *)sqlite3_column_text(stmt, index++));
+ ad->event_id = sqlite3_column_int(stmt, 0);
+ ad->unit = sqlite3_column_int(stmt, 1);
+ ad->tick = sqlite3_column_int(stmt, 2);
+ ad->type = sqlite3_column_int(stmt, 3);
+ ad->time = (long long int)sqlite3_column_int64(stmt, 4);
+ snprintf(ad->datetime, sizeof(ad->datetime), "%s", (const char *)sqlite3_column_text(stmt, 5));
*l = g_list_append(*l, ad);
DBG("found id(%d) unit(%d) tick(%d) type(%d) time(%lld) [%s]",
ad->event_id, ad->unit, ad->tick, ad->type, ad->time, ad->datetime);
st.tm_hour = h;
st.tm_min = n;
st.tm_sec = s;
- ad->alert_utime = (long long int)mktime(&st) - (ad->tick * ad->unit);
+ st.tm_isdst = cal_time_is_dst_savings();
+ ad->alert_utime = (long long int)_make_time(&st) - (ad->tick * ad->unit);
if (false == get_all) break;
}
sqlite3_finalize(stmt);
}
-static void __cal_server_alarm_get_upcoming_nonspecific_todo_utime(time_t utime, bool get_all, GList **l)
+static void _cal_server_alarm_get_upcoming_nonspecific_todo_utime(time_t utime, bool get_all, GList **l)
{
- char query_nonspecific_todo_utime[CAL_DB_SQL_MAX_LEN] = {0};
- snprintf(query_nonspecific_todo_utime, sizeof(query_nonspecific_todo_utime),
- // A:alarm B:todo(normal)
- "SELECT A.event_id, A.remind_tick_unit, A.remind_tick, A.alarm_type, B.dtend_utime, A.alarm_datetime "
- "FROM %s as A, %s as B ON A.event_id = B.id "
- "WHERE A.remind_tick_unit >%d AND B.type =%d "
- "AND (B.dtend_utime - (A.remind_tick_unit * A.remind_tick)) %s %ld %s",
- CAL_TABLE_ALARM, CAL_TABLE_SCHEDULE,
+ int ret = 0;
+ /*
+ * A:alarm
+ * S:todo(utime)
+ */
+ char query[CAL_DB_SQL_MAX_LEN] = {0};
+ snprintf(query, sizeof(query), "SELECT A.event_id, A.remind_tick_unit, A.remind_tick,"
+ "A.alarm_type, S.dtend_utime, A.alarm_datetime "
+ "FROM "CAL_TABLE_ALARM" as A, "CAL_TABLE_SCHEDULE" as S ON A.event_id = S.id "
+ "WHERE A.remind_tick_unit > %d AND S.type = %d "
+ "AND (S.dtend_utime - (A.remind_tick_unit * A.remind_tick)) %s %ld %s",
CALENDAR_ALARM_TIME_UNIT_SPECIFIC, CALENDAR_BOOK_TYPE_TODO,
- true == get_all ? "=" : ">",
- utime,
- true == get_all ? "" : "ORDER BY (B.dtend_utime - (A.remind_tick_unit * A.remind_tick)) LIMIT 1 ");
+ true == get_all ? "=" : ">", utime,
+ true == get_all ? "" : "ORDER BY (S.dtend_utime - (A.remind_tick_unit * A.remind_tick)) LIMIT 1 ");
sqlite3_stmt *stmt = NULL;
- stmt = _cal_db_util_query_prepare(query_nonspecific_todo_utime);
- if (NULL == stmt) {
- ERR("_cal_db_util_query_prepare() Failed");
- ERR("[%s]", query_nonspecific_todo_utime);
+ ret = cal_db_util_query_prepare(query, &stmt);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_prepare() Fail(%d)", ret);
+ SECURE("query[%s]", query);
return;
+ /* LCOV_EXCL_STOP */
}
- while (CAL_DB_ROW == _cal_db_util_stmt_step(stmt)) {
+ while (CAL_SQLITE_ROW == cal_db_util_stmt_step(stmt)) {
struct _alarm_data_s *ad = calloc(1, sizeof(struct _alarm_data_s));
+ if (NULL == ad) {
+ /* LCOV_EXCL_START */
+ ERR("calloc() Fail");
+ sqlite3_finalize(stmt);
+ return;
+ /* LCOV_EXCL_STOP */
+ }
- int index = 0;
- ad->event_id = sqlite3_column_int(stmt, index++);
- ad->unit = sqlite3_column_int(stmt, index++);
- ad->tick = sqlite3_column_int(stmt, index++);
- ad->type = sqlite3_column_int(stmt, index++);
- ad->time = (long long int)sqlite3_column_int64(stmt, index++);
- snprintf(ad->datetime, sizeof(ad->datetime), "%s", (const char *)sqlite3_column_text(stmt, index++));
+ ad->event_id = sqlite3_column_int(stmt, 0);
+ ad->unit = sqlite3_column_int(stmt, 1);
+ ad->tick = sqlite3_column_int(stmt, 2);
+ ad->type = sqlite3_column_int(stmt, 3);
+ ad->time = (long long int)sqlite3_column_int64(stmt, 4);
+ snprintf(ad->datetime, sizeof(ad->datetime), "%s", (const char *)sqlite3_column_text(stmt, 5));
*l = g_list_append(*l, ad);
DBG("found id(%d) unit(%d) tick(%d) type(%d) time(%lld) [%s]",
ad->event_id, ad->unit, ad->tick, ad->type, ad->time, ad->datetime);
sqlite3_finalize(stmt);
}
-static void __cal_server_alarm_get_upcoming_nonspecific_todo_localtime(const char *datetime, bool get_all, GList **l)
+static void _cal_server_alarm_get_upcoming_nonspecific_todo_localtime(const char *datetime, bool get_all, GList **l)
{
- char query_nonspecific_todo_localtime[CAL_DB_SQL_MAX_LEN] = {0};
- snprintf(query_nonspecific_todo_localtime, sizeof(query_nonspecific_todo_localtime),
- // A:alarm B:todo(allday)
- "SELECT A.event_id, A.remind_tick_unit, A.remind_tick, A.alarm_type, A.alarm_utime, B.dtend_datetime "
- "FROM %s as A, %s as B ON A.event_id = B.id "
+ int ret = 0;
+ /*
+ * A:alarm
+ * B:todo(localtime)
+ */
+ char query[CAL_DB_SQL_MAX_LEN] = {0};
+ snprintf(query, sizeof(query), "SELECT A.event_id,A.remind_tick_unit,A.remind_tick,"
+ "A.alarm_type,A.alarm_utime,B.dtend_datetime "
+ "FROM "CAL_TABLE_ALARM" as A, "CAL_TABLE_SCHEDULE" as B ON A.event_id = B.id "
"WHERE A.remind_tick_unit >%d AND B.type =%d "
"AND (strftime('%%s', B.dtend_datetime) - (A.remind_tick_unit * A.remind_tick) - strftime('%%s', '%s') %s 0) %s",
- CAL_TABLE_ALARM, CAL_TABLE_SCHEDULE,
CALENDAR_ALARM_TIME_UNIT_SPECIFIC, CALENDAR_BOOK_TYPE_TODO,
- datetime,
- true == get_all ? "=" : ">",
+ datetime, true == get_all ? "=" : ">",
true == get_all ? "" : "ORDER BY (strftime('%s', B.dtend_datetime) - (A.remind_tick_unit * A.remind_tick)) LIMIT 1 ");
sqlite3_stmt *stmt = NULL;
- stmt = _cal_db_util_query_prepare(query_nonspecific_todo_localtime);
- if (NULL == stmt) {
- ERR("_cal_db_util_query_prepare() Failed");
- ERR("[%s]", query_nonspecific_todo_localtime);
+ ret = cal_db_util_query_prepare(query, &stmt);
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_db_util_query_prepare() Fail(%d)", ret);
+ SECURE("query[%s]", query);
return;
+ /* LCOV_EXCL_STOP */
}
- while (CAL_DB_ROW == _cal_db_util_stmt_step(stmt)) {
+ while (CAL_SQLITE_ROW == cal_db_util_stmt_step(stmt)) {
struct _alarm_data_s *ad = calloc(1, sizeof(struct _alarm_data_s));
+ if (NULL == ad) {
+ /* LCOV_EXCL_START */
+ ERR("calloc() Fail");
+ sqlite3_finalize(stmt);
+ return;
+ /* LCOV_EXCL_STOP */
+ }
- int index = 0;
- ad->event_id = sqlite3_column_int(stmt, index++);
- ad->unit = sqlite3_column_int(stmt, index++);
- ad->tick = sqlite3_column_int(stmt, index++);
- ad->type = sqlite3_column_int(stmt, index++);
- ad->time = (long long int)sqlite3_column_int64(stmt, index++);
- snprintf(ad->datetime, sizeof(ad->datetime), "%s", (const char *)sqlite3_column_text(stmt, index++));
+ ad->event_id = sqlite3_column_int(stmt, 0);
+ ad->unit = sqlite3_column_int(stmt, 1);
+ ad->tick = sqlite3_column_int(stmt, 2);
+ ad->type = sqlite3_column_int(stmt, 3);
+ ad->time = (long long int)sqlite3_column_int64(stmt, 4);
+ snprintf(ad->datetime, sizeof(ad->datetime), "%s", (const char *)sqlite3_column_text(stmt, 5));
*l = g_list_append(*l, ad);
DBG("found id(%d) unit(%d) tick(%d) type(%d) time(%lld) [%s]",
ad->event_id, ad->unit, ad->tick, ad->type, ad->time, ad->datetime);
st.tm_hour = h;
st.tm_min = n;
st.tm_sec = s;
- ad->alert_utime = (long long int)mktime(&st) - (ad->tick * ad->unit);
+ st.tm_isdst = cal_time_is_dst_savings();
+ ad->alert_utime = (long long int)_make_time(&st) - (ad->tick * ad->unit);
if (false == get_all) break;
}
sqlite3_finalize(stmt);
}
-static int __cal_server_alarm_get_alert_list(time_t utime, GList **list)
+static void _cal_server_alarm_get_latest(time_t utime, bool get_all, GList **out_l)
{
- ENTER();
- retvm_if (NULL == list, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter: list is NULL");
+ int ret = 0;
+ CAL_FN_CALL();
+ RET_IF(NULL == out_l);
tzset();
struct tm st_local = {0};
localtime_r(&utime, &st_local);
- char datetime[32] = {0};
- snprintf(datetime, sizeof(datetime), CAL_FORMAT_LOCAL_DATETIME,
+
+ char datetime[CAL_STR_SHORT_LEN32] = {0};
+ ret = snprintf(datetime, sizeof(datetime), CAL_FORMAT_LOCAL_DATETIME,
st_local.tm_year +1900, st_local.tm_mon + 1, st_local.tm_mday,
st_local.tm_hour, st_local.tm_min, st_local.tm_sec);
+
+ if(ret < 0){
+ WARN("datetime is truncated (%s)",datetime);
+ }
+
DBG("get alert to register with given time (%ld) datetime[%s]", utime, datetime);
GList *l = NULL;
- __cal_server_alarm_get_upcoming_specific_utime(utime, true, &l);
- __cal_server_alarm_get_upcoming_nonspecific_event_utime(utime, true, &l);
- __cal_server_alarm_get_upcoming_nonspecific_todo_utime(utime, true, &l);
+ _cal_server_alarm_get_upcoming_specific_utime(utime, get_all, &l);
+ _cal_server_alarm_get_upcoming_nonspecific_event_utime(utime, get_all, &l);
+ _cal_server_alarm_get_upcoming_nonspecific_todo_utime(utime, get_all, &l);
- __cal_server_alarm_get_upcoming_specific_localtime(datetime, true, &l);
- __cal_server_alarm_get_upcoming_nonspecific_event_localtime(datetime, true, &l);
- __cal_server_alarm_get_upcoming_nonspecific_todo_localtime(datetime, true, &l);
+ _cal_server_alarm_get_upcoming_specific_localtime(datetime, get_all, &l);
+ _cal_server_alarm_get_upcoming_nonspecific_event_localtime(datetime, get_all, &l);
+ _cal_server_alarm_get_upcoming_nonspecific_todo_localtime(datetime, get_all, &l);
- *list = l;
-
- return CALENDAR_ERROR_NONE;
+ *out_l = l;
}
-static gint __cal_server_alarm_sort_cb(gconstpointer a, gconstpointer b)
+static gint _cal_server_alarm_sort_cb(gconstpointer a, gconstpointer b)
{
struct _alarm_data_s *p1 = (struct _alarm_data_s *)a;
struct _alarm_data_s *p2 = (struct _alarm_data_s *)b;
- DBG("%lld) > (%lld)",p1->alert_utime, p2->alert_utime);
+ DBG("%lld) > (%lld)", p1->alert_utime, p2->alert_utime);
- return p1->alert_utime > p2->alert_utime ? 1 : -1;
+ return p1->alert_utime < p2->alert_utime ? -1 : 1;
}
-static GFunc __cal_server_alarm_print_cb(gpointer data, gpointer user_data)
+static GFunc _cal_server_alarm_print_cb(gpointer data, gpointer user_data)
{
struct _alarm_data_s *ad = (struct _alarm_data_s *)data;
- DBG("id(%d) unit(%d) tick(%d) type(%d) time(%lld) datetime[%s]",
- ad->event_id, ad->unit, ad->tick, ad->type, ad->time, ad->datetime);
+ DBG("id(%d) unit(%d) tick(%d) type(%d) time(%lld) datetime[%s] alert_utime[%lld]",
+ ad->event_id, ad->unit, ad->tick, ad->type, ad->time, ad->datetime, ad->alert_utime);
return 0;
}
-static int __cal_server_alarm_register(GList *alarm_list)
+static int _cal_server_alarm_register(GList *alarm_list)
{
- ENTER();
- retvm_if (NULL == alarm_list, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter: alarm list is NULL");
+ CAL_FN_CALL();
+ RETV_IF(NULL == alarm_list, CALENDAR_ERROR_INVALID_PARAMETER);
int ret = CALENDAR_ERROR_NONE;
GList *l = g_list_first(alarm_list);
+ RETV_IF(NULL == l, CALENDAR_ERROR_INVALID_PARAMETER);
+
struct _alarm_data_s *ad = (struct _alarm_data_s *)l->data;
- retvm_if (NULL == ad, CALENDAR_ERROR_DB_FAILED, "No data");
+ RETVM_IF(NULL == ad, CALENDAR_ERROR_DB_FAILED, "No data");
- // clear all alarm which set by mine.
- ret = alarmmgr_enum_alarm_ids(__cal_server_alarm_clear_all_cb, NULL);
- if (ret != ALARMMGR_RESULT_SUCCESS)
- {
- ERR("alarmmgr_enum_alarm_ids() failed");
+ /* clear all alarm which set by mine. */
+ ret = alarmmgr_enum_alarm_ids(_cal_server_alarm_clear_all_cb, NULL);
+ if (ret != ALARMMGR_RESULT_SUCCESS) {
+ /* LCOV_EXCL_START */
+ ERR("alarmmgr_enum_alarm_ids() Fail");
return ret;
+ /* LCOV_EXCL_STOP */
}
time_t mod_time = (time_t)ad->alert_utime;
alarm_entry_t *alarm_info = NULL;
alarm_info = alarmmgr_create_alarm();
- if (NULL == alarm_info)
- {
+ if (NULL == alarm_info) {
+ /* LCOV_EXCL_START */
ERR("Failed to create alarm");
return CALENDAR_ERROR_DB_FAILED;
+ /* LCOV_EXCL_STOP */
}
tzset();
struct tm st_alarm = {0};
- switch (ad->system_type)
- {
+ switch (ad->system_type) {
case CALENDAR_SYSTEM_EAST_ASIAN_LUNISOLAR:
gmtime_r(&mod_time, &st_alarm);
break;
int alarm_id = 0;
ret = alarmmgr_add_alarm_with_localtime(alarm_info, NULL, &alarm_id);
- if (ret < 0)
- {
- ERR("alarmmgr_add_alarm_with_localtime failed (%d)", ret);
+ if (ret < 0) {
+ /* LCOV_EXCL_START */
+ ERR("alarmmgr_add_alarm_with_localtime Fail (%d)", ret);
alarmmgr_free_alarm(alarm_info);
return ret;
+ /* LCOV_EXCL_STOP */
}
DBG("alarmmgr id (%d)", alarm_id);
- __cal_server_alarm_update_alarm_id(alarm_id, ad->event_id, ad->tick, ad->unit);
+ _cal_server_alarm_update_alarm_id(alarm_id, ad->event_id, ad->tick, ad->unit);
alarmmgr_free_alarm(alarm_info);
return CALENDAR_ERROR_NONE;
}
static bool __app_matched_cb(app_control_h app_control, const char *package, void *user_data)
{
- retvm_if (NULL == user_data, true, "Invalid parameter: user_data is NULL");
+ CAL_FN_CALL();
int ret = 0;
+ int i;
+
+ RETV_IF(NULL == user_data, true);
+
char *mime = NULL;
ret = app_control_get_mime(app_control, &mime);
- retvm_if(APP_CONTROL_ERROR_NONE != ret, true, "app_control_get_mime() is failed(%d)", ret);
+ RETVM_IF(APP_CONTROL_ERROR_NONE != ret, true, "app_control_get_mime() Fail(%d)", ret);
const char *reminder_mime = "application/x-tizen.calendar.reminder";
- if (strncmp(mime, reminder_mime, strlen(reminder_mime))) { // not same
+ if (strncmp(mime, reminder_mime, strlen(reminder_mime))) { /* not same */
DBG("get mime[%s] is not [%s]", mime, reminder_mime);
free(mime);
return true;
}
free(mime);
- GList *alarm_list = (GList *)user_data;
+ struct alarm_ud *au = (struct alarm_ud *)user_data;
+ GList *alarm_list = au->alarm_list;
+ if (NULL == alarm_list) {
+ /* LCOV_EXCL_START */
+ ERR("No list");
+ return true;
+ /* LCOV_EXCL_STOP */
+ }
int len = 0;
len = g_list_length(alarm_list);
if (0 == len) {
return true;
}
- app_control_h b = NULL;
- app_control_create(&b);
- app_control_set_operation(b, APP_CONTROL_OPERATION_DEFAULT);
- app_control_set_app_id(b, package);
+ app_control_h ac = NULL;
+ ret = app_control_create(&ac);
+ if (APP_CONTROL_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("app_control_create() Fail(%d)", ret);
+ return true;
+ /* LCOV_EXCL_STOP */
+ }
+ ret = app_control_set_operation(ac, APP_CONTROL_OPERATION_DEFAULT);
+ if (APP_CONTROL_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("app_control_create() Fail(%d)", ret);
+ app_control_destroy(ac);
+ return true;
+ /* LCOV_EXCL_STOP */
+ }
+ ret = app_control_set_app_id(ac, package);
+ if (APP_CONTROL_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("app_control_set_app_id() Fail(%d)", ret);
+ app_control_destroy(ac);
+ return true;
+ /* LCOV_EXCL_STOP */
+ }
- // data
char **ids = NULL;
ids = calloc(len, sizeof(char *));
if (NULL == ids) {
- ERR("calloc() is failed");
- app_control_destroy(b);
- return CALENDAR_ERROR_DB_FAILED;
+ /* LCOV_EXCL_START */
+ ERR("calloc() Fail");
+ app_control_destroy(ac);
+ return true;
+ /* LCOV_EXCL_STOP */
}
- GList *l = g_list_first(alarm_list);
- int i;
+ GList *cursor = g_list_first(alarm_list);
for (i = 0; i < len; i++) {
- struct _alarm_data_s *ad = (struct _alarm_data_s *)l->data;
+ if (NULL == cursor) {
+ ERR("cursor is NULL");
+ break;
+ }
+ struct _alarm_data_s *ad = (struct _alarm_data_s *)cursor->data;
if (NULL == ad) {
- ERR("No data");
- l = g_list_next(l);
+ WARN("No data");
+ cursor = g_list_next(cursor);
continue;
}
DBG("pkg[%s] time[%lld] tick[%d] unit[%d] record_type[%d]",
package, ad->time, ad->tick, ad->unit, ad->record);
- char buf_event_id[128] = {0};
- char buf_time[128] = {0};
- char buf_tick[128] = {0};
- char buf_unit[128] = {0};
- char buf_record_type[128] = {0};
- snprintf(buf_event_id, sizeof(buf_event_id), "%d", ad->event_id);
- snprintf(buf_time, sizeof(buf_time), "%lld", ad->time);
- snprintf(buf_tick, sizeof(buf_tick), "%d", ad->tick);
- snprintf(buf_unit, sizeof(buf_unit), "%d", ad->unit);
- snprintf(buf_record_type, sizeof(buf_record_type), "%d", ad->record);
-
- char *p = NULL;
- _cal_server_reminder_add_callback_data(&p, "id", buf_event_id);
- _cal_server_reminder_add_callback_data(&p, "time", buf_time);
- _cal_server_reminder_add_callback_data(&p, "tick", buf_tick);
- _cal_server_reminder_add_callback_data(&p, "unit", buf_unit);
- _cal_server_reminder_add_callback_data(&p, "type", buf_record_type);
-
- app_control_add_extra_data(b, buf_event_id, p); // key: id, value: id=4&time=123123&..
- DBG("value[%s]", p);
- free(p);
-
- // append ids
- ids[i] = strdup(buf_event_id);
-
- l = g_list_next(l);
+ int slen = 0;
+ char extra[CAL_STR_MIDDLE_LEN] = {0};
+ slen = snprintf(extra, sizeof(extra), "%s=%d", "id", ad->event_id);
+ slen += snprintf(extra+slen, sizeof(extra)-slen, "&%s=%lld", "time", ad->time);
+ slen += snprintf(extra+slen, sizeof(extra)-slen, "&%s=%d", "tick", ad->tick);
+ slen += snprintf(extra+slen, sizeof(extra)-slen, "&%s=%d", "unit", ad->unit);
+ slen += snprintf(extra+slen, sizeof(extra)-slen, "&%s=%d", "type", ad->record);
+
+ /*
+ * key: id, value: id=4&time=123123&..
+ */
+ char buf_id[CAL_STR_MIDDLE_LEN] = {0};
+ snprintf(buf_id, sizeof(buf_id), "%d", ad->event_id);
+ app_control_add_extra_data(ac, buf_id, extra);
+ DBG("value[%s] id[%s]", extra, buf_id);
+
+ /* append ids */
+ ids[i] = strdup(buf_id);
+
+ cursor = g_list_next(cursor);
}
- app_control_add_extra_data_array(b, "ids", (const char **)ids, len);
- app_control_send_launch_request (b, NULL, NULL);
- app_control_destroy(b);
+ app_control_add_extra_data_array(ac, "ids", (const char **)ids, len);
+ app_control_send_launch_request(ac, NULL, NULL);
+ app_control_destroy(ac);
- // free ids
for (i = 0; i < len; i++) {
free(ids[i]);
ids[i] = NULL;
return true;
}
-static void __cal_server_alarm_noti_with_control(GList *alarm_list)
+static void _cal_server_alarm_noti_with_control(GList *alarm_list)
{
- retm_if(NULL == alarm_list, "No alarm list");
+ CAL_FN_CALL();
+
+ int ret = 0;
+ RETM_IF(NULL == alarm_list, "No alarm list");
app_control_h app_control = NULL;
- app_control_create(&app_control);
- app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW);
- app_control_set_mime(app_control, "application/x-tizen.calendar.reminder");
- app_control_foreach_app_matched(app_control, __app_matched_cb, alarm_list);
+ ret = app_control_create(&app_control);
+ if (APP_CONTROL_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("app_control_create() Fail(%d)", ret);
+ return;
+ /* LCOV_EXCL_STOP */
+ }
+ ret = app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW);
+ if (APP_CONTROL_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("app_control_set_operation() Fail(%d)", ret);
+ app_control_destroy(app_control);
+ return;
+ /* LCOV_EXCL_STOP */
+ }
+ ret = app_control_set_mime(app_control, "application/x-tizen.calendar.reminder");
+ if (APP_CONTROL_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("app_control_set_mime() Fail(%d)", ret);
+ app_control_destroy(app_control);
+ return;
+ /* LCOV_EXCL_STOP */
+ }
+
+ struct alarm_ud *au = calloc(1, sizeof(struct alarm_ud));
+ if (NULL == au) {
+ /* LCOV_EXCL_START */
+ ERR("calloc() Fail");
+ app_control_destroy(app_control);
+ return;
+ /* LCOV_EXCL_STOP */
+ }
+ au->alarm_list = alarm_list;
+ ret = app_control_foreach_app_matched(app_control, __app_matched_cb, au);
+ if (APP_CONTROL_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("app_control_foreach_app_matched() Fail(%d)", ret);
+ free(au);
+ app_control_destroy(app_control);
+ return;
+ /* LCOV_EXCL_STOP */
+ }
+ free(au);
app_control_destroy(app_control);
}
-static void __cal_server_alarm_noti_with_callback(GList *alarm_list)
+static void _cal_server_alarm_noti_with_callback(GList *alarm_list)
{
- retm_if(NULL == alarm_list, "No alarm list");
+ RETM_IF(NULL == alarm_list, "No alarm list");
GList *l = g_list_first(alarm_list);
while (l) {
struct _alarm_data_s *ad = (struct _alarm_data_s *)l->data;
if (NULL == ad) {
- ERR("No data");
+ WARN("No data");
l = g_list_next(l);
continue;
}
DBG("callback time[%lld] tick[%d] unit[%d] record_type[%d]",
ad->time, ad->tick, ad->unit, ad->record);
- char buf_event_id[128] = {0};
- char buf_time[128] = {0};
- char buf_tick[128] = {0};
- char buf_unit[128] = {0};
- char buf_record_type[128] = {0};
- snprintf(buf_event_id, sizeof(buf_event_id), "%d", ad->event_id);
- snprintf(buf_time, sizeof(buf_time), "%lld", ad->time);
- snprintf(buf_tick, sizeof(buf_tick), "%d", ad->tick);
- snprintf(buf_unit, sizeof(buf_unit), "%d", ad->unit);
- snprintf(buf_record_type, sizeof(buf_record_type), "%d", ad->record);
-
- char *p = NULL;
- _cal_server_reminder_add_callback_data(&p, "id", buf_event_id);
- _cal_server_reminder_add_callback_data(&p, "time", buf_time);
- _cal_server_reminder_add_callback_data(&p, "tick", buf_tick);
- _cal_server_reminder_add_callback_data(&p, "unit", buf_unit);
- _cal_server_reminder_add_callback_data(&p, "type", buf_record_type);
- _cal_server_reminder_publish(p);
- free(p);
+ int len = 0;
+ char extra[CAL_STR_MIDDLE_LEN] = {0};
+ len = snprintf(extra, sizeof(extra), "%s=%d", "id", ad->event_id);
+ len += snprintf(extra+len, sizeof(extra)-len, "&%s=%lld", "time", ad->time);
+ len += snprintf(extra+len, sizeof(extra)-len, "&%s=%d", "tick", ad->tick);
+ len += snprintf(extra+len, sizeof(extra)-len, "&%s=%d", "unit", ad->unit);
+ len += snprintf(extra+len, sizeof(extra)-len, "&%s=%d", "type", ad->record);
+ cal_dbus_publish_reminder(len, extra);
l = g_list_next(l);
}
}
-static int __cal_server_alarm_register_with_alarmmgr(time_t utime)
+static void cal_server_alarm_register_next_alarm(time_t utime)
{
- tzset();
- struct tm st_local = {0};
- localtime_r(&utime, &st_local);
- char datetime[32] = {0};
- snprintf(datetime, sizeof(datetime), CAL_FORMAT_LOCAL_DATETIME,
- st_local.tm_year +1900, st_local.tm_mon + 1, st_local.tm_mday,
- st_local.tm_hour, st_local.tm_min, st_local.tm_sec);
- DBG("search alarm to register with given time (%ld) datetime[%s]", utime, datetime);
+ CAL_FN_CALL();
GList *l = NULL;
+ _cal_server_alarm_get_latest(utime, false, &l);
+ if (NULL == l)
+ return;
- __cal_server_alarm_get_upcoming_specific_utime(utime, false, &l);
- __cal_server_alarm_get_upcoming_nonspecific_event_utime(utime, false, &l);
- __cal_server_alarm_get_upcoming_nonspecific_todo_utime(utime, false, &l);
-
- __cal_server_alarm_get_upcoming_specific_localtime(datetime, false, &l);
- __cal_server_alarm_get_upcoming_nonspecific_event_localtime(datetime, false, &l);
- __cal_server_alarm_get_upcoming_nonspecific_todo_localtime(datetime, false, &l);
+ l = g_list_sort(l, _cal_server_alarm_sort_cb);
+ g_list_foreach(l, (GFunc)_cal_server_alarm_print_cb, NULL);
+ _cal_server_alarm_register(l);
- if (NULL == l) {
- DBG("No alarm list");
- return CALENDAR_ERROR_NONE;
- }
+ g_list_free_full(l, free);
+}
- l = g_list_sort(l, __cal_server_alarm_sort_cb);
- g_list_foreach(l, (GFunc)__cal_server_alarm_print_cb, NULL);
- __cal_server_alarm_register(l);
+static void cal_server_alarm_alert(time_t tt_alert)
+{
+ GList *l = NULL;
+ _cal_server_alarm_get_latest(tt_alert, true, &l);
+ if (NULL == l)
+ return;
- // free list
- l = g_list_first(l);
- while(l) {
- struct _alarm_data_s *ad = (struct _alarm_data_s *)l->data;
- free(ad);
- l = g_list_next(l);
- }
- g_list_free(l);
- return CALENDAR_ERROR_NONE;
+ _cal_server_alarm_noti_with_callback(l);
+ _cal_server_alarm_noti_with_control(l);
+ g_list_free_full(l, free);
}
static int _alert_cb(alarm_id_t alarm_id, void *data)
{
- ENTER();
- GList *l = NULL;
+ CAL_FN_CALL();
+ DBG("alarm_id (%d)", (int)alarm_id);
- DBG("alarm_id (%ld)", alarm_id);
time_t tt_alert = 0;
- __cal_server_alarm_get_alert_time(alarm_id, &tt_alert);
- __cal_server_alarm_get_alert_list(tt_alert, &l);
- __cal_server_alarm_unset_alerted_alarmmgr_id(alarm_id);
- __cal_server_alarm_noti_with_callback(l);
- __cal_server_alarm_noti_with_control(l);
- __cal_server_alarm_register_with_alarmmgr(tt_alert);
- LEAVE();
+ cal_server_alarm_get_alert_time(alarm_id, &tt_alert);
+ cal_server_alarm_alert(tt_alert);
+ cal_server_alarm_unset_alerted_alarmmgr_id(alarm_id);
+ cal_server_alarm_start();
return 0;
}
-////////////////////////////////////////////////////////////////////
-static void __cal_server_alarm_timechange_cb(keynode_t *node, void *data)
+static void _timechanged_cb(keynode_t *node, void *data)
{
- ENTER();
- int t = 0;
- int ret;
-
- if (node) {
- t = vconf_keynode_get_int(node);
- }
- else
- {
- ret = vconf_get_int(VCONFKEY_SYSTEM_TIMECHANGE, &t);
- warn_if(0 < ret, "vconf_get_int() Failed");
- }
-
- if (t < 0)
- {
- __cal_server_alarm_register_with_alarmmgr(time(NULL));
- }
- else
- {
- DBG("system changed time(%ld)", t);
- __cal_server_alarm_register_with_alarmmgr((time_t)t);
- }
+ cal_server_alarm_alert(time(NULL));
+ cal_server_alarm_start();
}
-void __cal_server_alarm_set_timechange(void)
+static void _cal_server_alarm_set_timechange(void)
{
- vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED,
- __cal_server_alarm_timechange_cb, NULL);
+ vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, _timechanged_cb, NULL);
+ vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT, _timechanged_cb, NULL);
+ vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE, _timechanged_cb, NULL);
+ vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, _timechanged_cb, NULL);
+}
- vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT,
- __cal_server_alarm_timechange_cb, NULL);
- vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT,
- __cal_server_alarm_timechange_cb, NULL);
- vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE,
- __cal_server_alarm_timechange_cb, NULL);
+static void _cal_server_alarm_unset_timechange(void)
+{
+ vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, _timechanged_cb);
+ vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_GMT, _timechanged_cb);
+ vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_ZONE, _timechanged_cb);
+ vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, _timechanged_cb);
}
-static void __changed_cb(const char* view_uri, void* data)
+static void _changed_cb(const char* view_uri, void* data)
{
- ENTER();
- __cal_server_alarm_register_with_alarmmgr(time(NULL));
+ DBG("Receive alarm change signal");
+ cal_server_alarm_start();
}
-static int __cal_server_alarm_set_inotify(calendar_db_changed_cb callback)
+static int _cal_server_alarm_set_inotify(calendar_db_changed_cb callback)
{
- _cal_inotify_subscribe(CAL_NOTI_TYPE_EVENT, CAL_NOTI_EVENT_CHANGED, callback, NULL);
- _cal_inotify_subscribe(CAL_NOTI_TYPE_TODO, CAL_NOTI_TODO_CHANGED, callback, NULL);
+ cal_inotify_subscribe(CAL_NOTI_TYPE_EVENT, CAL_NOTI_FILE_EVENT, callback, NULL);
+ cal_inotify_subscribe(CAL_NOTI_TYPE_TODO, CAL_NOTI_FILE_TODO, callback, NULL);
return 0;
}
-int _cal_server_alarm(void)
+static void _cal_server_alarm_unset_inotify(calendar_db_changed_cb callback)
{
- ENTER();
- int ret;
+ cal_inotify_unsubscribe(CAL_NOTI_FILE_EVENT, callback, NULL);
+ cal_inotify_unsubscribe(CAL_NOTI_FILE_TODO, callback, NULL);
+}
- __cal_server_alarm_set_timechange();
- __cal_server_alarm_set_inotify(__changed_cb);
+static int cal_server_alarm_init(void)
+{
+ int ret = 0;
- ret = alarmmgr_init("calendar-service");
- retvm_if(ret < 0, ret, "alarmmgr_init() failed");
+ _cal_server_alarm_set_timechange();
+ _cal_server_alarm_set_inotify(_changed_cb);
ret = alarmmgr_set_cb(_alert_cb, NULL);
- retvm_if(ret < 0, ret, "alarmmgr_set_cb() failed");
+ if (ret < 0) {
+ /* LCOV_EXCL_START */
+ ERR("alarmmgr_set_cb() Fail(%d)", ret);
+ return CALENDAR_ERROR_SYSTEM;
+ /* LCOV_EXCL_STOP */
+ }
- __cal_server_alarm_register_with_alarmmgr(time(NULL));
+ ret = alarmmgr_init("calendar-service");
+ if (ret < 0) {
+ /* LCOV_EXCL_START */
+ ERR("alarmmgr_init() Fail(%d)", ret);
+ return CALENDAR_ERROR_SYSTEM;
+ /* LCOV_EXCL_STOP */
+ }
return CALENDAR_ERROR_NONE;
}
+static gpointer _cal_server_alarm_main(gpointer user_data)
+{
+ DBG("thread alarm: start");
+
+ int ret = 0;
+ bool is_initialized = false;
+
+ while (1) {
+ g_mutex_lock(&_cal_server_alarm_mutex);
+ /*
+ * While syncing with contacts,
+ * because calendar-service could be stopped by on-demand,
+ * holding on-demand is needed.
+ */
+ cal_server_ondemand_hold();
+
+ do {
+ if (false == is_initialized) {
+ ret = cal_server_alarm_init();
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_server_alarm_init() Fail(%d)", ret);
+ break;
+ /* LCOV_EXCL_STOP */
+ }
+ DBG("thread alarm: init");
+ is_initialized = true;
+ }
+
+ ret = cal_connect();
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_connect() Fail(%d)", ret);
+ break;
+ /* LCOV_EXCL_STOP */
+ }
+
+ cal_server_alarm_register_next_alarm(time(NULL));
+ cal_disconnect();
+
+ } while (0);
+
+ cal_server_ondemand_release();
+ cal_server_ondemand_start();
+
+ DBG("thread alarm: wait");
+ while (false == signal_called)
+ g_cond_wait(&_cal_server_alarm_cond, &_cal_server_alarm_mutex);
+ signal_called = false;
+ g_mutex_unlock(&_cal_server_alarm_mutex);
+
+ if (server_killed)
+ break;
+ }
+ DBG("thread alarm: end");
+ g_thread_exit(NULL);
+
+ return NULL;
+}
+
+void cal_server_alarm_send_signal(void)
+{
+ g_mutex_lock(&_cal_server_alarm_mutex);
+ signal_called = true;
+ g_cond_signal(&_cal_server_alarm_cond);
+ g_mutex_unlock(&_cal_server_alarm_mutex);
+}
+
+void cal_server_alarm_start(void)
+{
+ CAL_FN_CALL();
+
+ if (NULL == _cal_server_alarm_thread) {
+ g_mutex_init(&_cal_server_alarm_mutex);
+ g_cond_init(&_cal_server_alarm_cond);
+ _cal_server_alarm_thread = g_thread_new(CAL_SERVER_ALARM_THREAD_NAME,
+ _cal_server_alarm_main, NULL);
+ }
+ cal_server_alarm_send_signal();
+}
+
+static void cal_server_alarm_deinit(void)
+{
+ alarmmgr_fini();
+ _cal_server_alarm_unset_inotify(_changed_cb);
+ _cal_server_alarm_unset_timechange();
+}
+
+void cal_server_alarm_end(void)
+{
+ CAL_FN_CALL();
+
+ server_killed = true;
+
+ cal_server_alarm_deinit();
+ cal_server_alarm_send_signal();
+
+ g_cond_clear(&_cal_server_alarm_cond);
+ g_thread_join(_cal_server_alarm_thread);
+ g_thread_unref(_cal_server_alarm_thread);
+ _cal_server_alarm_thread = NULL;
+}