#include "cal_access_control.h"
#include "cal_server_contacts.h"
-#define CAL_SERVER_CONTACTS_SYNC_THREAD_NAME "cal_server_contacts_sync"
+#define CAL_SERVER_CONTACTS_THREAD_NAME "cal_server_contacts"
#define BULK_MAX_COUNT 100
#define SYNC_USLEEP 500
-GThread *_cal_server_contacts_sync_thread = NULL;
-GCond _cal_server_contacts_sync_cond;
-GMutex _cal_server_contacts_sync_mutex;
+GThread *_cal_server_contacts_thread = NULL;
+GCond _cal_server_contacts_cond;
+GMutex _cal_server_contacts_mutex;
static bool server_killed = false;
static int _cal_server_contacts_set_new_event(int id, char *label, int calendar_type,
*out_count = count;
}
-static int _cal_server_contacts_sync(void)
+static int _cal_server_contacts(void)
{
CAL_START_TIMESTAMP
calendar_query_destroy(query);
}
-static gpointer _cal_server_contacts_sync_main(gpointer user_data)
+static void _changed_cb(const char* view_uri, void *user_data)
+{
+ cal_server_contacts_start();
+}
+
+static int cal_server_contacts_init(void)
+{
+ int ret = 0;
+
+ ret = contacts_connect();
+ if (CONTACTS_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("contacts_connect() Fail(%d)", ret);
+ return ret;
+ /* LCOV_EXCL_STOP */
+ }
+
+ ret = contacts_db_add_changed_cb(_contacts_event._uri, _changed_cb, NULL);
+ if (CONTACTS_ERROR_NONE != ret)
+ WARN("contacts_db_add_changed_cb() Fail(%d)", ret);
+
+ ret = contacts_db_add_changed_cb(_contacts_name._uri, _changed_cb, NULL);
+ if (CONTACTS_ERROR_NONE != ret)
+ WARN("contacts_db_add_changed_cb() Fail(%d)", ret);
+
+ return CALENDAR_ERROR_NONE;
+}
+
+static gpointer _cal_server_contacts_main(gpointer user_data)
{
- int ret = CALENDAR_ERROR_NONE;
+ int ret = 0;
+ bool is_init_contacts = false;
while (1) {
/*
*/
cal_server_ondemand_hold();
- ret = cal_connect();
- if (CALENDAR_ERROR_NONE != ret) {
- /* LCOV_EXCL_START */
- ERR("cal_connect() Fail(%d)", ret);
- cal_server_ondemand_release();
- cal_server_ondemand_start();
- break;
- /* LCOV_EXCL_STOP */
- }
-
- cal_access_control_set_client_info(NULL, "calendar-service");
+ do {
+ if (false == is_init_contacts) {
+ ret = cal_server_contacts_init();
+ if (CONTACTS_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_server_contacts_init() Fail(%d)", ret);
+ break;
+ /* LCOV_EXCL_STOP */
+ }
+ DBG("init contacts");
+ is_init_contacts = true;
+ }
- while (1) {
- if (CALENDAR_ERROR_NONE != _cal_server_contacts_sync()) {
- DBG("end");
+ ret = cal_connect();
+ if (CALENDAR_ERROR_NONE != ret) {
+ /* LCOV_EXCL_START */
+ ERR("cal_connect() Fail(%d)", ret);
break;
+ /* LCOV_EXCL_STOP */
}
- }
- cal_access_control_unset_client_info();
- cal_disconnect();
- g_mutex_lock(&_cal_server_contacts_sync_mutex);
+ cal_access_control_set_client_info(NULL, "calendar-service");
+
+ while (1) {
+ if (CALENDAR_ERROR_NONE != _cal_server_contacts()) {
+ DBG("end");
+ break;
+ }
+ }
+ cal_access_control_unset_client_info();
+ cal_disconnect();
+ } while (0);
+
+ g_mutex_lock(&_cal_server_contacts_mutex);
DBG("wait");
cal_server_ondemand_release();
cal_server_ondemand_start();
- g_cond_wait(&_cal_server_contacts_sync_cond, &_cal_server_contacts_sync_mutex);
- g_mutex_unlock(&_cal_server_contacts_sync_mutex);
+ g_cond_wait(&_cal_server_contacts_cond, &_cal_server_contacts_mutex);
+ g_mutex_unlock(&_cal_server_contacts_mutex);
if (server_killed)
break;
}
return NULL;
}
-static void cal_server_contacts_sync_start(void)
+void cal_server_contacts_start(void)
{
CAL_FN_CALL();
if (server_killed)
return;
- if (NULL == _cal_server_contacts_sync_thread) {
- g_mutex_init(&_cal_server_contacts_sync_mutex);
- g_cond_init(&_cal_server_contacts_sync_cond);
- _cal_server_contacts_sync_thread = g_thread_new(CAL_SERVER_CONTACTS_SYNC_THREAD_NAME,
- _cal_server_contacts_sync_main, NULL);
+ if (NULL == _cal_server_contacts_thread) {
+ g_mutex_init(&_cal_server_contacts_mutex);
+ g_cond_init(&_cal_server_contacts_cond);
+ _cal_server_contacts_thread = g_thread_new(CAL_SERVER_CONTACTS_THREAD_NAME,
+ _cal_server_contacts_main, NULL);
}
/* don't use mutex. */
- g_cond_signal(&_cal_server_contacts_sync_cond);
+ g_cond_signal(&_cal_server_contacts_cond);
}
-static void _changed_cb(const char* view_uri, void *user_data)
+static void cal_server_contacts_deinit(void)
{
- cal_server_contacts_sync_start();
-}
-
-int cal_server_contacts_init(void)
-{
- int ret = 0;
-
- ret = contacts_connect();
- if (CONTACTS_ERROR_NONE != ret) {
- /* LCOV_EXCL_START */
- ERR("contacts_connect() Fail(%d)", ret);
- return ret;
- /* LCOV_EXCL_STOP */
- }
-
- ret = contacts_db_add_changed_cb(_contacts_event._uri, _changed_cb, NULL);
- if (CONTACTS_ERROR_NONE != ret)
- WARN("contacts_db_add_changed_cb() Fail(%d)", ret);
-
- ret = contacts_db_add_changed_cb(_contacts_name._uri, _changed_cb, NULL);
- if (CONTACTS_ERROR_NONE != ret)
- WARN("contacts_db_add_changed_cb() Fail(%d)", ret);
-
- cal_server_contacts_sync_start();
+ contacts_db_remove_changed_cb(_contacts_event._uri, _changed_cb, NULL);
+ contacts_db_remove_changed_cb(_contacts_name._uri, _changed_cb, NULL);
- return CALENDAR_ERROR_NONE;
+ contacts_disconnect();
}
void cal_server_contacts_end(void)
{
server_killed = true;
- /* don't use mutex. */
- g_cond_signal(&_cal_server_contacts_sync_cond);
- g_thread_join(_cal_server_contacts_sync_thread);
- g_thread_unref(_cal_server_contacts_sync_thread);
-}
-
-void cal_server_contacts_deinit(void)
-{
- cal_server_contacts_end();
- contacts_db_remove_changed_cb(_contacts_event._uri, _changed_cb, NULL);
- contacts_db_remove_changed_cb(_contacts_name._uri, _changed_cb, NULL);
+ cal_server_contacts_deinit();
- contacts_disconnect();
+ /* don't use mutex. */
+ g_cond_signal(&_cal_server_contacts_cond);
+ g_thread_join(_cal_server_contacts_thread);
+ g_thread_unref(_cal_server_contacts_thread);
}
+