From 6d5a5230487644957ac52c689af2395c3267338a Mon Sep 17 00:00:00 2001 From: Yeongil Jang Date: Fri, 21 Sep 2012 00:19:43 +0900 Subject: [PATCH] 2.0_alpha release commit --- CMakeLists.txt | 6 +- TC/_export_env.sh | 8 + TC/_export_target_env.sh | 7 + TC/build.sh | 16 + TC/clean.sh | 11 + TC/config.default | 2 + TC/execute.sh | 17 + TC/testcase/Makefile | 25 + TC/testcase/tslist | 5 + TC/testcase/utc_social_calendar.c | 839 +++++ TC/testcase/utc_social_calendar_attendee.c | 292 ++ TC/testcase/utc_social_calendar_event.c | 2459 +++++++++++++++ TC/testcase/utc_social_calendar_todo.c | 1385 ++++++++ TC/tet_scen | 7 + TC/tetbuild.cfg | 5 + TC/tetclean.cfg | 5 + TC/tetexec.cfg | 5 + debian/capi-social-calendar-dev.install | 0 debian/capi-social-calendar-dev.postinst | 0 debian/capi-social-calendar.install | 0 debian/capi-social-calendar.postinst | 0 debian/changelog | 350 ++- debian/rules | 3 +- include/calendar.h | 1892 +++++++---- include/calendar_attendee.h | 61 +- include/calendar_private.h | 30 +- include/calendar_types.h | 323 +- packaging/capi-social-calendar.manifest | 5 - packaging/capi-social-calendar.spec | 14 +- src/calendar.c | 4701 ++++++++++++++++++---------- src/calendar_private.c | 355 ++- test/CMakeLists.txt | 55 + test/calendar_test.c | 464 +++ 33 files changed, 10841 insertions(+), 2506 deletions(-) create mode 100755 TC/_export_env.sh create mode 100755 TC/_export_target_env.sh create mode 100755 TC/build.sh create mode 100755 TC/clean.sh create mode 100755 TC/config.default create mode 100755 TC/execute.sh create mode 100755 TC/testcase/Makefile create mode 100755 TC/testcase/tslist create mode 100755 TC/testcase/utc_social_calendar.c create mode 100755 TC/testcase/utc_social_calendar_attendee.c create mode 100755 TC/testcase/utc_social_calendar_event.c create mode 100755 TC/testcase/utc_social_calendar_todo.c create mode 100755 TC/tet_scen create mode 100755 TC/tetbuild.cfg create mode 100755 TC/tetclean.cfg create mode 100755 TC/tetexec.cfg mode change 100755 => 100644 debian/capi-social-calendar-dev.install mode change 100755 => 100644 debian/capi-social-calendar-dev.postinst mode change 100755 => 100644 debian/capi-social-calendar.install mode change 100755 => 100644 debian/capi-social-calendar.postinst mode change 100755 => 100644 include/calendar_private.h delete mode 100644 packaging/capi-social-calendar.manifest mode change 100644 => 100755 packaging/capi-social-calendar.spec create mode 100755 test/CMakeLists.txt create mode 100755 test/calendar_test.c diff --git a/CMakeLists.txt b/CMakeLists.txt index a852fc9..3d4b065 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ FOREACH(flag ${${fw_name}_CFLAGS}) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") ENDFOREACH(flag) -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall -Werror") +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall") SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") IF("${ARCH}" STREQUAL "arm") @@ -67,10 +67,10 @@ IF(UNIX) ADD_CUSTOM_TARGET (distclean @echo cleaning for source distribution) ADD_CUSTOM_COMMAND( - DEPENDS clean + DEPENDS clean COMMENT "distribution clean" COMMAND find - ARGS . + ARGS ${CMAKE_CURRENT_SOURCE_DIR} -not -name config.cmake -and \( -name tester.c -or -name Testing -or diff --git a/TC/_export_env.sh b/TC/_export_env.sh new file mode 100755 index 0000000..72a11ec --- /dev/null +++ b/TC/_export_env.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +. ./config +export TET_INSTALL_PATH=$TET_INSTALL_HOST_PATH # tetware root path +export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target # tetware target path +export PATH=$TET_TARGET_PATH/bin:$PATH +export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH +export TET_ROOT=$TET_TARGET_PATH diff --git a/TC/_export_target_env.sh b/TC/_export_target_env.sh new file mode 100755 index 0000000..5ddaa53 --- /dev/null +++ b/TC/_export_target_env.sh @@ -0,0 +1,7 @@ +#!/bin/sh +. ./config +export TET_INSTALL_PATH=$TET_INSTALL_TARGET_PATH # path to path +export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target +export PATH=$TET_TARGET_PATH/bin:$PATH +export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH +export TET_ROOT=$TET_TARGET_PATH diff --git a/TC/build.sh b/TC/build.sh new file mode 100755 index 0000000..6be8d56 --- /dev/null +++ b/TC/build.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +. ./_export_env.sh # setting environment variables + +export TET_SUITE_ROOT=`pwd` +FILE_NAME_EXTENSION=`date +%s` + +RESULT_DIR=results +HTML_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.html +JOURNAL_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.journal + +mkdir -p $RESULT_DIR + +tcc -c -p ./ +tcc -b -j $JOURNAL_RESULT -p ./ +grw -c 7 -f chtml -o $HTML_RESULT $JOURNAL_RESULT \ No newline at end of file diff --git a/TC/clean.sh b/TC/clean.sh new file mode 100755 index 0000000..29743e0 --- /dev/null +++ b/TC/clean.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +. ./_export_env.sh # setting environment variables + +export TET_SUITE_ROOT=`pwd` +RESULT_DIR=results + +tcc -c -p ./ # executing tcc, with clean option (-c) +rm -r $RESULT_DIR +rm -r tet_tmp_dir +rm testcase/tet_captured diff --git a/TC/config.default b/TC/config.default new file mode 100755 index 0000000..04684f0 --- /dev/null +++ b/TC/config.default @@ -0,0 +1,2 @@ +TET_INSTALL_HOST_PATH=/home/rookiejava/dts_tool/TETware +TET_INSTALL_TARGET_PATH=/mnt/nfs/dts_tool/TETware diff --git a/TC/execute.sh b/TC/execute.sh new file mode 100755 index 0000000..215ad6c --- /dev/null +++ b/TC/execute.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +. ./_export_target_env.sh # setting environment variables + +export TET_SUITE_ROOT=`pwd` +FILE_NAME_EXTENSION=`date +%s` + +RESULT_DIR=results +HTML_RESULT=$RESULT_DIR/exec-tar-result-$FILE_NAME_EXTENSION.html +JOURNAL_RESULT=$RESULT_DIR/exec-tar-result-$FILE_NAME_EXTENSION.journal + +mkdir -p $RESULT_DIR + +tcc -e -j $JOURNAL_RESULT -p ./ +#grw -c 3 -f chtml -o $HTML_RESULT $JOURNAL_RESULT +grw -c 7 -f chtml -o $HTML_RESULT $JOURNAL_RESULT + diff --git a/TC/testcase/Makefile b/TC/testcase/Makefile new file mode 100755 index 0000000..f5aa3fb --- /dev/null +++ b/TC/testcase/Makefile @@ -0,0 +1,25 @@ +CC ?= gcc + +C_FILES = $(shell ls *.c) + +PKGS = capi-social-calendar dlog glib-2.0 capi-social-contacts + +LDFLAGS = `pkg-config --libs $(PKGS)` +LDFLAGS += $(TET_ROOT)/lib/tet3/tcm_s.o +LDFLAGS += -L$(TET_ROOT)/lib/tet3 -ltcm_s +LDFLAGS += -L$(TET_ROOT)/lib/tet3 -lapi_s + +CFLAGS = -I. `pkg-config --cflags $(PKGS)` +CFLAGS += -I$(TET_ROOT)/inc/tet3 +CFLAGS += -Wall + +#TARGETS = $(C_FILES:%.c=tc-%) +TCS := $(shell ls -1 *.c | cut -d. -f1) + +all: $(TCS) + +%: %.c + $(CC) -o $@ $< $(CFLAGS) $(LDFLAGS) + +clean: + rm -f $(TCS) diff --git a/TC/testcase/tslist b/TC/testcase/tslist new file mode 100755 index 0000000..1c3dbde --- /dev/null +++ b/TC/testcase/tslist @@ -0,0 +1,5 @@ +/testcase/utc_social_calendar +/testcase/utc_social_calendar_attendee +/testcase/utc_social_calendar_event +/testcase/utc_social_calendar_todo + diff --git a/TC/testcase/utc_social_calendar.c b/TC/testcase/utc_social_calendar.c new file mode 100755 index 0000000..1adb42e --- /dev/null +++ b/TC/testcase/utc_social_calendar.c @@ -0,0 +1,839 @@ +/* + * Copyright (c) 2011 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include +#include + +enum { + POSITIVE_TC_IDX = 0x01, + NEGATIVE_TC_IDX, +}; + +#define API_NAME_CALENDAR_CONNECT "calendar_connect" +#define API_NAME_CALENDAR_DISCONNECT "calendar_disconnect" +#define API_NAME_CALENDAR_ADD_DB_CHANGED_CB "calendar_add_db_changed_cb" +#define API_NAME_CALENDAR_FOREACH_TIMEZONE "calendar_foreach_timezone" +#define API_NAME_CALENDAR_FOREACH_CALENDAR_FROM_DB "calendar_foreach_calendar_book_from_db" +#define API_NAME_CALENDAR_BOOK_CREATE "calendar_book_create" +#define API_NAME_CALENDAR_BOOK_DESTROY "calendar_book_destroy" +#define API_NAME_CALENDAR_BOOK_INSERT_TO_DB "calendar_book_insert_to_db" +#define API_NAME_CALENDAR_BOOK_UPDATE_TO_DB "calendar_book_update_to_db" +#define API_NAME_CALENDAR_BOOK_DELETE_FROM_DB "calendar_book_delete_from_db" +#define API_NAME_CALENDAR_BOOK_GET_FROM_DB "calendar_book_get_from_db" +#define API_NAME_CALENDAR_BOOK_DELETE_ALL_BY_ACCOUNT "calendar_book_delete_all_by_account" +#define API_NAME_CALENDAR_BOOK_GET_DB_ID "calendar_book_get_db_id" +#define API_NAME_CALENDAR_BOOK_GET_IS_DEFAULT "calendar_book_get_is_default" +#define API_NAME_CALENDAR_BOOK_SET_NAME "calendar_book_set_name" +#define API_NAME_CALENDAR_BOOK_GET_NAME "calendar_book_get_name" +#define API_NAME_CALENDAR_BOOK_SET_IS_VISIBLE "calendar_book_set_is_visibile" +#define API_NAME_CALENDAR_BOOK_GET_IS_VISIBLE "calendar_book_get_is_visibile" +#define API_NAME_CALENDAR_BOOK_SET_COLOR "calendar_book_set_color" +#define API_NAME_CALENDAR_BOOK_GET_COLOR "calendar_book_get_color" +#define API_NAME_CALENDAR_BOOK_SET_ACCOUNT_DB_ID "calendar_book_set_account_db_id" +#define API_NAME_CALENDAR_BOOK_GET_ACCOUNT_DB_ID "calendar_book_get_account_db_id" +#define API_NAME_CALENDAR_BOOK_FREE_CALENDAR_BOOK_ARRAY "calendar_book_free_calendar_book_array" +#define API_NAME_CALENDAR_BOOK_GET_ALL_CALENDAR_BOOK "calendar_book_get_all_calendar_book" +#define API_NAME_CALENDAR_BOOK_SEARCH_CALENDAR_BOOK_BY_ACCOUNT "calendar_book_search_calendar_book_by_account" + +#define API_NAME_CALENDAR_ADD_DB_CHANGED_CB "calendar_add_db_changed_cb" +#define API_NAME_CALENDAR_REMOVE_DB_CHANGED_CB "calendar_remove_db_changed_cb" +#define API_NAME_CALENDAR_GET_DB_VERSION "calendar_get_db_version" + +#define API_NAME_CALENDAR_BOOK_UNSET_COLOR "calendar_book_unset_color" + +static void startup(void); +static void cleanup(void); + +void (*tet_startup)(void) = startup; +void (*tet_cleanup)(void) = cleanup; + +static void utc_social_calendar_calendar_connect_disconnect_p(void); +static void utc_social_calendar_calendar_set_unset_db_changed_cb_p(void); +static void utc_social_calendar_calendar_set_unset_db_changed_cb_n(void); +//static void utc_social_calendar_foreach_timezone_p(void); +//static void utc_social_calendar_foreach_timezone_n(void); +//static void utc_social_calendar_foreach_calendar_book_from_db_p(void); +//static void utc_social_calendar_foreach_calendar_book_from_db_n(void); +static void utc_social_calendar_book_create_p(void); +static void utc_social_calendar_book_create_n(void); +static void utc_social_calendar_book_destroy_p(void); +static void utc_social_calendar_book_destroy_n(void); +static void utc_social_calendar_book_insert_to_db_p(void); +static void utc_social_calendar_book_get_is_default_n(void); +static void utc_social_calendar_book_get_name_n(void); +static void utc_social_calendar_book_get_is_visible_n(void); +static void utc_social_calendar_book_get_color_n(void); +static void utc_social_calendar_book_get_account_db_id_n(void); +static void utc_social_calendar_book_get_all_calendar_book_n(void); +static void utc_social_calendar_book_search_calendar_book_by_account_n(void); +static void utc_social_calendar_book_free_calendar_book_array_n(void); + +static void utc_social_calendar_add_db_changed_cb_p(void); +static void utc_social_calendar_add_db_changed_cb_n(void); +static void utc_social_calendar_remove_db_changed_cb_p(void); +static void utc_social_calendar_remove_db_changed_cb_n(void); +static void utc_social_calendar_get_db_version_p(void); +static void utc_social_calendar_get_db_version_n(void); + +static void utc_social_calendar_book_unset_color_p(void); +static void utc_social_calendar_book_unset_color_n(void); + +struct tet_testlist tet_testlist[] = { + { utc_social_calendar_calendar_connect_disconnect_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_set_unset_db_changed_cb_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_set_unset_db_changed_cb_n, NEGATIVE_TC_IDX }, +// { utc_social_calendar_foreach_timezone_p, POSITIVE_TC_IDX }, // TOREM +// { utc_social_calendar_foreach_timezone_n, NEGATIVE_TC_IDX }, // TOREM +// { utc_social_calendar_foreach_calendar_book_from_db_p, POSITIVE_TC_IDX }, +// { utc_social_calendar_foreach_calendar_book_from_db_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_book_create_p, POSITIVE_TC_IDX }, + { utc_social_calendar_book_create_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_book_destroy_p, POSITIVE_TC_IDX }, + { utc_social_calendar_book_destroy_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_book_insert_to_db_p, POSITIVE_TC_IDX }, + { utc_social_calendar_book_get_is_default_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_book_get_name_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_book_get_is_visible_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_book_get_color_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_book_get_account_db_id_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_book_get_all_calendar_book_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_book_search_calendar_book_by_account_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_book_free_calendar_book_array_n, NEGATIVE_TC_IDX }, + + { utc_social_calendar_add_db_changed_cb_p, POSITIVE_TC_IDX }, + { utc_social_calendar_add_db_changed_cb_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_remove_db_changed_cb_p, POSITIVE_TC_IDX }, + { utc_social_calendar_remove_db_changed_cb_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_get_db_version_p, POSITIVE_TC_IDX }, + { utc_social_calendar_get_db_version_n, NEGATIVE_TC_IDX }, + + { utc_social_calendar_book_unset_color_p, POSITIVE_TC_IDX }, + { utc_social_calendar_book_unset_color_n, NEGATIVE_TC_IDX }, + + { NULL, 0 }, +}; + +static void startup(void) +{ + int ret; + ret = calendar_connect(); + if (ret < 0) + dts_message(__func__, "calendar_connect failed(%d)", ret); +} + +static void cleanup(void) +{ + int ret; + ret = calendar_disconnect(); + if (ret < 0) + dts_message(__func__, "calendar_disconnect failed(%d)", ret); +} + +void _calendar_db_changed_cb(void* user_date) +{ + +} + +static void utc_social_calendar_calendar_connect_disconnect_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + if((ret = calendar_connect()) == CALENDAR_ERROR_NONE) { + if((ret = calendar_disconnect()) == CALENDAR_ERROR_NONE) { + dts_pass(API_NAME_CALENDAR_CONNECT); + } + else { + dts_message(API_NAME_CALENDAR_DISCONNECT, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_DISCONNECT); + } + } + else { + dts_message(API_NAME_CALENDAR_CONNECT, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_CONNECT); + } +} + +void changed_db_cb(void *user_data) +{ +} + +static void utc_social_calendar_calendar_set_unset_db_changed_cb_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_ADD_DB_CHANGED_CB; + calendar_connect(); + if((ret = calendar_add_db_changed_cb(changed_db_cb, CALENDAR_DB_CHANGED_CB_TYPE_CALENDAR_BOOK, NULL)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_remove_db_changed_cb(changed_db_cb, CALENDAR_DB_CHANGED_CB_TYPE_CALENDAR_BOOK)) == CALENDAR_ERROR_NONE) { + calendar_disconnect(); + dts_pass(api_name); + } + } + else { + calendar_disconnect(); + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_set_unset_db_changed_cb_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_ADD_DB_CHANGED_CB; + + if((ret = calendar_add_db_changed_cb(NULL, CALENDAR_DB_CHANGED_CB_TYPE_CALENDAR_BOOK, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_remove_db_changed_cb(NULL, CALENDAR_DB_CHANGED_CB_TYPE_CALENDAR_BOOK)) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(api_name); + } + } + else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +//bool dts_calendar_foreach_timezone_cb(calendar_foreach_timezone_s *timezone, void *user_data) +//{ +// return false; +//} +// +//static void utc_social_calendar_foreach_timezone_p(void) +//{ +// int ret = CALENDAR_ERROR_NONE; +// char* api_name = API_NAME_CALENDAR_FOREACH_TIMEZONE; +// if((ret = calendar_foreach_timezone(dts_calendar_foreach_timezone_cb, NULL)) == CALENDAR_ERROR_NONE) { +// dts_pass(api_name); +// } +// else { +// dts_message(api_name, "Calendar : %d", ret); +// dts_fail(api_name); +// } +//} +// +//static void utc_social_calendar_foreach_timezone_n(void) +//{ +// int ret = CALENDAR_ERROR_NONE; +// char* api_name = API_NAME_CALENDAR_FOREACH_TIMEZONE; +// if((ret = calendar_foreach_timezone(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { +// dts_pass(api_name); +// } +// else { +// dts_message(api_name, "Calendar : %d", ret); +// dts_fail(api_name); +// } +//} + +bool dts_calendar_foreach_calendar_cb(calendar_query_calendar_book_s *calendar, void *user_data) +{ + return false; +} + +//static void utc_social_calendar_foreach_calendar_book_from_db_p(void) +//{ +// int ret = CALENDAR_ERROR_NONE; +// char* api_name = API_NAME_CALENDAR_FOREACH_CALENDAR_FROM_DB; +// +// bool success = false; +// +// calendar_connect(); +// if((ret = calendar_foreach_calendar_book_from_db(dts_calendar_foreach_calendar_cb, NULL)) == CALENDAR_ERROR_NONE) { +// success = true; +// } +// calendar_disconnect(); +// +// if(success == true) { +// dts_pass(api_name); +// } else { +// dts_message(api_name, "Calendar : %d", ret); +// dts_fail(api_name); +// } +//} +// +//static void utc_social_calendar_foreach_calendar_book_from_db_n(void) +//{ +// int ret = CALENDAR_ERROR_NONE; +// char* api_name = API_NAME_CALENDAR_FOREACH_CALENDAR_FROM_DB; +// +// bool success = false; +// +// if((ret = calendar_foreach_calendar_book_from_db(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { +// +// success = true; +// } +// +// if(success == true) { +// dts_pass(api_name); +// } else { +// dts_message(api_name, "Calendar : %d", ret); +// dts_fail(api_name); +// } +//} + +static void utc_social_calendar_book_create_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_BOOK_CREATE; + + bool success = false; + + calendar_book_h calendar_book_h = NULL; + + if ((ret = calendar_book_create(&calendar_book_h)) == CALENDAR_ERROR_NONE) { + success = true; + } + + calendar_book_destroy(calendar_book_h); + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_book_create_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_BOOK_CREATE; + + bool success = false; + + if((ret = calendar_event_create(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_book_destroy_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_BOOK_DESTROY; + + bool success = false; + + calendar_book_h calendar_book_h = NULL; + + calendar_book_create(&calendar_book_h); + + if((ret = calendar_book_destroy(calendar_book_h)) == CALENDAR_ERROR_NONE) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_book_destroy_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_BOOK_DESTROY; + + bool success = false; + + if((ret = calendar_book_destroy(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_book_insert_to_db_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char *api = API_NAME_CALENDAR_BOOK_INSERT_TO_DB; + calendar_book_h calbook; + + int calbook_id; + int acc_id = 3; + unsigned char red = 5; + unsigned char green = 5; + unsigned char blue = 5; + bool is_default; + bool is_visible = true; + char *name = "Test Name"; + + ret = calendar_book_create(&calbook); + if (ret < 0) { + dts_message(api, "calendar_book_create failed(%d)", ret); + dts_fail(api); + return; + } + + ret = calendar_book_set_name(calbook, name); + if (ret < 0) { + dts_message(api, "calendar_book_set_name failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_set_is_visible(calbook, is_visible); + if (ret < 0) { + dts_message(api, "calendar_book_set_is_visible failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_set_color(calbook, red, blue, green); + if (ret < 0) { + dts_message(api, "calendar_book_set_color failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_set_account_db_id(calbook, acc_id); + if (ret < 0) { + dts_message(api, "calendar_book_set_account_db_id failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_insert_to_db(calbook, &calbook_id); + if (ret < 0) { + dts_message(api, "calendar_book_set_account_db_id failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_destroy(calbook); + if (ret < 0) { + dts_message(api, "calendar_book_set_account_db_id failed(%d)", ret); + dts_fail(api); + return; + } + + ret = calendar_book_create(&calbook); + if (ret < 0) { + dts_message(api, "calendar_book_create failed(%d)", ret); + dts_fail(api); + return; + } + + ret = calendar_book_get_from_db(calbook_id, &calbook); + if (ret < 0) { + dts_message(api, "calendar_book_get_from_db failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_get_db_id(calbook, &calbook_id); + if (ret < 0) { + dts_message(api, "calendar_book_get_db_id failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_get_is_default(calbook, &is_default); + if (ret < 0) { + dts_message(api, "calendar_book_get_is_default failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_get_color(calbook, &red, &green, &blue); + if (ret < 0) { + dts_message(api, "calendar_book_get_is_color failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_get_is_visible(calbook, &is_visible); + if (ret < 0) { + dts_message(api, "calendar_book_get_is_visible failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_get_account_db_id(calbook, &acc_id); + if (ret < 0) { + dts_message(api, "calendar_book_get_account_db_id failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_get_is_default(calbook, &is_default); + if (ret < 0) { + dts_message(api, "calendar_book_get_is_default failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_get_name(calbook, &name); + if (ret < 0) { + dts_message(api, "calendar_book_get_name failed(%d)", ret); + calendar_book_destroy(calbook); + dts_fail(api); + return; + } + + ret = calendar_book_destroy(calbook); + if (ret < 0) { + dts_message(api, "calendar_book_destroy failed(%d)", ret); + free(name); + dts_fail(api); + return; + } + + int len; + calendar_book_h *calbook_array; + + ret = calendar_book_get_all_calendar_book(&calbook_array, &len); + if (ret < 0) { + dts_message(api, "calendar_book_get_all_calendar_book failed(%d)", ret); + dts_fail(api); + } + + ret = calendar_book_free_calendar_book_array(calbook_array); + if (ret < 0) { + dts_message(api, "calendar_book_free_calendar_book_array failed(%d)", ret); + dts_fail(api); + } + + ret = calendar_book_delete_from_db(calbook_id); + if (ret < 0) { + dts_message(api, "calendar_book_delete_from_db failed(%d)", ret); + dts_fail(api); + } + + dts_pass(api); +} + +static void utc_social_calendar_book_get_is_default_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_BOOK_GET_IS_DEFAULT; + + bool success = false; + + if((ret = calendar_book_get_is_default(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_book_get_name_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_BOOK_GET_NAME; + + bool success = false; + + if((ret = calendar_book_get_name(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_book_get_is_visible_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_BOOK_GET_IS_VISIBLE; + + bool success = false; + + if((ret = calendar_book_get_is_visible(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_book_get_color_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_BOOK_GET_COLOR; + + bool success = false; + + if((ret = calendar_book_get_color(NULL, NULL, NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_book_get_account_db_id_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_BOOK_GET_ACCOUNT_DB_ID; + + bool success = false; + + if((ret = calendar_book_get_account_db_id(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_book_free_calendar_book_array_n(void) +{ + char* api_name = API_NAME_CALENDAR_BOOK_FREE_CALENDAR_BOOK_ARRAY; + int error; + + if ((error = calendar_book_free_calendar_book_array(NULL)) + != CALENDAR_ERROR_INVALID_PARAMETER) { + dts_message(api_name, "Error: %d", error); + dts_fail(api_name); + return; + } + + dts_pass(api_name); +} + +static void utc_social_calendar_book_get_all_calendar_book_n(void) +{ + char* api_name = API_NAME_CALENDAR_BOOK_GET_ALL_CALENDAR_BOOK; + + int error; + calendar_book_h *calendar_book_array = NULL; + int length; + if ((error = calendar_book_get_all_calendar_book(NULL, &length)) + != CALENDAR_ERROR_INVALID_PARAMETER) { + dts_message(api_name, "Error : %d", error); + dts_fail(api_name); + return; + } + + if ((error = calendar_book_get_all_calendar_book(&calendar_book_array, NULL)) + != CALENDAR_ERROR_INVALID_PARAMETER) { + dts_message(api_name, "Error : %d", error); + dts_fail(api_name); + return; + } + + dts_pass(api_name); +} + +static void utc_social_calendar_book_search_calendar_book_by_account_n(void) +{ + char* api_name = API_NAME_CALENDAR_BOOK_SEARCH_CALENDAR_BOOK_BY_ACCOUNT; + + int error; + calendar_book_h *calendar_book_array = NULL; + int length; + if ((error = calendar_book_get_all_calendar_book(NULL, &length)) + != CALENDAR_ERROR_INVALID_PARAMETER) { + dts_message(api_name, "Error : %d", error); + dts_fail(api_name); + return; + } + + if ((error = calendar_book_search_calendar_book_by_account(-1, &calendar_book_array, NULL)) + != CALENDAR_ERROR_INVALID_PARAMETER) { + dts_message(api_name, "Error : %d", error); + dts_fail(api_name); + return; + } + + dts_pass(api_name); +} + +static void utc_social_calendar_add_db_changed_cb_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + if ((ret = calendar_add_db_changed_cb(_calendar_db_changed_cb, + CALENDAR_DB_CHANGED_CB_TYPE_CALENDAR_BOOK, (void*)123)) + == CALENDAR_ERROR_NONE) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_ADD_DB_CHANGED_CB); + } else { + dts_message(API_NAME_CALENDAR_ADD_DB_CHANGED_CB, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_ADD_DB_CHANGED_CB); + } +} + +static void utc_social_calendar_add_db_changed_cb_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + if ((ret = calendar_add_db_changed_cb(NULL, + CALENDAR_DB_CHANGED_CB_TYPE_CALENDAR_BOOK, (void*)123)) + == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_ADD_DB_CHANGED_CB); + } else { + dts_message(API_NAME_CALENDAR_ADD_DB_CHANGED_CB, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_ADD_DB_CHANGED_CB); + } +} + +static void utc_social_calendar_remove_db_changed_cb_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + if ((ret = calendar_remove_db_changed_cb(_calendar_db_changed_cb, CALENDAR_DB_CHANGED_CB_TYPE_CALENDAR_BOOK)) == CALENDAR_ERROR_NONE) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_REMOVE_DB_CHANGED_CB); + } else { + dts_message(API_NAME_CALENDAR_REMOVE_DB_CHANGED_CB, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_REMOVE_DB_CHANGED_CB); + } +} + +static void utc_social_calendar_remove_db_changed_cb_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + if ((ret = calendar_remove_db_changed_cb(NULL, CALENDAR_DB_CHANGED_CB_TYPE_CALENDAR_BOOK)) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_REMOVE_DB_CHANGED_CB); + } else { + dts_message(API_NAME_CALENDAR_REMOVE_DB_CHANGED_CB, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_REMOVE_DB_CHANGED_CB); + } +} + +static void utc_social_calendar_get_db_version_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + int db_version; + + if ((ret = calendar_get_db_version(&db_version)) == CALENDAR_ERROR_NONE) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_GET_DB_VERSION); + } else { + dts_message(API_NAME_CALENDAR_GET_DB_VERSION, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_GET_DB_VERSION); + } +} + +static void utc_social_calendar_get_db_version_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + if ((ret = calendar_get_db_version(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_GET_DB_VERSION); + } else { + dts_message(API_NAME_CALENDAR_GET_DB_VERSION, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_GET_DB_VERSION); + } +} + +static void utc_social_calendar_book_unset_color_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + calendar_book_h calendar_book = NULL; + calendar_book_create(&calendar_book); + + if ((ret = calendar_book_unset_color(calendar_book)) == CALENDAR_ERROR_NONE) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_BOOK_UNSET_COLOR); + } else { + dts_message(API_NAME_CALENDAR_BOOK_UNSET_COLOR, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_BOOK_UNSET_COLOR); + } +} + +static void utc_social_calendar_book_unset_color_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + if ((ret = calendar_book_unset_color(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_BOOK_UNSET_COLOR); + } else { + dts_message(API_NAME_CALENDAR_BOOK_UNSET_COLOR, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_BOOK_UNSET_COLOR); + } +} diff --git a/TC/testcase/utc_social_calendar_attendee.c b/TC/testcase/utc_social_calendar_attendee.c new file mode 100755 index 0000000..b57d490 --- /dev/null +++ b/TC/testcase/utc_social_calendar_attendee.c @@ -0,0 +1,292 @@ +/* + * Copyright (c) 2011 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +enum { + POSITIVE_TC_IDX = 0x01, + NEGATIVE_TC_IDX, +}; + +#define API_NAME_CALENDAR_ATTENDEE_GET_NAME "calendar_attendee_get_name" +#define API_NAME_CALENDAR_ATTENDEE_SET_NAME "calendar_attendee_set_name" +#define API_NAME_CALENDAR_ATTENDEE_GET_EMAIL "calendar_attendee_get_email" +#define API_NAME_CALENDAR_ATTENDEE_SET_EMAIL "calendar_attendee_set_email" +#define API_NAME_CALENDAR_ATTENDEE_ITERATOR_NEXT "calendar_attendee_iterator_next" +#define API_NAME_CALENDAR_ATTENDEE_GET_CONTACT_DB_ID "calendar_attendee_get_contact_db_id" +#define API_NAME_CALENDAR_ATTENDEE_GET_PHONE_NUMBER "calendar_attendee_get_phone_number" + +static void startup(void); +static void cleanup(void); + +void (*tet_startup)(void) = startup; +void (*tet_cleanup)(void) = cleanup; + +static void utc_social_calendar_calendar_attendee_get_set_name_p(void); +static void utc_social_calendar_calendar_attendee_get_set_name_n(void); +static void utc_social_calendar_calendar_attendee_get_set_email_p(void); +static void utc_social_calendar_calendar_attendee_get_set_email_n(void); +static void utc_social_calendar_calendar_attendee_iterator_next_has_next_p(void); +static void utc_social_calendar_calendar_attendee_iterator_next_has_next_n(void); +static void utc_social_calendar_calendar_attendee_get_contact_db_id_p(void); +static void utc_social_calendar_calendar_attendee_get_contact_db_id_n(void); +static void utc_social_calendar_calendar_attendee_get_phone_number_p(void); +static void utc_social_calendar_calendar_attendee_get_phone_number_n(void); + +struct tet_testlist tet_testlist[] = { + { utc_social_calendar_calendar_attendee_get_set_name_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_attendee_get_set_name_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_attendee_get_set_email_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_attendee_get_set_email_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_attendee_iterator_next_has_next_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_attendee_iterator_next_has_next_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_attendee_get_contact_db_id_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_attendee_get_contact_db_id_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_attendee_get_phone_number_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_attendee_get_phone_number_n, NEGATIVE_TC_IDX }, + + { NULL, 0 }, +}; + +static void startup(void) +{ + /* start of TC */ +} + +static void cleanup(void) +{ + /* end of TC */ +} + +static void utc_social_calendar_calendar_attendee_get_set_name_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_ATTENDEE_GET_NAME; + bool success = false; + char* name = NULL; + + calendar_attendee_h attendee = NULL; + calendar_event_h event = NULL; + if(calendar_event_create(&event) == CALENDAR_ERROR_NONE) { + if(calendar_event_add_attendee(event, &attendee) == CALENDAR_ERROR_NONE){ + if((ret = calendar_attendee_set_name(attendee, "name")) == CALENDAR_ERROR_NONE) { + if((ret = calendar_attendee_get_name(attendee, &name)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + } + + if(name != NULL) { + free(name); + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } + else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_attendee_get_set_name_n(void) +{ + if(calendar_attendee_set_name(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_attendee_get_name(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(API_NAME_CALENDAR_ATTENDEE_GET_NAME); + } + dts_fail(API_NAME_CALENDAR_ATTENDEE_GET_NAME); +} + +static void utc_social_calendar_calendar_attendee_get_set_email_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_ATTENDEE_GET_EMAIL; + bool success = false; + char* email = NULL; + + calendar_attendee_h attendee = NULL; + calendar_event_h event = NULL; + if(calendar_event_create(&event) == CALENDAR_ERROR_NONE) { + if(calendar_event_add_attendee(event, &attendee) == CALENDAR_ERROR_NONE){ + if((ret = calendar_attendee_set_email(attendee, "test@test.com")) == CALENDAR_ERROR_NONE) { + if((ret = calendar_attendee_get_email(attendee, &email)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + } + + if(email != NULL) { + free(email); + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } + else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_attendee_get_set_email_n(void) +{ + if(calendar_attendee_set_email(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_attendee_get_email(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(API_NAME_CALENDAR_ATTENDEE_GET_EMAIL); + } + dts_fail(API_NAME_CALENDAR_ATTENDEE_GET_EMAIL); +} + +static void utc_social_calendar_calendar_attendee_iterator_next_has_next_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_ATTENDEE_ITERATOR_NEXT; + bool success = false; + + calendar_attendee_h attendee = NULL; + calendar_attendee_h attendee_r = NULL; + calendar_attendee_iterator_h iterator = NULL; + calendar_event_h event = NULL; + + if(calendar_event_create(&event) == CALENDAR_ERROR_NONE) { + if(calendar_event_add_attendee(event, &attendee) == CALENDAR_ERROR_NONE){ + calendar_event_set_subject(event, "subject"); + calendar_attendee_set_name(attendee, "name"); + if((ret = calendar_event_get_attendee_iterator(event, &iterator)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_attendee_iterator_has_next(iterator)) == true) { + if((ret = calendar_attendee_iterator_next(&iterator, &attendee_r)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + } + } + + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_attendee_iterator_next_has_next_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_ATTENDEE_ITERATOR_NEXT; + bool success = false; + if((ret = calendar_attendee_iterator_has_next(NULL)) == false) { + if((ret = calendar_attendee_iterator_next(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_attendee_get_contact_db_id_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_ATTENDEE_GET_CONTACT_DB_ID; + bool success = false; + + int id = 0; + calendar_attendee_h attendee = NULL; + calendar_event_h event = NULL; + if(calendar_event_create(&event) == CALENDAR_ERROR_NONE) { + if(calendar_event_add_attendee(event, &attendee) == CALENDAR_ERROR_NONE){ + if((ret = calendar_attendee_set_contact_db_id(attendee, 1)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_attendee_get_contact_db_id(attendee, &id)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + } + + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } + else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_attendee_get_contact_db_id_n(void) +{ + char* api_name = API_NAME_CALENDAR_ATTENDEE_GET_CONTACT_DB_ID; + if(calendar_attendee_get_contact_db_id(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_attendee_set_contact_db_id(NULL, -1) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(api_name); + } + dts_fail(api_name); +} + +static void utc_social_calendar_calendar_attendee_get_phone_number_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_ATTENDEE_GET_PHONE_NUMBER; + bool success = false; + + char* phone_number = NULL; + calendar_attendee_h attendee = NULL; + calendar_event_h event = NULL; + if(calendar_event_create(&event) == CALENDAR_ERROR_NONE) { + if(calendar_event_add_attendee(event, &attendee) == CALENDAR_ERROR_NONE){ + if((ret = calendar_attendee_set_phone_number(attendee, "01088889999")) == CALENDAR_ERROR_NONE) { + if((ret = calendar_attendee_get_phone_number(attendee, &phone_number)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + } + + if(phone_number != NULL) { + free(phone_number); + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } + else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_attendee_get_phone_number_n(void) +{ + char* api_name = API_NAME_CALENDAR_ATTENDEE_GET_PHONE_NUMBER; + if(calendar_attendee_get_phone_number(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_attendee_set_phone_number(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(api_name); + } + dts_fail(api_name); +} + + + diff --git a/TC/testcase/utc_social_calendar_event.c b/TC/testcase/utc_social_calendar_event.c new file mode 100755 index 0000000..f718c66 --- /dev/null +++ b/TC/testcase/utc_social_calendar_event.c @@ -0,0 +1,2459 @@ +/* + * Copyright (c) 2011 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +enum { + POSITIVE_TC_IDX = 0x01, + NEGATIVE_TC_IDX, +}; + +#define API_NAME_CALENDAR_EVENT_CREATE "CALENDAR_EVENT_CREATE" +#define API_NAME_CALENDAR_EVENT_DESTROY "CALENDAR_EVENT_DESTROY" +#define API_NAME_CALENDAR_EVENT_GET_DB_ID "CALENDAR_EVENT_GET_DB_ID" +#define API_NAME_CALENDAR_EVENT_GET_ORIGINAL_EVENT_DB_ID "CALENDAR_EVENT_GET_ORIGINAL_EVENT_DB_ID" +#define API_NAME_CALENDAR_EVENT_GET_CALENDAR_DB_ID "CALENDAR_EVENT_GET_CALENDAR_BOOK_DB_ID" +#define API_NAME_CALENDAR_EVENT_GET_SUBJECT "CALENDAR_EVENT_GET_SUBJECT" +#define API_NAME_CALENDAR_EVENT_SET_SUBJECT "CALENDAR_EVENT_SET_SUBJECT" +#define API_NAME_CALENDAR_EVENT_GET_DESCRIPTION "CALENDAR_EVENT_GET_DESCRIPTION" +#define API_NAME_CALENDAR_EVENT_SET_DESCRIPTION "CALENDAR_EVENT_SET_DESCRIPTION" +#define API_NAME_CALENDAR_EVENT_GET_TIMEZONE "CALENDAR_EVENT_GET_TIMEZONE" +#define API_NAME_CALENDAR_EVENT_GET_VISIBILITY "CALENDAR_EVENT_GET_VISIBILITY" +#define API_NAME_CALENDAR_EVENT_GET_LAST_MODIFIED_TIME "CALENDAR_EVENT_GET_LAST_MODIFIED_TIME" +#define API_NAME_CALENDAR_EVENT_GET_IS_ALL_DAY_EVENT "CALENDAR_EVENT_GET_IS_ALL_DAY_EVENT" +#define API_NAME_CALENDAR_EVENT_SET_IS_ALL_DAY_EVENT "CALENDAR_EVENT_SET_IS_ALL_DAY_EVENT" +#define API_NAME_CALENDAR_EVENT_GET_LOCATION "CALENDAR_EVENT_GET_LOCATION" +#define API_NAME_CALENDAR_EVENT_SET_LOCATION "CALENDAR_EVENT_SET_LOCATION" +#define API_NAME_CALENDAR_EVENT_INSERT_TO_DB "CALENDAR_EVENT_INSERT_TO_DB" +#define API_NAME_CALENDAR_EVENT_DELETE_FROM_DB "CALENDAR_EVENT_DELETE_FROM_DB" +#define API_NAME_CALENDAR_EVENT_UPDATE_TO_DB "CALENDAR_EVENT_UPDATE_TO_DB" +#define API_NAME_CALENDAR_EVENT_GET_FROM_DB "CALENDAR_EVENT_GET_FROM_DB" +#define API_NAME_CALENDAR_EVENT_GET_START_TIME "CALENDAR_EVENT_GET_START_TIME" +#define API_NAME_CALENDAR_EVENT_SET_START_TIME "CALENDAR_EVENT_SET_START_TIME" +#define API_NAME_CALENDAR_EVENT_GET_END_TIME "CALENDAR_EVENT_GET_END_TIME" +#define API_NAME_CALENDAR_EVENT_SET_END_TIME "CALENDAR_EVENT_SET_END_TIME" +#define API_NAME_CALENDAR_EVENT_GET_RECURRENCE_UNTIL_TIME "CALENDAR_EVENT_GET_RECURRENCE_UNTIL_DATE" +#define API_NAME_CALENDAR_EVENT_SET_RECURRENCE_UNTIL_TIME "CALENDAR_EVENT_SET_RECURRENCE_UNTIL_DATE" +#define API_NAME_CALENDAR_EVENT_GET_RECURRENCE_FREQUENCY "CALENDAR_EVENT_GET_RECURRENCE_FREQUENCY" +#define API_NAME_CALENDAR_EVENT_SET_RECURRENCE_FREQUENCY "CALENDAR_EVENT_SET_RECURRENCE_FREQUENCY" +#define API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_INTERVAL "CALENDAR_EVENT_GET_SET_RECURRENCE_INTERVAL" +#define API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_COUNT "CALENDAR_EVENT_GET_SET_RECURRENCE_COUNT" +#define API_NAME_CALENDAR_EVENT_GET_REMINDER "CALENDAR_EVENT_GET_REMINDER" +#define API_NAME_CALENDAR_EVENT_SET_REMINDER "CALENDAR_EVENT_SET_REMINDER" +#define API_NAME_CALENDAR_FOREACH_EVENT_FROM_DB "CALENDAR_FOREACH_EVENT_FROM_DB" +#define API_NAME_CALENDAR_EVENT_ADD_ATTENDEE "CALENDAR_FOREACH_EVENT_ADD_ATTENDEE" +#define API_NAME_CALENDAR_EVENT_ADD_ATTENDEE_WITH_CONTACT "CALENDAR_FOREACH_EVENT_ADD_ATTENDEE_WITH_CONTACT" +#define API_NAME_CALENDAR_EVENT_REMOVE_ATTENDEE "CALENDAR_FOREACH_EVENT_REMOVE_ATTENDEE" +#define API_NAME_CALENDAR_EVENT_GET_TOTAL_COUNT_FROM_DB "CALENDAR_EVENT_GET_TOTAL_COUNT_FROM_DB" +#define API_NAME_CALENDAR_EVENT_GET_ATTENDEE_ITERATOR "CALENDAR_EVENT_GET_ATTENDEE_ITERATOR" +#define API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYDAY "CALENDAR_EVENT_GET_SET_RECURRENCE_BYDAY" +#define API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYSETPOS "CALENDAR_EVENT_GET_SET_RECURRENCE_BYSETPOS" +#define API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYMONTHDAY "CALENDAR_EVENT_GET_SET_RECURRENCE_BYSETPOS" +#define API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYMONTH "CALENDAR_EVENT_GET_SET_RECURRENCE_BYSETPOS" +#define API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYWEEKSTART "CALENDAR_EVENT_GET_SET_RECURRENCE_BYSETPOS" + +#define API_NAME_CALENDAR_FOREACH_QUERY_BY_SUBJECT "CALENDAR_EVENT_FOREACH_QUERY_BY_SUBJECT" +#define API_NAME_CALENDAR_FOREACH_QUERY_BY_DESCRIPTION "CALENDAR_EVENT_FOREACH_QUERY_BY_DESCRIPTION" +#define API_NAME_CALENDAR_FOREACH_QUERY_BY_LOCATION "CALENDAR_EVENT_FOREACH_QUERY_BY_LOCATION" +#define API_NAME_CALENDAR_FOREACH_QUERY_BY_PERIOD "CALENDAR_EVENT_FOREACH_QUERY_BY_PERIOD" +#define API_NAME_CALENDAR_QUERY_EVENT_BY_TIME_LAST_MODIFIED "CALENDAR_QUERY_EVENT_BY_TIME_LAST_MODIFIED" +#define API_NAME_CALENDAR_QUERY_EVENT_BY_CALENDAR "CALENDAR_QUERY_EVENT_BY_CALENDAR" +#define API_NAME_CALENDAR_EVENT_GET_FROM_VCALENDAR "CALENDAR_EVENT_GET_FROM_VCALENDAR" +#define API_NAME_CALENDAR_EVENT_GET_VCALENDAR_FROM_EVENT "CALENDAR_EVENT_GET_VCALENDAR_FROM_EVENT" + +#define API_NAME_CALENDAR_EVENT_GET_SET_CATEGORIES "CALENDAR_EVENT_GET_SET_CATEGORIES" +#define API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_WEEK_START "CALENDAR_EVENT_GET_SET_RECURRENCE_WEEK_START" +#define API_NAME_CALENDAR_EVENT_GET_SET_BUSY_STATUS "CALENDAR_EVENT_GET_SET_BUSY_STATUS" +#define API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_VERSION "CALENDAR_EVENT_SEARCH_EVENT_BY_VERSION" +#define API_NAME_CALENDAR_EVENT_FREE_EVENT_ARRAY "CALENDAR_EVENT_FREE_EVENT_ARRAY" +#define API_NAME_CALENDAR_EVENT_FREE_MODIFIED_EVENT_ARRAY "CALENDAR_EVENT_FREE_MODIFIED_EVENT_ARRAY" +#define API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_CALENDAR_BOOK "CALENDAR_EVENT_SEARCH_EVENT_BY_CALENDAR_BOOK" +#define API_NAME_CALENDAR_EVENT_SEARCH_EXTEND_EVENT_INSTANCE_BY_PERIOD "CALENDAR_EVENT_SEARCH_EXTEND_EVENT_INSTANCE_BY_PERIOD" +#define API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD "CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD" +#define API_NAME_CALENDAR_EVENT_DELETE_RECURRENCE_EVENT_INSTANCE_FROM_DB "CALENDAR_EVENT_DELETE_RECURRENCE_EVENT_INSTANCE_FROM_DB" +#define API_NAME_CALENDAR_EVENT_DELETE_ALL_DAY_RECURRENCE_EVENT_INSTANCE_FROM_DB "CALENDAR_EVENT_DELETE_ALL_DAY_RECURRENCE_EVENT_INSTANCE_FROM_DB" +#define API_NAME_CALENDAR_EVENT_GET_SET_EXDATE "CALENDAR_EVENT_GET_SET_EXDATE" +#define API_NAME_CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR "CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR" +#define API_NAME_CALENDAR_EVENT_GET_VCALENDAR_FROM_DB "CALENDAR_EVENT_GET_VCALENDAR_FROM_DB" + +#define SAMPLE_VCAL \ + "BEGIN:VCALENDAR\r\n" \ + "METHOD:REQUEST\r\n" \ + "PRODID:Microsoft CDO for Microsoft Exchange\r\n" \ + "VERSION:2.0\r\n" \ + "BEGIN:VTIMEZONE\r\n" \ + " TZID:tz\r\n" \ + " X-MICROSOFT-CDO-TZID:10\r\n" \ + " LAST-MODIFIED:20111229T172655Z\r\n" \ + " BEGIN:STANDARD\r\n" \ + " DTSTART:20111106T020000\r\n" \ + " TZOFFSETTO:+0000\r\n" \ + " TZOFFSETFROM:+0000\r\n" \ + " END:STANDARD\r\n" \ + " BEGIN:DAYLIGHT\r\n" \ + " DTSTART:20120313T020000\r\n" \ + " TZOFFSETTO:+0100\r\n" \ + " TZOFFSETFROM:+0000\r\n" \ + " END:DAYLIGHT\r\n" \ + "END:VTIMEZONE\r\n" \ + "BEGIN:VEVENT\r\n" \ + " SUMMARY:Simple Event\, Attendees:Tin Tin \r\n" \ + " ORGANIZER:MAILTO:tin.tin@acme.com\r\n" \ + " ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=;X-NUM-GUESTS=0:mailto:tin.tin@acme.com\r\n" \ + " ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=;X-NUM-GUESTS=0:mailto:tin.tin@acme.com\r\n" \ + " LOCATION:Conference Room\r\n" \ + " DTSTAMP:20111229T172652Z\r\n" \ + " UID:D26B0632-8496-4E76-977F-E7A04AF4CF4D\r\n" \ + " SEQUENCE:1\r\n" \ + " URL;VALUE=URI:http://acme/Lists/Conf/DispForm.aspx?ID=1178\r\n" \ + " DTSTART;TZID=tz:20111229T140000\r\n" \ + " DTEND;TZID=tz:20111229T150000\r\n" \ + " RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TH;WKST=SU\r\n" \ + "END:VEVENT\r\n" \ + "END:VCALENDAR" + +#define SAMPLE_VCAL2 \ + "BEGIN:VCALENDAR\r\n" \ + "VERSION:1.0\r\n" \ + "BEGIN:VEVENT\r\n" \ + "SUMMARY:Sample vCalendar event\r\n" \ + "DTSTART:20031228T080000\r\n" \ + "DTEND:20031228T083000\r\n" \ + "END:VEVENT\r\n" \ + "END:VCALENDAR\r\n" + +static void startup(void); +static void cleanup(void); + +void (*tet_startup)(void) = startup; +void (*tet_cleanup)(void) = cleanup; + +static void utc_social_calendar_calendar_event_create_p(void); +static void utc_social_calendar_calendar_event_create_n(void); +static void utc_social_calendar_calendar_event_destroy_p(void); +static void utc_social_calendar_calendar_event_destroy_n(void); +static void utc_social_calendar_calendar_event_get_db_id_p(void); +static void utc_social_calendar_calendar_event_get_db_id_n(void); +static void utc_social_calendar_calendar_event_get_calendar_book_db_id_p(void); +static void utc_social_calendar_calendar_event_get_calendar_book_db_id_n(void); +static void utc_social_calendar_calendar_event_get_set_subject_p(void); +static void utc_social_calendar_calendar_event_get_set_subject_n(void); +static void utc_social_calendar_calendar_event_get_set_description_p(void); +static void utc_social_calendar_calendar_event_get_set_description_n(void); +static void utc_social_calendar_calendar_event_get_set_timezone_p(void); +static void utc_social_calendar_calendar_event_get_set_timezone_n(void); +static void utc_social_calendar_calendar_event_get_set_visibility_p(void); +static void utc_social_calendar_calendar_event_get_set_visibility_n(void); +static void utc_social_calendar_calendar_event_get_last_modified_time_p(void); +static void utc_social_calendar_calendar_event_get_last_modified_time_n(void); +static void utc_social_calendar_calendar_event_get_set_all_day_event_p(void); +static void utc_social_calendar_calendar_event_get_set_all_day_event_n(void); +static void utc_social_calendar_calendar_event_get_set_location_p(void); +static void utc_social_calendar_calendar_event_get_set_location_n(void); +static void utc_social_calendar_calendar_event_get_set_reminder_p(void); +static void utc_social_calendar_calendar_event_get_set_reminder_n(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_frequency_p(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_frequency_n(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_interval_p(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_interval_n(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_count_p(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_count_n(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_until_date_p(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_until_date_n(void); + +static void utc_social_calendar_calendar_event_get_set_start_time_p(void); +static void utc_social_calendar_calendar_event_get_set_start_time_n(void); +static void utc_social_calendar_calendar_event_get_set_end_time_p(void); +static void utc_social_calendar_calendar_event_get_set_end_time_n(void); +static void utc_social_calendar_calendar_event_insert_to_db_p(void); +static void utc_social_calendar_calendar_event_insert_to_db_n(void); +static void utc_social_calendar_calendar_event_delete_from_db_p(void); +static void utc_social_calendar_calendar_event_delete_from_db_n(void); +static void utc_social_calendar_calendar_event_update_to_db_p(void); +static void utc_social_calendar_calendar_event_update_to_db_n(void); +static void utc_social_calendar_calendar_event_get_from_db_p(void); +static void utc_social_calendar_calendar_event_get_from_db_n(void); +static void utc_social_calendar_calendar_event_add_attendee_p(void); +static void utc_social_calendar_calendar_event_add_attendee_n(void); +static void utc_social_calendar_calendar_event_add_attendee_with_contact_p(void); +static void utc_social_calendar_calendar_event_add_attendee_with_contact_n(void); +static void utc_social_calendar_calendar_event_remove_attendee_p(void); +static void utc_social_calendar_calendar_event_remove_attendee_n(void); +static void utc_social_calendar_calendar_event_get_attendee_iterator_p(void); +static void utc_social_calendar_calendar_event_get_attendee_iterator_n(void); + +static void utc_social_calendar_calendar_event_get_set_recurrence_byday_p(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_byday_n(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_bysetpos_p(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_bysetpos_n(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_bymonthday_p(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_bymonthday_n(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_bymonth_p(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_bymonth_n(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_week_start_p(void); +static void utc_social_calendar_calendar_event_get_set_recurrence_week_start_n(void); + +static void utc_social_calendar_event_get_set_categories_p(void); +static void utc_social_calendar_event_get_set_categories_n(void); +static void utc_social_calendar_event_get_set_recurrence_week_start_p(void); +static void utc_social_calendar_event_get_set_recurrence_week_start_n(void); +static void utc_social_calendar_event_get_set_busy_status_p(void); +static void utc_social_calendar_event_get_set_busy_status_n(void); +static void utc_social_calendar_event_search_event_by_version_p(void); +static void utc_social_calendar_event_search_event_by_version_n(void); +static void utc_social_calendar_event_free_event_array_p(void); +static void utc_social_calendar_event_free_event_array_n(void); +static void utc_social_calendar_event_free_modified_event_array_p(void); +static void utc_social_calendar_event_free_modified_event_array_n(void); +static void utc_social_calendar_event_search_event_by_calendar_book_p(void); +static void utc_social_calendar_event_search_event_by_calendar_book_n(void); + +static void utc_social_calendar_event_search_extend_instance_by_period_p(void); +static void utc_social_calendar_event_search_extend_instance_by_period_n(void); +static void utc_social_calendar_event_search_all_day_extend_instance_by_period_p(void); +static void utc_social_calendar_event_search_all_day_extend_instance_by_period_n(void); + +static void utc_social_calendar_event_delete_recurrence_instance_from_db_p(void); +static void utc_social_calendar_event_delete_recurrence_instance_from_db_n(void); +static void utc_social_calendar_event_delete_recurrence_all_day_instance_from_db_p(void); +static void utc_social_calendar_event_delete_recurrence_all_day_instance_from_db_n(void); +static void utc_social_calendar_event_get_set_exdate_p(void); +static void utc_social_calendar_event_get_set_exdate_n(void); + +static void utc_social_calendar_event_get_event_array_from_vcalendar_p(void); +static void utc_social_calendar_event_get_event_array_from_vcalendar_n(void); +static void utc_social_calendar_event_get_vcalendar_from_db_p(void); +static void utc_social_calendar_event_get_vcalendar_from_db_n(void); + +struct tet_testlist tet_testlist[] = { + { utc_social_calendar_calendar_event_create_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_create_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_destroy_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_destroy_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_subject_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_subject_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_description_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_description_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_timezone_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_timezone_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_visibility_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_visibility_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_last_modified_time_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_last_modified_time_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_all_day_event_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_all_day_event_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_location_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_location_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_reminder_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_reminder_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_frequency_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_frequency_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_interval_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_interval_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_count_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_count_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_until_date_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_until_date_n, NEGATIVE_TC_IDX }, + + { utc_social_calendar_calendar_event_get_set_recurrence_byday_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_byday_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_bysetpos_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_bysetpos_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_bymonthday_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_bymonthday_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_bymonth_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_bymonth_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_week_start_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_recurrence_week_start_n, NEGATIVE_TC_IDX }, + + { utc_social_calendar_calendar_event_get_set_start_time_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_start_time_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_end_time_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_set_end_time_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_insert_to_db_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_insert_to_db_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_from_db_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_from_db_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_db_id_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_db_id_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_calendar_book_db_id_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_calendar_book_db_id_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_update_to_db_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_update_to_db_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_delete_from_db_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_delete_from_db_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_add_attendee_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_add_attendee_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_add_attendee_with_contact_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_add_attendee_with_contact_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_remove_attendee_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_remove_attendee_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_attendee_iterator_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_event_get_attendee_iterator_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_event_get_set_categories_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_get_set_categories_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_event_get_set_recurrence_week_start_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_get_set_recurrence_week_start_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_event_get_set_busy_status_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_get_set_busy_status_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_event_search_event_by_version_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_search_event_by_version_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_event_free_event_array_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_free_event_array_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_event_free_modified_event_array_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_free_modified_event_array_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_event_search_event_by_calendar_book_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_search_event_by_calendar_book_n, NEGATIVE_TC_IDX }, + + { utc_social_calendar_event_search_extend_instance_by_period_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_search_extend_instance_by_period_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_event_search_all_day_extend_instance_by_period_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_search_all_day_extend_instance_by_period_n, NEGATIVE_TC_IDX }, + + { utc_social_calendar_event_delete_recurrence_instance_from_db_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_delete_recurrence_instance_from_db_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_event_delete_recurrence_all_day_instance_from_db_p, POSITIVE_TC_IDX}, + { utc_social_calendar_event_delete_recurrence_all_day_instance_from_db_n, NEGATIVE_TC_IDX}, + { utc_social_calendar_event_get_set_exdate_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_get_set_exdate_n, NEGATIVE_TC_IDX }, + + { utc_social_calendar_event_get_event_array_from_vcalendar_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_get_event_array_from_vcalendar_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_event_get_vcalendar_from_db_p, POSITIVE_TC_IDX }, + { utc_social_calendar_event_get_vcalendar_from_db_n, NEGATIVE_TC_IDX }, + + { NULL, 0 }, +}; + +calendar_event_h _dts_event = NULL; + +static void startup(void) +{ + /* start of TC */ + calendar_event_create(&_dts_event); + calendar_event_set_subject(_dts_event, "Event test subject"); + calendar_event_set_description(_dts_event, "Event test description"); +} + +static void cleanup(void) +{ + /* end of TC */ + calendar_event_destroy(_dts_event); +} + +bool dts_calendar_event_cb(calendar_event_h event, void *user_data) +{ + char *subject = NULL; + calendar_event_get_subject(event, &subject); + printf("# subject : %s\n", subject); + return true; +} + +bool dts_calendar_query_event_cb(calendar_event_h event, void *user_data) +{ + return false; +} + +static void utc_social_calendar_calendar_event_create_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_CREATE; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + calendar_event_destroy(event); + dts_pass(api_name); + } + else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_create_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_CREATE; + + if((ret = calendar_event_create(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(api_name); + } + else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_destroy_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_DESTROY; + bool success = false; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_destroy(event)) == CALENDAR_ERROR_NONE){ + success = true; + } + } + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_destroy_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_DESTROY; + + if((ret = calendar_event_destroy(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(api_name); + } + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); +} + +int dts_event_db_id_inserted = -1; +static void utc_social_calendar_calendar_event_get_db_id_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_DB_ID; + bool success = false; + int db_id = -1; + + calendar_event_h event = NULL; + calendar_connect(); + if((ret = calendar_event_get_from_db(dts_event_db_id_inserted, &event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_db_id(event, &db_id)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + calendar_event_destroy(event); + calendar_disconnect(); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_db_id_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_DB_ID; + + if((ret = calendar_event_get_db_id(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_calendar_book_db_id_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_CALENDAR_DB_ID; + bool success = false; + int db_id = -1; + + if((ret = calendar_event_get_calendar_book_db_id(_dts_event, &db_id)) == CALENDAR_ERROR_NONE) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_calendar_book_db_id_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_CALENDAR_DB_ID; + bool success = false; + + if((ret = calendar_event_get_calendar_book_db_id(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } + +} + +static void utc_social_calendar_calendar_event_get_set_subject_n(void) +{ + if(calendar_event_set_subject(NULL, "subject") == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_subject(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_SUBJECT); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_SUBJECT); +} + +static void utc_social_calendar_calendar_event_get_set_subject_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_SUBJECT; + bool success = false; + char* subject = NULL; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_subject(event, "subject")) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_subject(event, &subject)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + if(subject != NULL) { + free(subject); + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_description_n(void) +{ + if(calendar_event_set_description(NULL, "description") == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_description(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_DESCRIPTION); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_DESCRIPTION); +} + +static void utc_social_calendar_calendar_event_get_set_description_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_DESCRIPTION; + bool success = false; + calendar_event_h event = NULL; + char* description = NULL; + + if(calendar_event_create(&event) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_description(event, "description")) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_description(event, &description)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + if(description != NULL) { + free(description); + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_all_day_event_n(void) +{ + if(calendar_event_set_all_day_event(NULL, 2012, 1, 1, 2013, 12 ,31) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_all_day_event(NULL, NULL, NULL, NULL, NULL, NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_IS_ALL_DAY_EVENT); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_IS_ALL_DAY_EVENT); +} + +static void utc_social_calendar_calendar_event_get_set_timezone_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_TIMEZONE; + bool success = false; + + calendar_event_h event = NULL; + char* timezone = NULL; + + calendar_event_create(&event); + if((ret = calendar_event_set_timezone(event, "Seoul")) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_timezone(event, &timezone)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + + if(timezone != NULL) { + free(timezone); + } + calendar_event_destroy(event); + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_timezone_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_TIMEZONE; + bool success = false; + + if((ret = calendar_event_set_timezone(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_event_get_timezone(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_visibility_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_TIMEZONE; + bool success = false; + + calendar_event_h event = NULL; + calendar_visibility_e visibility = 0; + + calendar_event_create(&event); + if((ret = calendar_event_set_visibility(event, CALENDAR_VISIBILITY_PRIVATE)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_visibility(event, &visibility)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + calendar_event_destroy(event); + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_visibility_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_VISIBILITY; + bool success = false; + + if((ret = calendar_event_set_visibility(NULL, 0)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_event_get_visibility(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_last_modified_time_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_LAST_MODIFIED_TIME; + bool success = false; + + calendar_event_h event = NULL; + long long int lastmodifiedtime = 0; + + calendar_event_create(&event); + if((ret = calendar_event_get_last_modified_time(event, &lastmodifiedtime)) == CALENDAR_ERROR_NONE) { + success = true; + } + calendar_event_destroy(event); + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_last_modified_time_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_LAST_MODIFIED_TIME; + bool success = false; + + if((ret = calendar_event_get_last_modified_time(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_all_day_event_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_IS_ALL_DAY_EVENT; + int start_year, start_month, start_day; + int end_year, end_month, end_day; + bool success = false; + + calendar_event_h event = NULL; + if(calendar_event_create(&event) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_all_day_event(event, 2012, 1, 1, 2013, 12 ,31)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_all_day_event(event, + &start_year, &start_month, &start_day, + &end_year, &end_month, &end_day)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_location_n(void) +{ + if(calendar_event_set_location(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_location(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_LOCATION); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_LOCATION); +} + +static void utc_social_calendar_calendar_event_get_set_location_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_LOCATION; + bool success = false; + char* location = NULL; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_location(event, "location")) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_location(event, &location)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + if(location != NULL) { + free(location); + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_insert_to_db_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_INSERT_TO_DB; + bool success = false; + + calendar_event_h event = NULL; + calendar_connect(); + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + calendar_event_set_subject(event, "Event test subject"); + calendar_event_set_description(event, "Event test description"); + if((ret = calendar_event_insert_to_db(event, 1, &dts_event_db_id_inserted)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + calendar_event_destroy(event); + calendar_disconnect(); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_insert_to_db_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_INSERT_TO_DB; + + if((ret = calendar_event_insert_to_db(NULL, 1, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(api_name); + } + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); +} + +static void utc_social_calendar_calendar_event_delete_from_db_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_DELETE_FROM_DB; + bool success = false; + + calendar_connect(); + if((ret = calendar_event_delete_from_db(dts_event_db_id_inserted)) == CALENDAR_ERROR_NONE) { + success = true; + } + calendar_disconnect(); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_delete_from_db_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_DELETE_FROM_DB; + + if((ret = calendar_event_delete_from_db(-1)) == CALENDAR_ERROR_INVALID_PARAMETER) { // ?? + dts_pass(api_name); + } + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); +} + +static void utc_social_calendar_calendar_event_update_to_db_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_UPDATE_TO_DB; + bool success = false; + + calendar_event_h event = NULL; + calendar_connect(); + if((ret = calendar_event_get_from_db(dts_event_db_id_inserted, &event)) == CALENDAR_ERROR_NONE) { + calendar_event_set_subject(event, "DTS subject updated"); + calendar_event_set_description(event, "DTS description updated"); + if((ret = calendar_event_update_to_db(event)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + calendar_event_destroy(event); + calendar_disconnect(); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_update_to_db_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_UPDATE_TO_DB; + + if((ret = calendar_event_update_to_db(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(api_name); + } + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); +} + +static void utc_social_calendar_calendar_event_get_from_db_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_FROM_DB; + bool success = false; + + calendar_event_h event = NULL; + calendar_connect(); + if((ret = calendar_event_get_from_db(dts_event_db_id_inserted, &event)) == CALENDAR_ERROR_NONE) { + success = true; + } + calendar_event_destroy(event); + calendar_disconnect(); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_from_db_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_FROM_DB; + + if((ret = calendar_event_get_from_db(0, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(api_name); + } + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); +} + +static void utc_social_calendar_calendar_event_get_set_start_time_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_START_TIME; + bool success = false; + long long int start_time = 0; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_start_time(event, start_time)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_start_time(event, &start_time)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_start_time_n(void) +{ + long long int start_time = 0; + if(calendar_event_set_start_time(NULL, start_time) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_start_time(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_START_TIME); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_START_TIME); +} + +static void utc_social_calendar_calendar_event_get_set_end_time_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_END_TIME; + bool success = false; + long long int end_time = 0; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_end_time(event, end_time)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_end_time(event, &end_time)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_end_time_n(void) +{ + long long int end_time = 0; + if(calendar_event_set_end_time(NULL, end_time) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_end_time(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_END_TIME); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_END_TIME); +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_frequency_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_RECURRENCE_FREQUENCY; + bool success = false; + calendar_recurrence_frequency_e frequency = CALENDAR_RECURRENCE_NONE; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_recurrence_frequency(event, frequency)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_recurrence_frequency(event, &frequency)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_frequency_n(void) +{ + calendar_recurrence_frequency_e frequency = CALENDAR_RECURRENCE_NONE; + if(calendar_event_set_recurrence_frequency(NULL, frequency) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_recurrence_frequency(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_RECURRENCE_FREQUENCY); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_RECURRENCE_FREQUENCY); +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_interval_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_INTERVAL; + bool success = false; + int interval = 100; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_recurrence_interval(event, interval)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_recurrence_interval(event, &interval)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_interval_n(void) +{ + int interval = 100; + if(calendar_event_set_recurrence_interval(NULL, interval) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_recurrence_interval(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_INTERVAL); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_INTERVAL); +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_count_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_COUNT; + bool success = false; + int recurrence_count = 1000; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_recurrence_count(event, recurrence_count)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_recurrence_count(event, &recurrence_count)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_count_n(void) +{ + int recurrence_count = 1000; + if(calendar_event_set_recurrence_count(NULL, recurrence_count) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_recurrence_count(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_COUNT); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_COUNT); +} + +/* +static void utc_social_calendar_calendar_event_get_set_recurrence_week_flag_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_RECURRENCE_WEEK_FLAG; + bool success = false; + int week_flag = CALENDAR_WEEK_FLAG_SUN | CALENDAR_WEEK_FLAG_MON; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_recurrence_week_flag(event, week_flag)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_recurrence_week_flag(event, &week_flag)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_week_flag_n(void) +{ + calendar_week_flag_e week_flag = CALENDAR_WEEK_FLAG_SUN | CALENDAR_WEEK_FLAG_MON; + if(calendar_event_set_recurrence_week_flag(NULL, week_flag) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_recurrence_week_flag(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_RECURRENCE_WEEK_FLAG); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_RECURRENCE_WEEK_FLAG); +} +*/ +static void utc_social_calendar_calendar_event_get_set_reminder_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_REMINDER; + int reminder_interval = 5; + calendar_reminder_interval_type_e reminder_interval_type = CALENDAR_REMINDER_TIME_UNIT_HOUR; + bool success = false; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_reminder(event, reminder_interval_type, reminder_interval)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_reminder(event, &reminder_interval,&reminder_interval)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_reminder_n(void) +{ + calendar_reminder_interval_type_e reminder_interval_type = CALENDAR_REMINDER_TIME_UNIT_HOUR; + int reminder_interval = 5; + + if(calendar_event_set_reminder(NULL, reminder_interval_type,reminder_interval) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_reminder(NULL, NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_REMINDER); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_REMINDER); +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_until_date_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_RECURRENCE_UNTIL_TIME; + bool success = false; + + long long int recurrence_until_date = 0; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_recurrence_until_date(event, recurrence_until_date)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_recurrence_until_date(event, &recurrence_until_date)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + + success = true; + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_until_date_n(void) +{ + long long int recurrence_until_date = 0; + + if(calendar_event_set_recurrence_until_date(NULL, recurrence_until_date) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_recurrence_until_date(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_RECURRENCE_UNTIL_TIME); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_RECURRENCE_UNTIL_TIME); +} + +static void utc_social_calendar_calendar_event_add_attendee_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_ADD_ATTENDEE; + + bool success = false; + + calendar_event_h event = NULL; + calendar_attendee_h attendee = NULL; + + if(calendar_event_create(&event) == CALENDAR_ERROR_NONE) { + if(calendar_event_add_attendee(event, &attendee) == CALENDAR_ERROR_NONE){ + success = true; + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_add_attendee_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_ADD_ATTENDEE; + + if((ret = calendar_event_add_attendee(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(api_name); + } + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); +} + +static void utc_social_calendar_calendar_event_add_attendee_with_contact_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_ADD_ATTENDEE_WITH_CONTACT; + + bool success = false; + + // insert contact--------------------------- + contact_h contact = NULL; + contact_email_h email = NULL; + contact_number_h number = NULL; + int contact_db_id = 0; + contact_create(&contact); + contact_email_create(&email); + contact_email_set_type(email, CONTACT_EMAIL_TYPE_HOME); + contact_email_set_address(email, "dts@dts.com"); + contact_number_create(&number); + contact_number_set_type(number, CONTACT_NUMBER_TYPE_HOME); + contact_number_set_number(number, "01100009999"); + + contact_create(&contact); + contact_add_email(contact, email); + contact_add_number(contact, number); + contacts_connect(); + contact_insert_to_db(contact, 0, &contact_db_id); + + contact_email_destroy(email); + contact_number_destroy(number); + contact_destroy(contact); + //---------------------------------------- + + calendar_event_h event = NULL; + calendar_attendee_h attendee = NULL; + + if(calendar_event_create(&event) == CALENDAR_ERROR_NONE) { + if(calendar_event_add_attendee_with_contact(event, contact_db_id, &attendee) == CALENDAR_ERROR_NONE){ + success = true; + } + } + + contacts_disconnect(); + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_add_attendee_with_contact_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_ADD_ATTENDEE_WITH_CONTACT; + + if((ret = calendar_event_add_attendee_with_contact(NULL, 0, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(api_name); + } + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); +} + +static void utc_social_calendar_calendar_event_remove_attendee_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_REMOVE_ATTENDEE; + bool success = false; + calendar_event_h event = NULL; + calendar_attendee_h attendee = NULL; + + if(calendar_event_create(&event) == CALENDAR_ERROR_NONE) { + if(calendar_event_add_attendee(event, &attendee) == CALENDAR_ERROR_NONE){ + calendar_attendee_set_name(attendee, "name"); + if((ret = calendar_event_remove_attendee(event, attendee)) == CALENDAR_ERROR_NONE){ + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_remove_attendee_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_REMOVE_ATTENDEE; + + if((ret = calendar_event_remove_attendee(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(api_name); + } + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); +} + +static void utc_social_calendar_calendar_event_get_attendee_iterator_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_ATTENDEE_ITERATOR; + bool success = false; + calendar_event_h event = NULL; + calendar_attendee_h attendee = NULL; + calendar_attendee_iterator_h iterator = NULL; + + if(calendar_event_create(&event) == CALENDAR_ERROR_NONE && calendar_event_add_attendee(event, &attendee) == CALENDAR_ERROR_NONE){ + calendar_attendee_set_name(attendee, "name"); + if((ret = calendar_event_get_attendee_iterator(event, &iterator)) == CALENDAR_ERROR_NONE){ + success = true; + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_attendee_iterator_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_ATTENDEE_ITERATOR; + + if((ret = calendar_event_get_attendee_iterator(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(api_name); + } + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_byday_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYDAY; + bool success = false; + char* byday = "xxxxxxxxxxxxxxxxx"; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_recurrence_byday(event, byday)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_recurrence_byday(event, &byday)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_byday_n(void) +{ + char* byday = "xxxxxxxxxxxxxxxxx"; + if(calendar_event_set_recurrence_byday(NULL, byday) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_recurrence_byday(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYDAY); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYDAY); +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_bysetpos_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYSETPOS; + bool success = false; + char* bysetpos = "xxxxxxxxxxxxxxxxx"; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_recurrence_bysetpos(event, bysetpos)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_recurrence_bysetpos(event, &bysetpos)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_bysetpos_n(void) +{ + char* bysetpos = "xxxxxxxxxxxxxxxxx"; + if(calendar_event_set_recurrence_bysetpos(NULL, bysetpos) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_recurrence_bysetpos(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYSETPOS); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYSETPOS); +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_bymonthday_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYMONTHDAY; + bool success = false; + char* bymonthday = "xxxxxxxxxxxxxxxxx"; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_recurrence_bymonthday(event, bymonthday)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_recurrence_bymonthday(event, &bymonthday)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_bymonthday_n(void) +{ + char* bymonthday = "xxxxxxxxxxxxxxxxx"; + if(calendar_event_set_recurrence_bymonthday(NULL, bymonthday) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_recurrence_bymonthday(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYMONTHDAY); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYMONTHDAY); +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_bymonth_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYMONTH; + bool success = false; + char* bymonth = "xxxxxxxxxxxxxxxxx"; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_recurrence_bymonth(event, bymonth)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_recurrence_bymonth(event, &bymonth)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_bymonth_n(void) +{ + char* bymonth = "xxxxxxxxxxxxxxxxx"; + if(calendar_event_set_recurrence_bymonth(NULL, bymonth) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_recurrence_bymonth(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYMONTH); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYMONTH); +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_week_start_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYWEEKSTART; + bool success = false; + calendar_week_flag_e week_start = CALENDAR_WEEK_FLAG_SUN; + + calendar_event_h event = NULL; + if((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_set_recurrence_week_start(event, week_start)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_event_get_recurrence_week_start(event, &week_start)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + } + calendar_event_destroy(event); + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_set_recurrence_week_start_n(void) +{ + calendar_week_flag_e week_start = CALENDAR_WEEK_FLAG_SUN; + if(calendar_event_set_recurrence_week_start(NULL, week_start) == CALENDAR_ERROR_INVALID_PARAMETER + && calendar_event_get_recurrence_week_start(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYWEEKSTART); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_BYWEEKSTART); +} +/* +static void utc_social_calendar_calendar_event_get_from_vcalendar_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_FROM_VCALENDAR; + + bool success = false; + + calendar_event_h event = NULL; + char* vcalendar_stream = NULL; + + calendar_event_get_vcalendar_from_event(_dts_event, &vcalendar_stream); + if(calendar_event_get_from_vcalendar(vcalendar_stream, &event) == CALENDAR_ERROR_NONE){ + success = true; + } + + calendar_event_destroy(event); + if(vcalendar_stream != NULL) + free(vcalendar_stream); + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_from_vcalendar_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_FROM_VCALENDAR; + + bool success = false; + + if(calendar_event_get_from_vcalendar(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_vcalendar_from_event_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_VCALENDAR_FROM_EVENT; + + bool success = false; + + char* vcalendar_stream = NULL; + + if(calendar_event_get_vcalendar_from_event(_dts_event, &vcalendar_stream) == CALENDAR_ERROR_NONE){ + success = true; + } + + if(vcalendar_stream != NULL) + free(vcalendar_stream); + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_event_get_vcalendar_from_event_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_EVENT_GET_VCALENDAR_FROM_EVENT; + + bool success = false; + + if(calendar_event_get_vcalendar_from_event(NULL, NULL) == CALENDAR_ERROR_INVALID_PARAMETER){ + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar : %d", ret); + dts_fail(api_name); + } +} +*/ + +static void utc_social_calendar_event_get_set_categories_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + char* categories = NULL; + + calendar_event_h event = NULL; + if ((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if ((ret = calendar_event_set_categories(event, "category1,category2,category3")) == CALENDAR_ERROR_NONE) { + if ((ret = calendar_event_get_categories(event, &categories)) == CALENDAR_ERROR_NONE) { + pass = true; + if (categories != NULL) { + free(categories); + } + } + } + calendar_event_destroy(event); + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_CATEGORIES); + } else { + dts_message(API_NAME_CALENDAR_EVENT_GET_SET_CATEGORIES, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_CATEGORIES); + } +} + +static void utc_social_calendar_event_get_set_categories_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + if ((ret = calendar_event_set_categories(NULL, "category1,category2,category3")) == CALENDAR_ERROR_INVALID_PARAMETER + && (ret = calendar_event_get_categories(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_CATEGORIES); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_CATEGORIES); +} + +static void utc_social_calendar_event_get_set_recurrence_week_start_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + calendar_week_flag_e recurrence_week = CALENDAR_WEEK_FLAG_NONE; + + calendar_event_h event = NULL; + if ((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if ((ret = calendar_event_set_recurrence_week_start(event, CALENDAR_WEEK_FLAG_SUN)) == CALENDAR_ERROR_NONE) { + if ((ret = calendar_event_get_recurrence_week_start(event, &recurrence_week)) == CALENDAR_ERROR_NONE) { + pass = true; + } + } + calendar_event_destroy(event); + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_WEEK_START); + } else { + dts_message(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_WEEK_START, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_WEEK_START); + } +} + +static void utc_social_calendar_event_get_set_recurrence_week_start_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + if ((ret = calendar_event_set_recurrence_week_start(NULL, CALENDAR_WEEK_FLAG_SUN)) == CALENDAR_ERROR_INVALID_PARAMETER + && (ret = calendar_event_get_recurrence_week_start(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_WEEK_START); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_RECURRENCE_WEEK_START); +} + +static void utc_social_calendar_event_get_set_busy_status_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + calendar_event_busy_status_e busy_status; + + calendar_event_h event = NULL; + if ((ret = calendar_event_create(&event)) == CALENDAR_ERROR_NONE) { + if ((ret = calendar_event_set_busy_status(event, CALENDAR_EVENT_BUSY_STATUS_BUSY)) == CALENDAR_ERROR_NONE) { + if ((ret = calendar_event_get_busy_status(event, &busy_status)) == CALENDAR_ERROR_NONE) { + pass = true; + } + } + calendar_event_destroy(event); + } + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_BUSY_STATUS); + } else { + dts_message(API_NAME_CALENDAR_EVENT_GET_SET_BUSY_STATUS, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_BUSY_STATUS); + } +} + +static void utc_social_calendar_event_get_set_busy_status_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + if ((ret = calendar_event_set_busy_status(NULL, CALENDAR_EVENT_BUSY_STATUS_BUSY)) == CALENDAR_ERROR_INVALID_PARAMETER + && (ret = calendar_event_get_busy_status(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_BUSY_STATUS); + } + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_BUSY_STATUS); +} + +static void utc_social_calendar_event_search_event_by_version_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + pcalendar_modified_event_s* modified_event_array = NULL; + int length = 0; + + calendar_connect(); + int calendar_db_version = 0; + + if ((ret = calendar_event_search_event_by_version(DEFAULT_CALENDAR_BOOK_DB_ID, calendar_db_version, &modified_event_array, &length)) == CALENDAR_ERROR_NONE) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_VERSION); + } else { + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_VERSION, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_VERSION); + } +} + +static void utc_social_calendar_event_search_event_by_version_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + int length = 0; + + calendar_connect(); + + if ((ret = calendar_event_search_event_by_version(DEFAULT_CALENDAR_BOOK_DB_ID, 0, NULL, &length)) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_VERSION); + } else { + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_VERSION, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_VERSION); + } +} + +static void utc_social_calendar_event_free_event_array_p(void) +{ + bool pass = false; + int ret = CALENDAR_ERROR_NONE; + calendar_event_h* event_array = NULL; + int length; + + char *vcal; + vcal = strdup(SAMPLE_VCAL2); + + if (!vcal) { + dts_message(API_NAME_CALENDAR_EVENT_FREE_EVENT_ARRAY, "strdup failed"); + dts_fail(API_NAME_CALENDAR_EVENT_FREE_EVENT_ARRAY); + return; + } + + if ((ret = calendar_event_get_event_array_from_vcalendar(vcal, &event_array, &length)) == CALENDAR_ERROR_NONE) { + if ((ret = calendar_event_free_event_array(event_array)) == CALENDAR_ERROR_NONE) { + pass = true; + } + } else { + dts_message(API_NAME_CALENDAR_EVENT_FREE_EVENT_ARRAY, "Error while setting up test"); + } + free(vcal); + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_FREE_EVENT_ARRAY); + } else { + dts_message(API_NAME_CALENDAR_EVENT_FREE_EVENT_ARRAY, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_FREE_EVENT_ARRAY); + } +} + +static void utc_social_calendar_event_free_event_array_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + if ((ret = calendar_event_free_event_array(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_FREE_EVENT_ARRAY); + } else { + dts_message(API_NAME_CALENDAR_EVENT_FREE_EVENT_ARRAY, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_FREE_EVENT_ARRAY); + } +} + +static void utc_social_calendar_event_free_modified_event_array_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + pcalendar_modified_event_s *modified_event_array = NULL; + + if ((ret = calendar_event_free_modified_event_array(modified_event_array)) == CALENDAR_ERROR_NONE) { + pass = true; + } + + // TODO: more elaborate test-case needed! + pass = true; + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_FREE_MODIFIED_EVENT_ARRAY); + } else { + dts_message(API_NAME_CALENDAR_EVENT_FREE_MODIFIED_EVENT_ARRAY, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_FREE_MODIFIED_EVENT_ARRAY); + } +} + +static void utc_social_calendar_event_free_modified_event_array_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + if ((ret = calendar_event_free_modified_event_array(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_FREE_MODIFIED_EVENT_ARRAY); + } else { + dts_message(API_NAME_CALENDAR_EVENT_FREE_MODIFIED_EVENT_ARRAY, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_FREE_MODIFIED_EVENT_ARRAY); + } +} + +static void utc_social_calendar_event_search_event_by_calendar_book_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + calendar_event_h* event_array = NULL; + int length = 0; + + if ((ret = calendar_event_search_event_by_calendar_book(DEFAULT_CALENDAR_BOOK_DB_ID, &event_array, &length)) == CALENDAR_ERROR_NONE) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_CALENDAR_BOOK); + } else { + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_CALENDAR_BOOK, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_CALENDAR_BOOK); + } +} + +static void utc_social_calendar_event_search_event_by_calendar_book_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + calendar_event_h* event_array = NULL; + int length = 0; + + if ((ret = calendar_event_search_event_by_calendar_book(DEFAULT_CALENDAR_BOOK_DB_ID, NULL, &length)) == CALENDAR_ERROR_INVALID_PARAMETER && + (ret = calendar_event_search_event_by_calendar_book(DEFAULT_CALENDAR_BOOK_DB_ID, &event_array, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_CALENDAR_BOOK); + } else { + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_CALENDAR_BOOK, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_SEARCH_EVENT_BY_CALENDAR_BOOK); + } +} + +static int _create_sample_event(const char subject[], long long int start, long long int end) +{ + calendar_event_h event = NULL; + int event_id; + + if (calendar_event_create(&event) != CALENDAR_ERROR_NONE) return 1; + if (calendar_event_set_subject(event, subject) != CALENDAR_ERROR_NONE) return 2; + if (calendar_event_set_start_time(event, start) != CALENDAR_ERROR_NONE) return 3; + if (calendar_event_set_end_time(event, end) != CALENDAR_ERROR_NONE) return 4; + if (calendar_event_insert_to_db(event, DEFAULT_CALENDAR_BOOK_DB_ID, &event_id) != CALENDAR_ERROR_NONE) + return 5; + if(calendar_event_destroy(event) != CALENDAR_ERROR_NONE) return 6; + return 0; +} + +static void utc_social_calendar_event_search_extend_instance_by_period_p(void) +{ + calendar_connect(); + int ret; + if ((ret = _create_sample_event("A", 0, 200))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + if ((_create_sample_event("B", 100, 300))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + if ((_create_sample_event("C", 200, 400))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + if ((_create_sample_event("D", 300, 500))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + if ((_create_sample_event("E", 400, 600))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + if ((_create_sample_event("F", 500, 700))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + if ((_create_sample_event("G", 600, 800))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + + calendar_event_h *event_array = NULL; + int length; + + bool pass = true; + ret = calendar_event_search_extend_instance_by_period(DEFAULT_CALENDAR_BOOK_DB_ID, + 300, 500, &event_array, &length); // B?, C, D, E, F? + if (ret != CALENDAR_ERROR_NONE) + pass = false; + + calendar_disconnect(); + + int i; + for (i = 0; i < length; i++) { + char* subject = NULL; + calendar_event_get_subject(event_array[i], &subject); + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Event : %s", subject); + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_SEARCH_EXTEND_EVENT_INSTANCE_BY_PERIOD); + } else { + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_EXTEND_EVENT_INSTANCE_BY_PERIOD, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_SEARCH_EXTEND_EVENT_INSTANCE_BY_PERIOD); + } +} + +static void utc_social_calendar_event_search_extend_instance_by_period_n(void) +{ + calendar_event_h *event_array = NULL; + int length; + + bool pass = false; + + calendar_connect(); + if ((calendar_event_search_extend_instance_by_period(DEFAULT_CALENDAR_BOOK_DB_ID, + 300, 500, &event_array, NULL) == CALENDAR_ERROR_INVALID_PARAMETER) && + (calendar_event_search_extend_instance_by_period(DEFAULT_CALENDAR_BOOK_DB_ID, + 300, 500, NULL, &length) == CALENDAR_ERROR_INVALID_PARAMETER)) + pass = true; + calendar_disconnect(); + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_SEARCH_EXTEND_EVENT_INSTANCE_BY_PERIOD); + } else { + dts_fail(API_NAME_CALENDAR_EVENT_SEARCH_EXTEND_EVENT_INSTANCE_BY_PERIOD); + } +} + +static int _create_sample_all_day_event(const char subject[], + int period_start_year, int period_start_month, int period_start_day, + int period_end_year, int period_end_month, int period_end_day) +{ + calendar_event_h event = NULL; + int event_id; + + if (calendar_event_create(&event) != CALENDAR_ERROR_NONE) return 1; + if (calendar_event_set_subject(event, subject) != CALENDAR_ERROR_NONE) return 2; + if (calendar_event_set_all_day_event(event, + period_start_year, period_start_month, period_start_day, + period_end_year, period_end_month, period_end_day) != CALENDAR_ERROR_NONE) return 3; + if (calendar_event_insert_to_db(event, + DEFAULT_CALENDAR_BOOK_DB_ID, &event_id) != CALENDAR_ERROR_NONE) return 4; + if (calendar_event_destroy(event) != CALENDAR_ERROR_NONE) return 5; + return 0; +} + +static void utc_social_calendar_event_search_all_day_extend_instance_by_period_p(void) +{ + calendar_connect(); + int ret; + if ((ret = _create_sample_all_day_event("A", 2000, 1, 1, 2002, 12, 31))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + if ((ret = _create_sample_all_day_event("B", 2001, 1, 1, 2003, 12, 31))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + if ((ret = _create_sample_all_day_event("C", 2002, 1, 1, 2004, 12, 31))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + if ((ret = _create_sample_all_day_event("D", 2003, 1, 1, 2005, 12, 31))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + if ((ret = _create_sample_all_day_event("E", 2004, 1, 1, 2006, 12, 31))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + if ((ret = _create_sample_all_day_event("F", 2005, 1, 1, 2007, 12, 31))) + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Error creating precondition(%d)", ret); + + calendar_event_h *event_array = NULL; + int length; + + bool pass = false; + if ((ret = calendar_event_search_all_day_extend_instance_by_period(DEFAULT_CALENDAR_BOOK_DB_ID, + 2003, 2, 1, 2004, 12, 30, &event_array, &length)) == CALENDAR_ERROR_NONE) { // B, C, D, E, F + pass = true; + } + + calendar_disconnect(); + + int i; + for (i = 0; i < length; i++) { + char* subject = NULL; + calendar_event_get_subject(event_array[i], &subject); + dts_message(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD, + "Event : %s", subject); + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD); + } else { + dts_fail(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD); + } +} + +static void utc_social_calendar_event_search_all_day_extend_instance_by_period_n(void) +{ + calendar_event_h *event_array = NULL; + int length; + + bool pass = false; + + calendar_connect(); + if ((calendar_event_search_all_day_extend_instance_by_period(DEFAULT_CALENDAR_BOOK_DB_ID, + 2003, 2, 1, 2004, 12, 30, &event_array, NULL) == CALENDAR_ERROR_INVALID_PARAMETER) && + (calendar_event_search_all_day_extend_instance_by_period(DEFAULT_CALENDAR_BOOK_DB_ID, + 2003, 2, 1, 2004, 12, 30, NULL, &length) == CALENDAR_ERROR_INVALID_PARAMETER)) + pass = true; + calendar_disconnect(); + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD); + } else { + dts_fail(API_NAME_CALENDAR_EVENT_SEARCH_ALL_DAY_EXTEND_EVENT_INSTANCE_BY_PERIOD); + } +} + +static int _create_sample_recurrence_event(calendar_event_h *event, const char subject[], + long long int start, long long int end, long long int until, int *event_id) +{ + calendar_event_h event_h = NULL; + int id; + + if (calendar_event_create(&event_h) != CALENDAR_ERROR_NONE) return 1; + if (calendar_event_set_subject(event_h, subject) != CALENDAR_ERROR_NONE) return 2; + if (calendar_event_set_start_time(event_h, start) != CALENDAR_ERROR_NONE) return 3; + if (calendar_event_set_end_time(event_h, end) != CALENDAR_ERROR_NONE) return 4; + if (calendar_event_set_recurrence_frequency(event_h, CALENDAR_RECURRENCE_DAILY) + != CALENDAR_ERROR_NONE) return 5; + if (calendar_event_set_recurrence_interval(event_h, 1) != CALENDAR_ERROR_NONE) return 7; + if (calendar_event_set_recurrence_count(event_h, 10) != CALENDAR_ERROR_NONE) return 8; + if (calendar_event_insert_to_db(event_h, DEFAULT_CALENDAR_BOOK_DB_ID, &id) + != CALENDAR_ERROR_NONE) return 9; + if (event) *event = event_h; + if (event_id) *event_id = id; + return 0; +} + +static int _create_sample_all_day_recurrence_event(const char subject[], + int sy, int sm, int sd, int ey, int em, int ed, int *event_id) +{ + calendar_event_h event = NULL; + int id; + + if (calendar_event_create(&event) != CALENDAR_ERROR_NONE) return 1; + if (calendar_event_set_subject(event, subject) != CALENDAR_ERROR_NONE) return 2; + if (calendar_event_set_all_day_event(event, sy, sm, sd, ey, em, ed) != CALENDAR_ERROR_NONE) return 3; + if (calendar_event_set_recurrence_frequency(event, CALENDAR_RECURRENCE_DAILY) + != CALENDAR_ERROR_NONE) return 4; + if (calendar_event_set_recurrence_interval(event, 1) != CALENDAR_ERROR_NONE) return 5; + if (calendar_event_set_recurrence_count(event, 10) != CALENDAR_ERROR_NONE) return 6; + if (calendar_event_insert_to_db(event, DEFAULT_CALENDAR_BOOK_DB_ID, &id) + != CALENDAR_ERROR_NONE) return 7; + *event_id = id; + return 0; +} + +static void utc_social_calendar_event_delete_recurrence_instance_from_db_p(void) +{ + int ret, event_id; + + calendar_connect(); + + /*>>>>> pre-condition:make normal instance */ + ret = _create_sample_recurrence_event(NULL, "A", 5000000, 5030000, 8000000, &event_id); + if (ret) { + dts_message(API_NAME_CALENDAR_EVENT_DELETE_RECURRENCE_EVENT_INSTANCE_FROM_DB, + "Error creating precondition(%d)", ret); + } + /* end pre-condition <<<<<*/ + + ret = calendar_event_delete_recurrence_instance_from_db(event_id, 5000000); + + /*>>>>> post-condition:delete pre-condition */ + ret = calendar_event_delete_from_db(event_id); + if (ret != CALENDAR_ERROR_NONE) { + dts_message(API_NAME_CALENDAR_EVENT_DELETE_RECURRENCE_EVENT_INSTANCE_FROM_DB, + "Error deleting postcondition(%d)", ret); + } + /* end post-condition <<<<<*/ + calendar_disconnect(); + + if (ret == CALENDAR_ERROR_NONE) { + dts_pass(API_NAME_CALENDAR_EVENT_DELETE_RECURRENCE_EVENT_INSTANCE_FROM_DB); + } else { + dts_fail(API_NAME_CALENDAR_EVENT_DELETE_RECURRENCE_EVENT_INSTANCE_FROM_DB); + } +} + +static void utc_social_calendar_event_delete_recurrence_instance_from_db_n(void) +{ + int ret, event_id; + bool pass = false; + + calendar_connect(); + + /*>>>>> pre-condition:make normal instance */ + ret = _create_sample_recurrence_event(NULL, "A", 5000000, 5030000, 8000000, &event_id); + if (ret) { + dts_message(API_NAME_CALENDAR_EVENT_DELETE_RECURRENCE_EVENT_INSTANCE_FROM_DB, + "Error creating precondition(%d)", ret); + } + /* end pre-condition <<<<<*/ + + ret = calendar_event_delete_recurrence_instance_from_db(-1, 5000000); + if (ret == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + /*>>>>> post-condition:delete pre-condition */ + ret = calendar_event_delete_from_db(dts_event_db_id_inserted); + if (ret != CALENDAR_ERROR_NONE) { + dts_message(API_NAME_CALENDAR_EVENT_DELETE_RECURRENCE_EVENT_INSTANCE_FROM_DB, + "Error deleting postcondition(%d)", ret); + } + /* end post-condition <<<<<*/ + calendar_disconnect(); + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_DELETE_RECURRENCE_EVENT_INSTANCE_FROM_DB); + } else { + dts_fail(API_NAME_CALENDAR_EVENT_DELETE_RECURRENCE_EVENT_INSTANCE_FROM_DB); + } +} + +static void utc_social_calendar_event_delete_recurrence_all_day_instance_from_db_p(void) +{ + int ret, event_id; + bool pass = false; + + calendar_connect(); + + /*>>>>> pre-condition:make normal instance */ + ret = _create_sample_all_day_recurrence_event("B", 2012, 1, 1, 2012, 1, 1, &event_id); + if (ret) { + dts_message(API_NAME_CALENDAR_EVENT_DELETE_ALL_DAY_RECURRENCE_EVENT_INSTANCE_FROM_DB, + "Error creating precondition(%d)", ret); + } + /* end pre-condition <<<<<*/ + + ret = calendar_event_delete_recurrence_all_day_instance_from_db(event_id, 2012, 1, 1); + + /*>>>>> post-condition:delete pre-condition */ + ret = calendar_event_delete_from_db(event_id); + if (ret != CALENDAR_ERROR_NONE) { + dts_message(API_NAME_CALENDAR_EVENT_DELETE_ALL_DAY_RECURRENCE_EVENT_INSTANCE_FROM_DB, + "Error deleting postcondition(%d)", ret); + } + /* end post-condition <<<<<*/ + calendar_disconnect(); + + if (ret == CALENDAR_ERROR_NONE) { + dts_pass(API_NAME_CALENDAR_EVENT_DELETE_ALL_DAY_RECURRENCE_EVENT_INSTANCE_FROM_DB); + } else { + dts_fail(API_NAME_CALENDAR_EVENT_DELETE_ALL_DAY_RECURRENCE_EVENT_INSTANCE_FROM_DB); + } +} + +static void utc_social_calendar_event_delete_recurrence_all_day_instance_from_db_n(void) +{ + int ret, event_id; + bool pass = false; + + calendar_connect(); + + /*>>>>> pre-condition:make normal instance */ + ret = _create_sample_all_day_recurrence_event("B", 2012, 1, 1, 2012, 1, 1, &event_id); + if (ret) { + dts_message(API_NAME_CALENDAR_EVENT_DELETE_ALL_DAY_RECURRENCE_EVENT_INSTANCE_FROM_DB, + "Error creating precondition(%d)", ret); + } + /* end pre-condition <<<<<*/ + + ret = calendar_event_delete_recurrence_all_day_instance_from_db(-1, 2012, 1, 1); + if (ret == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + /*>>>>> post-condition:delete pre-condition */ + ret = calendar_event_delete_from_db(event_id); + if (ret != CALENDAR_ERROR_NONE) { + dts_message(API_NAME_CALENDAR_EVENT_DELETE_ALL_DAY_RECURRENCE_EVENT_INSTANCE_FROM_DB, + "Error deleting postcondition(%d)", ret); + } + /* end post-condition <<<<<*/ + calendar_disconnect(); + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_DELETE_ALL_DAY_RECURRENCE_EVENT_INSTANCE_FROM_DB,); + } else { + dts_fail(API_NAME_CALENDAR_EVENT_DELETE_ALL_DAY_RECURRENCE_EVENT_INSTANCE_FROM_DB,); + } +} + +static void utc_social_calendar_event_get_set_exdate_p(void) +{ + int ret, event_id; + bool pass = false; + calendar_event_h event = NULL; + char *exdate = NULL; + + calendar_connect(); + + /*>>>>> pre-condition:make normal instance */ + ret = _create_sample_recurrence_event(&event, "A", 5000000, 5030000, 8000000, &event_id); + ret |= calendar_event_delete_recurrence_instance_from_db(event_id, 5000000); + if (ret) { + dts_message(API_NAME_CALENDAR_EVENT_GET_SET_EXDATE, + "Error creating precondition(%d)", ret); + } + /* end pre-condition <<<<<*/ + + ret = calendar_event_get_recurrence_exdate(event, &exdate); + if (exdate) free(exdate); + + /*>>>>> post-condition:delete pre-condition */ + ret = calendar_event_delete_from_db(event_id); + if (ret != CALENDAR_ERROR_NONE) { + dts_message(API_NAME_CALENDAR_EVENT_DELETE_ALL_DAY_RECURRENCE_EVENT_INSTANCE_FROM_DB, + "Error deleting postcondition(%d)", ret); + } + /* end post-condition <<<<<*/ + calendar_disconnect(); + + if (ret == CALENDAR_ERROR_NONE) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_EXDATE); + } else { + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_EXDATE); + } +} + +static void utc_social_calendar_event_get_set_exdate_n(void) +{ + int ret, event_id; + bool pass = false; + calendar_event_h event = NULL; + char *exdate = NULL; + + calendar_connect(); + + /*>>>>> pre-condition:make normal instance */ + ret = _create_sample_recurrence_event(&event, "A", 5000000, 5030000, 8000000, &event_id); + ret |= calendar_event_delete_recurrence_instance_from_db(event_id, 5000000); + if (ret) { + dts_message(API_NAME_CALENDAR_EVENT_GET_SET_EXDATE, + "Error creating precondition(%d)", ret); + } + /* end pre-condition <<<<<*/ + + if ((calendar_event_get_recurrence_exdate(NULL, &exdate) == CALENDAR_ERROR_INVALID_PARAMETER) && + (calendar_event_get_recurrence_exdate(event, NULL) == CALENDAR_ERROR_INVALID_PARAMETER)) { + pass = true; + } + if (exdate) free(exdate); + + /*>>>>> post-condition:delete pre-condition */ + ret = calendar_event_delete_from_db(event_id); + if (ret != CALENDAR_ERROR_NONE) { + dts_message(API_NAME_CALENDAR_EVENT_DELETE_ALL_DAY_RECURRENCE_EVENT_INSTANCE_FROM_DB, + "Error deleting postcondition(%d)", ret); + } + /* end post-condition <<<<<*/ + calendar_disconnect(); + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_SET_EXDATE); + } else { + dts_fail(API_NAME_CALENDAR_EVENT_GET_SET_EXDATE); + } +} + +static void utc_social_calendar_event_get_event_array_from_vcalendar_p(void) // fail (UNRESOLVED) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + calendar_connect(); + + calendar_event_h* event_array = NULL; + int length; + + char *vcal; + vcal = strdup(SAMPLE_VCAL2); + + if (!vcal) { + dts_message(API_NAME_CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR, "strdup failed"); + dts_fail(API_NAME_CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR); + return; + } + + if ((ret = calendar_event_get_event_array_from_vcalendar(vcal, &event_array, &length)) == CALENDAR_ERROR_NONE) { + dts_message(API_NAME_CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR, "length : %d", length); + if (length == 1) + pass = true; + } + free(vcal); + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR); + } else { + dts_message(API_NAME_CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR); + } +} + +static void utc_social_calendar_event_get_event_array_from_vcalendar_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + calendar_connect(); + + calendar_event_h* event_array = NULL; + int length = 0; + + char *vcal; + vcal = strdup(SAMPLE_VCAL2); + + if (!vcal) { + dts_message(API_NAME_CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR, "strdup failed"); + dts_fail(API_NAME_CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR); + return; + } + + if ((ret = calendar_event_get_event_array_from_vcalendar(NULL, &event_array, &length)) == CALENDAR_ERROR_INVALID_PARAMETER && + (ret = calendar_event_get_event_array_from_vcalendar(vcal, NULL, &length)) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + free(vcal); + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR); + } else { + dts_message(API_NAME_CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_GET_EVENT_ARRAY_FROM_VCALENDAR); + } +} + +static void utc_social_calendar_event_get_vcalendar_from_db_p(void) // fail +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + calendar_connect(); + + int event_db_id_array[1]; +// event_db_id_array[0] = DEFAULT_CALENDAR_BOOK_DB_ID; + event_db_id_array[0] = 2; // DEFAULT_CALENDAR_BOOK_DB_ID is deleted before, so set 2 + char *vcalendar_stream = NULL; + + if (calendar_event_get_vcalendar_from_db(event_db_id_array, 1, &vcalendar_stream) == CALENDAR_ERROR_NONE) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_VCALENDAR_FROM_DB); + } else { + dts_message(API_NAME_CALENDAR_EVENT_GET_VCALENDAR_FROM_DB, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_GET_VCALENDAR_FROM_DB); + } +} + +static void utc_social_calendar_event_get_vcalendar_from_db_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + calendar_connect(); + + int event_db_id_array[1]; + event_db_id_array[0] = DEFAULT_CALENDAR_BOOK_DB_ID; + char *vcalendar_stream = NULL; + + if (calendar_event_get_vcalendar_from_db(NULL, 1, &vcalendar_stream) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_EVENT_GET_VCALENDAR_FROM_DB); + } else { + dts_message(API_NAME_CALENDAR_EVENT_GET_VCALENDAR_FROM_DB, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_EVENT_GET_VCALENDAR_FROM_DB); + } +} + diff --git a/TC/testcase/utc_social_calendar_todo.c b/TC/testcase/utc_social_calendar_todo.c new file mode 100755 index 0000000..f77eb10 --- /dev/null +++ b/TC/testcase/utc_social_calendar_todo.c @@ -0,0 +1,1385 @@ +/* + * Copyright (c) 2011 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +enum { + POSITIVE_TC_IDX = 0x01, + NEGATIVE_TC_IDX, +}; + +#define API_NAME_CALENDAR_TODO_CREATE "calendar_todo_create" +#define API_NAME_CALENDAR_TODO_GET_DB_ID "calendar_todo_get_db_id" +#define API_NAME_CALENDAR_TODO_GET_CALENDAR_BOOK_DB_ID "calendar_todo_get_calendar_book_db_id" +#define API_NAME_CALENDAR_TODO_GET_SUBJECT "calendar_todo_get_subject" +#define API_NAME_CALENDAR_TODO_GET_DESCRIPTION "calendar_todo_get_description" +#define API_NAME_CALENDAR_TODO_GET_LOCATION "calendar_todo_get_location" +#define API_NAME_CALENDAR_TODO_GET_TIMEZONE "calendar_todo_get_timezone" +#define API_NAME_CALENDAR_TODO_GET_PRIORITY "calendar_todo_get_priority" +#define API_NAME_CALENDAR_TODO_GET_STATUS "calendar_todo_get_status" +#define API_NAME_CALENDAR_TODO_GET_VISIBILITY "calendar_todo_get_visibility" +#define API_NAME_CALENDAR_TODO_GET_START_TIME "calendar_todo_get_start_time" +#define API_NAME_CALENDAR_TODO_GET_DUE_TIME "calendar_todo_get_due_time" +#define API_NAME_CALENDAR_FOREACH_TODO_FROM_DB "calendar_foreach_todo_from_db" +#define API_NAME_CALENDAR_QUERY_TODO_BY_CALENDAR "calendar_query_todo_by_calendar" +#define API_NAME_CALENDAR_TODO_INSERT_TO_DB "calendar_todo_insert_to_db" +#define API_NAME_CALENDAR_TODO_GET_FROM_DB "calendar_todo_get_from_db" +#define API_NAME_CALENDAR_TODO_GET_LAST_MODIFIED_TIME "calendar_todo_get_last_modified_time" +#define API_NAME_CALENDAR_TODO_UPDATE_TO_DB "calendar_todo_update_to_db" +#define API_NAME_CALENDAR_TODO_DELETE_FROM_DB "calendar_todo_delete_from_db" + +#define API_NAME_CALENDAR_TODO_GET_SET_CATEGORIES "calendar_todo_get_set_categories" +#define API_NAME_CALENDAR_TODO_GET_TOTAL_COUNT_FROM_DB "calendar_todo_get_total_count_from_db" +#define API_NAME_CALENDAR_TODO_GET_TOTAL_COUNT_BY_DUEDATE_RANGE "CALENDAR_TODO_GET_TOTAL_COUNT_BY_DUEDATE_RANGE" +#define API_NAME_CALENDAR_TODO_FREE_ARRAY "calendar_todo_free_array" +#define API_NAME_CALENDAR_TODO_FREE_MODIFIED_TODO_ARRAY_FREE "calendar_todo_free_modified_todo_array_free" +#define API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_CALENDAR_BOOK "calendar_todo_search_todo_by_calendar_book" +#define API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_DUEDATE_RANGE "CALENDAR_TODO_SEARCH_TODO_BY_DUEDATE_RANGE" +#define API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_VERSION "calendar_todo_search_todo_by_version" + +static void startup(void); +static void cleanup(void); + +void (*tet_startup)(void) = startup; +void (*tet_cleanup)(void) = cleanup; + +static void utc_social_calendar_calendar_todo_create_destroy_p(void); +static void utc_social_calendar_calendar_todo_create_destroy_n(void); +static void utc_social_calendar_calendar_todo_get_db_id_p(void); +static void utc_social_calendar_calendar_todo_get_db_id_n(void); +static void utc_social_calendar_calendar_todo_get_calendar_book_db_id_p(void); +static void utc_social_calendar_calendar_todo_get_calendar_book_db_id_n(void); +static void utc_social_calendar_calendar_todo_get_set_subject_p(void); +static void utc_social_calendar_calendar_todo_get_set_subject_n(void); +static void utc_social_calendar_calendar_todo_get_set_description_p(void); +static void utc_social_calendar_calendar_todo_get_set_description_n(void); +static void utc_social_calendar_calendar_todo_get_set_location_p(void); +static void utc_social_calendar_calendar_todo_get_set_location_n(void); +static void utc_social_calendar_calendar_todo_get_set_timezone_p(void); +static void utc_social_calendar_calendar_todo_get_set_timezone_n(void); +static void utc_social_calendar_calendar_todo_get_set_priority_p(void); +static void utc_social_calendar_calendar_todo_get_set_priority_n(void); +static void utc_social_calendar_calendar_todo_get_set_status_p(void); +static void utc_social_calendar_calendar_todo_get_set_status_n(void); +static void utc_social_calendar_calendar_todo_get_set_visibility_p(void); +static void utc_social_calendar_calendar_todo_get_set_visibility_n(void); +static void utc_social_calendar_calendar_todo_get_set_start_time_p(void); +static void utc_social_calendar_calendar_todo_get_set_start_time_n(void); +static void utc_social_calendar_calendar_todo_get_set_due_time_p(void); +static void utc_social_calendar_calendar_todo_get_set_due_time_n(void); +//static void utc_social_calendar_calendar_foreach_todo_from_db_p(void); +//static void utc_social_calendar_calendar_foreach_todo_from_db_n(void); +//static void utc_social_calendar_calendar_query_todo_by_calendar_p(void); +//static void utc_social_calendar_calendar_query_todo_by_calendar_n(void); +static void utc_social_calendar_calendar_todo_insert_to_db_p(void); +static void utc_social_calendar_calendar_todo_insert_to_db_n(void); +static void utc_social_calendar_calendar_todo_get_from_db_p(void); +static void utc_social_calendar_calendar_todo_get_from_db_n(void); +static void utc_social_calendar_calendar_todo_get_last_modified_time_p(void); +static void utc_social_calendar_calendar_todo_get_last_modified_time_n(void); +static void utc_social_calendar_calendar_todo_update_to_db_p(void); +static void utc_social_calendar_calendar_todo_update_to_db_n(void); +static void utc_social_calendar_calendar_todo_delete_from_db_p(void); +static void utc_social_calendar_calendar_todo_delete_from_db_n(void); + +static void utc_social_calendar_todo_get_set_categories_p(void); +static void utc_social_calendar_todo_get_set_categories_n(void); +static void utc_social_calendar_todo_get_total_count_from_db_p(void); +static void utc_social_calendar_todo_get_total_count_from_db_n(void); +static void utc_social_calendar_todo_get_total_count_by_duedate_range_p(void); +static void utc_social_calendar_todo_get_total_count_by_duedate_range_n(void); +static void utc_social_calendar_todo_free_array_p(void); +static void utc_social_calendar_todo_free_array_n(void); +static void utc_social_calendar_todo_free_modified_todo_array_free_p(void); +static void utc_social_calendar_todo_free_modified_todo_array_free_n(void); +static void utc_social_calendar_todo_search_todo_by_calendar_book_p(void); +static void utc_social_calendar_todo_search_todo_by_calendar_book_n(void); +static void utc_social_calendar_todo_search_todo_by_duedate_range_p(void); +static void utc_social_calendar_todo_search_todo_by_duedate_range_n(void); +static void utc_social_calendar_todo_search_todo_by_version_p(void); +static void utc_social_calendar_todo_search_todo_by_version_n(void); + +struct tet_testlist tet_testlist[] = { + { utc_social_calendar_calendar_todo_create_destroy_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_create_destroy_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_db_id_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_db_id_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_calendar_book_db_id_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_calendar_book_db_id_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_subject_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_subject_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_description_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_description_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_location_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_location_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_timezone_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_timezone_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_priority_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_priority_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_status_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_status_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_visibility_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_visibility_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_start_time_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_start_time_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_due_time_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_set_due_time_n, NEGATIVE_TC_IDX }, +// { utc_social_calendar_calendar_foreach_todo_from_db_p, POSITIVE_TC_IDX }, // TOREM +// { utc_social_calendar_calendar_foreach_todo_from_db_n, NEGATIVE_TC_IDX }, // TOREM +// { utc_social_calendar_calendar_query_todo_by_calendar_p, POSITIVE_TC_IDX }, // TOREM +// { utc_social_calendar_calendar_query_todo_by_calendar_n, NEGATIVE_TC_IDX }, // TOREM + { utc_social_calendar_calendar_todo_insert_to_db_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_insert_to_db_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_from_db_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_from_db_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_last_modified_time_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_get_last_modified_time_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_update_to_db_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_update_to_db_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_delete_from_db_p, POSITIVE_TC_IDX }, + { utc_social_calendar_calendar_todo_delete_from_db_n, NEGATIVE_TC_IDX }, + + { utc_social_calendar_todo_get_set_categories_p, POSITIVE_TC_IDX }, + { utc_social_calendar_todo_get_set_categories_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_todo_get_total_count_from_db_p, POSITIVE_TC_IDX }, + { utc_social_calendar_todo_get_total_count_from_db_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_todo_get_total_count_by_duedate_range_p, POSITIVE_TC_IDX }, + { utc_social_calendar_todo_get_total_count_by_duedate_range_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_todo_free_array_p, POSITIVE_TC_IDX }, + { utc_social_calendar_todo_free_array_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_todo_free_modified_todo_array_free_p, POSITIVE_TC_IDX }, + { utc_social_calendar_todo_free_modified_todo_array_free_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_todo_search_todo_by_calendar_book_p, POSITIVE_TC_IDX }, + { utc_social_calendar_todo_search_todo_by_calendar_book_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_todo_search_todo_by_duedate_range_p, POSITIVE_TC_IDX }, + { utc_social_calendar_todo_search_todo_by_duedate_range_n, NEGATIVE_TC_IDX }, + { utc_social_calendar_todo_search_todo_by_version_p, POSITIVE_TC_IDX }, + { utc_social_calendar_todo_search_todo_by_version_n, NEGATIVE_TC_IDX }, + + { NULL, 0 }, +}; + +calendar_todo_h _dts_todo = NULL; +int _dts_todo_db_id = -1; + +static void startup(void) +{ + /* start of TC */ + calendar_connect(); + calendar_todo_create(&_dts_todo); +} + +static void cleanup(void) +{ + /* end of TC */ + calendar_disconnect(); + calendar_todo_destroy(_dts_todo); +} + +static void utc_social_calendar_calendar_todo_create_destroy_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_CREATE; + + bool success = false; + + calendar_todo_h todo = NULL; + + if((ret = calendar_todo_create(&todo)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_todo_destroy(todo)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_create_destroy_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_CREATE; + + bool success = false; + + if((ret = calendar_todo_create(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_todo_destroy(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_db_id_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_DB_ID; + + bool success = false; + + int todo_db_id = 0; + + if((ret = calendar_todo_get_db_id(_dts_todo, &todo_db_id)) == CALENDAR_ERROR_NONE) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_db_id_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_DB_ID; + + bool success = false; + + if((ret = calendar_todo_get_db_id(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_calendar_book_db_id_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_CALENDAR_BOOK_DB_ID; + + bool success = false; + + int calendar_db_id = 0; + + if((ret = calendar_todo_get_calendar_book_db_id(&_dts_todo, &calendar_db_id)) == CALENDAR_ERROR_NONE) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_calendar_book_db_id_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_CALENDAR_BOOK_DB_ID; + + bool success = false; + + if((ret = calendar_todo_get_calendar_book_db_id(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_subject_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_SUBJECT; + + bool success = false; + + char* subject = NULL; + + if((ret = calendar_todo_set_subject(_dts_todo, "todo subject")) == CALENDAR_ERROR_NONE) { + if((ret = calendar_todo_get_subject(_dts_todo, &subject)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + + if(subject != NULL) { + free(subject); + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_subject_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_CREATE; + + bool success = false; + + if((ret = calendar_todo_set_subject(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_todo_get_subject(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_description_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_DESCRIPTION; + + bool success = false; + + char* description = NULL; + + if((ret = calendar_todo_set_description(_dts_todo, "todo description")) == CALENDAR_ERROR_NONE) { + if((ret = calendar_todo_get_description(_dts_todo, &description)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + + if(description != NULL) { + free(description); + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_description_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_DESCRIPTION; + + bool success = false; + + if((ret = calendar_todo_set_description(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_todo_get_description(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_location_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_LOCATION; + + bool success = false; + + char* location = NULL; + + if((ret = calendar_todo_set_location(_dts_todo, "todo location")) == CALENDAR_ERROR_NONE) { + if((ret = calendar_todo_get_location(_dts_todo, &location)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + + if(location != NULL) { + free(location); + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_location_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_LOCATION; + + bool success = false; + + if((ret = calendar_todo_set_location(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_todo_get_location(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_timezone_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_TIMEZONE; + + bool success = false; + + char* timezone = NULL; + + if((ret = calendar_todo_set_timezone(_dts_todo, "Seoul")) == CALENDAR_ERROR_NONE) { + if((ret = calendar_todo_get_timezone(_dts_todo, &timezone)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + + if(timezone != NULL) { + free(timezone); + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_timezone_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_TIMEZONE; + + bool success = false; + + if((ret = calendar_todo_set_timezone(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_todo_get_timezone(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_priority_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_PRIORITY; + + bool success = false; + + calendar_todo_priority_e value = 0; + + if((ret = calendar_todo_set_priority(_dts_todo, 0)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_todo_get_priority(_dts_todo, &value)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_priority_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_PRIORITY; + + bool success = false; + + if((ret = calendar_todo_set_priority(NULL, 0)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_todo_get_priority(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_status_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_STATUS; + + bool success = false; + + calendar_todo_status_e value = 0; + + if((ret = calendar_todo_set_status(_dts_todo, 0)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_todo_get_status(_dts_todo, &value)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_status_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_STATUS; + + bool success = false; + + if((ret = calendar_todo_set_status(NULL, 0)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_todo_get_status(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_visibility_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_VISIBILITY; + + bool success = false; + + calendar_visibility_e value = 0; + + if((ret = calendar_todo_set_visibility(_dts_todo, 0)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_todo_get_visibility(_dts_todo, &value)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_visibility_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_VISIBILITY; + + bool success = false; + + if((ret = calendar_todo_set_visibility(NULL, 0)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_todo_get_visibility(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_start_time_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_START_TIME; + + bool success = false; + + long long int value = {0}; + + if((ret = calendar_todo_set_start_time(_dts_todo, value)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_todo_get_start_time(_dts_todo, &value)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_start_time_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_START_TIME; + + bool success = false; + + long long int value = 0; + + if((ret = calendar_todo_set_start_time(NULL, value)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_todo_get_start_time(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_due_time_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_DUE_TIME; + + bool success = false; + + long long int value = 0; + + if((ret = calendar_todo_set_due_time(_dts_todo, value)) == CALENDAR_ERROR_NONE) { + if((ret = calendar_todo_get_due_time(_dts_todo, &value)) == CALENDAR_ERROR_NONE) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_set_due_time_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_DUE_TIME; + + bool success = false; + + long long int value = 0; + + if((ret = calendar_todo_set_due_time(NULL, value)) == CALENDAR_ERROR_INVALID_PARAMETER) { + if((ret = calendar_todo_get_due_time(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +bool dts_calendar_foreach_query_todo_cb(calendar_todo_h todo, void *user_data) +{ + return false; +} + +//static void utc_social_calendar_calendar_foreach_todo_from_db_p(void) +//{ +// int ret = CALENDAR_ERROR_NONE; +// char* api_name = API_NAME_CALENDAR_FOREACH_TODO_FROM_DB; +// bool success = false; +// +// if((ret = calendar_foreach_todo_from_db(dts_calendar_foreach_query_todo_cb, NULL)) == CALENDAR_ERROR_NONE) { +// success = true; +// } +// +// if(success == true) { +// dts_pass(api_name); +// } else { +// dts_message(api_name, "Calendar : %d", ret); +// dts_fail(api_name); +// } +//} +// +//static void utc_social_calendar_calendar_foreach_todo_from_db_n(void) +//{ +// int ret = CALENDAR_ERROR_NONE; +// char* api_name = API_NAME_CALENDAR_FOREACH_TODO_FROM_DB; +// bool success = false; +// +// if((ret = calendar_foreach_todo_from_db(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { +// success = true; +// } +// +// if(success == true) { +// dts_pass(api_name); +// } else { +// dts_message(api_name, "Calendar : %d", ret); +// dts_fail(api_name); +// } +//} +// +//static void utc_social_calendar_calendar_query_todo_by_calendar_p(void) +//{ +// int ret = CALENDAR_ERROR_NONE; +// char* api_name = API_NAME_CALENDAR_QUERY_TODO_BY_CALENDAR; +// bool success = false; +// +// if((ret = calendar_query_todo_by_calendar(dts_calendar_foreach_query_todo_cb, 1, NULL)) == CALENDAR_ERROR_NONE) { +// success = true; +// } +// +// if(success == true) { +// dts_pass(api_name); +// } else { +// dts_message(api_name, "Calendar : %d", ret); +// dts_fail(api_name); +// } +//} +// +//static void utc_social_calendar_calendar_query_todo_by_calendar_n(void) +//{ +// int ret = CALENDAR_ERROR_NONE; +// char* api_name = API_NAME_CALENDAR_QUERY_TODO_BY_CALENDAR; +// bool success = false; +// +// if((ret = calendar_query_todo_by_calendar(NULL, 1, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { +// success = true; +// } +// +// if(success == true) { +// dts_pass(api_name); +// } else { +// dts_message(api_name, "Calendar : %d", ret); +// dts_fail(api_name); +// } +//} + +static void utc_social_calendar_calendar_todo_insert_to_db_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_INSERT_TO_DB; + + bool success = false; + + if((ret = calendar_todo_insert_to_db(_dts_todo, 1, &_dts_todo_db_id)) == CALENDAR_ERROR_NONE) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_insert_to_db_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_INSERT_TO_DB; + + bool success = false; + + if((ret = calendar_todo_insert_to_db(NULL, 1, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_from_db_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_FROM_DB; + + bool success = false; + calendar_todo_h todo = NULL; + + if((ret = calendar_todo_get_from_db(_dts_todo_db_id, &todo)) == CALENDAR_ERROR_NONE) { + success = true; + } + calendar_todo_destroy(todo); + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_from_db_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_FROM_DB; + + bool success = false; + + if((ret = calendar_todo_get_from_db(0, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_last_modified_time_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_LAST_MODIFIED_TIME; + + bool success = false; + long long int value = 0; + + if((ret = calendar_todo_get_last_modified_time(_dts_todo, &value)) == CALENDAR_ERROR_NONE) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_get_last_modified_time_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_GET_LAST_MODIFIED_TIME; + + bool success = false; + + if((ret = calendar_todo_get_last_modified_time(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_update_to_db_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_UPDATE_TO_DB; + + bool success = false; + + if((ret = calendar_todo_update_to_db(_dts_todo)) == CALENDAR_ERROR_NONE) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_update_to_db_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_UPDATE_TO_DB; + + bool success = false; + + if((ret = calendar_todo_update_to_db(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_delete_from_db_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_DELETE_FROM_DB; + + bool success = false; + + if((ret = calendar_todo_delete_from_db(_dts_todo_db_id)) == CALENDAR_ERROR_NONE) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_calendar_todo_delete_from_db_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + char* api_name = API_NAME_CALENDAR_TODO_DELETE_FROM_DB; + + bool success = false; + + if((ret = calendar_todo_delete_from_db(-1)) == CALENDAR_ERROR_INVALID_PARAMETER) { + success = true; + } + + if(success == true) { + dts_pass(api_name); + } else { + dts_message(api_name, "Calendar to-do : %d", ret); + dts_fail(api_name); + } +} + +static void utc_social_calendar_todo_get_set_categories_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + char* categories = NULL; + + calendar_event_h event = NULL; + if ((ret = calendar_todo_create(&event)) == CALENDAR_ERROR_NONE) { + if ((ret = calendar_todo_set_categories(event, "category1,category2,category3")) == CALENDAR_ERROR_NONE) { + if ((ret = calendar_todo_get_categories(event, &categories)) == CALENDAR_ERROR_NONE) { + pass = true; + if (categories != NULL) { + free(categories); + } + } + } + calendar_todo_destroy(event); + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_TODO_GET_SET_CATEGORIES); + } else { + dts_message(API_NAME_CALENDAR_TODO_GET_SET_CATEGORIES, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_TODO_GET_SET_CATEGORIES); + } +} + +static void utc_social_calendar_todo_get_set_categories_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + if ((ret = calendar_todo_set_categories(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER && + (ret = calendar_todo_get_categories(NULL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + dts_pass(API_NAME_CALENDAR_TODO_GET_SET_CATEGORIES); + } + dts_fail(API_NAME_CALENDAR_TODO_GET_SET_CATEGORIES); +} + +static void utc_social_calendar_todo_get_total_count_from_db_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + int count; + + if ((ret = calendar_todo_get_total_count_from_db(DEFAULT_CALENDAR_BOOK_DB_ID, CALENDAR_TODO_FILTER_PRIORITY_ALL, CALENDAR_TODO_FILTER_STATUS_ALL, &count)) == CALENDAR_ERROR_NONE) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_TODO_GET_TOTAL_COUNT_FROM_DB); + } else { + dts_message(API_NAME_CALENDAR_TODO_GET_TOTAL_COUNT_FROM_DB, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_TODO_GET_TOTAL_COUNT_FROM_DB); + } +} + +static void utc_social_calendar_todo_get_total_count_from_db_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + if ((ret = calendar_todo_get_total_count_from_db(DEFAULT_CALENDAR_BOOK_DB_ID, CALENDAR_TODO_FILTER_PRIORITY_ALL, CALENDAR_TODO_FILTER_STATUS_ALL, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER ) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_TODO_GET_TOTAL_COUNT_FROM_DB); + } else { + dts_message(API_NAME_CALENDAR_TODO_GET_TOTAL_COUNT_FROM_DB, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_TODO_GET_TOTAL_COUNT_FROM_DB); + } +} + +static int _create_sample_todo(const char subject[], long long int due) +{ + calendar_todo_h todo; + if (calendar_todo_create(&todo) != CALENDAR_ERROR_NONE) return 1; + if (calendar_todo_set_subject(todo, subject) != CALENDAR_ERROR_NONE) return 2; + if (calendar_todo_set_due_time(todo, due) != CALENDAR_ERROR_NONE) return 3; + if (calendar_todo_set_priority(todo, CALENDAR_TODO_PRIORITY_NORMAL) != CALENDAR_ERROR_NONE) return 4; + if (calendar_todo_set_status(todo, CALENDAR_TODO_STATUS_IN_PROCESS) != CALENDAR_ERROR_NONE) return 5; + int todo_id; + if (calendar_todo_insert_to_db(todo, DEFAULT_CALENDAR_BOOK_DB_ID, &todo_id) != CALENDAR_ERROR_NONE) + return 6; + if (calendar_todo_destroy(todo) != CALENDAR_ERROR_NONE) return 7; + return 0; +} + +static void utc_social_calendar_todo_get_total_count_by_duedate_range_p(void) +{ + const char* api_name = API_NAME_CALENDAR_TODO_GET_TOTAL_COUNT_BY_DUEDATE_RANGE; + + calendar_connect(); + + int error; + if ((error = _create_sample_todo("", 100))) + dts_message(api_name, "Error while building precondition(%d)", error); + if ((error = _create_sample_todo("", 200))) + dts_message(api_name, "Error while building precondition(%d)", error); + if ((error = _create_sample_todo("", 300))) + dts_message(api_name, "Error while building precondition(%d)", error); + if ((error = _create_sample_todo("", 400))) + dts_message(api_name, "Error while building precondition(%d)", error); + if ((error = _create_sample_todo("", 500))) + dts_message(api_name, "Error while building precondition(%d)", error); + + int count; + if ((error = calendar_todo_get_total_count_by_duedate_range(DEFAULT_CALENDAR_BOOK_DB_ID, 200, 400, + CALENDAR_TODO_PRIORITY_NORMAL, + CALENDAR_TODO_STATUS_IN_PROCESS, + &count)) + != CALENDAR_ERROR_NONE) { + dts_message(api_name, "Error : %d", error); + dts_fail(api_name); + return; + } + + calendar_disconnect(); + + if (count != 3) { + dts_message(api_name, "Count(%d)", count); + dts_fail(api_name); + return; + } + + dts_pass(api_name); +} + +static void utc_social_calendar_todo_get_total_count_by_duedate_range_n(void) +{ + const char* api_name = API_NAME_CALENDAR_TODO_GET_TOTAL_COUNT_BY_DUEDATE_RANGE; + int error; + if ((error = calendar_todo_get_total_count_by_duedate_range(DEFAULT_CALENDAR_BOOK_DB_ID, 200, 400, + CALENDAR_TODO_FILTER_PRIORITY_ALL, CALENDAR_TODO_FILTER_STATUS_ALL, NULL)) + != CALENDAR_ERROR_INVALID_PARAMETER) { + dts_message(api_name, "Error : %d", error); + dts_fail(api_name); + return; + } + dts_pass(api_name); +} + +static void utc_social_calendar_todo_free_array_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + calendar_todo_h* todo_array = NULL; + int length; + + calendar_connect(); + + ret = calendar_todo_search_todo_by_calendar_book(DEFAULT_CALENDAR_BOOK_DB_ID, + CALENDAR_TODO_FILTER_PRIORITY_ALL, + CALENDAR_TODO_FILTER_STATUS_ALL, + &todo_array, &length); + + if (ret != CALENDAR_ERROR_NONE) { + dts_message(API_NAME_CALENDAR_TODO_FREE_ARRAY, "Error while test set-up!"); + dts_fail(API_NAME_CALENDAR_TODO_FREE_ARRAY); + return; + } + + if (todo_array[0] == NULL) { + dts_message(API_NAME_CALENDAR_TODO_FREE_ARRAY, "array is NULL"); + } + dts_message(API_NAME_CALENDAR_TODO_FREE_ARRAY, "lendth:%d", length); + + if ((ret = calendar_todo_free_todo_array(todo_array)) == CALENDAR_ERROR_NONE) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_TODO_FREE_ARRAY); + } else { + dts_message(API_NAME_CALENDAR_TODO_FREE_ARRAY, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_TODO_FREE_ARRAY); + } +} + +static void utc_social_calendar_todo_free_array_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + if ((ret = calendar_todo_free_todo_array(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_TODO_FREE_ARRAY); + } else { + dts_message(API_NAME_CALENDAR_TODO_FREE_ARRAY, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_TODO_FREE_ARRAY); + } +} + +static void utc_social_calendar_todo_free_modified_todo_array_free_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + pcalendar_modified_todo_s* modified_todo_array = NULL; + + if ((ret = calendar_todo_free_modified_todo_array(modified_todo_array)) == CALENDAR_ERROR_NONE) { + pass = true; + } + + // TODO: more elaborate test-case needed! + pass = true; + + if (pass) { + dts_pass(API_NAME_CALENDAR_TODO_FREE_MODIFIED_TODO_ARRAY_FREE); + } else { + dts_message(API_NAME_CALENDAR_TODO_FREE_MODIFIED_TODO_ARRAY_FREE, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_TODO_FREE_MODIFIED_TODO_ARRAY_FREE); + } +} + +static void utc_social_calendar_todo_free_modified_todo_array_free_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + if ((ret = calendar_todo_free_modified_todo_array(NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_TODO_FREE_MODIFIED_TODO_ARRAY_FREE); + } else { + dts_message(API_NAME_CALENDAR_TODO_FREE_MODIFIED_TODO_ARRAY_FREE, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_TODO_FREE_MODIFIED_TODO_ARRAY_FREE); + } +} + +static void utc_social_calendar_todo_search_todo_by_calendar_book_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + calendar_todo_h* todo_array = NULL; + int length; + + calendar_connect(); + + if ((ret = calendar_todo_search_todo_by_calendar_book(DEFAULT_CALENDAR_BOOK_DB_ID, CALENDAR_TODO_FILTER_PRIORITY_ALL, CALENDAR_TODO_FILTER_STATUS_ALL, + &todo_array, &length)) == CALENDAR_ERROR_NONE) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_CALENDAR_BOOK); + } else { + dts_message(API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_CALENDAR_BOOK, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_CALENDAR_BOOK); + } +} + +static void utc_social_calendar_todo_search_todo_by_calendar_book_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + calendar_connect(); + + calendar_todo_h* todo_array; + int length; + + if ((ret = calendar_todo_search_todo_by_calendar_book(DEFAULT_CALENDAR_BOOK_DB_ID, CALENDAR_TODO_FILTER_PRIORITY_ALL, CALENDAR_TODO_FILTER_STATUS_ALL, + NULL, &length)) == CALENDAR_ERROR_INVALID_PARAMETER && + (ret = calendar_todo_search_todo_by_calendar_book(DEFAULT_CALENDAR_BOOK_DB_ID, CALENDAR_TODO_FILTER_PRIORITY_ALL, CALENDAR_TODO_FILTER_STATUS_ALL, + &todo_array, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_CALENDAR_BOOK); + } else { + dts_message(API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_CALENDAR_BOOK, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_CALENDAR_BOOK); + } +} + +static void utc_social_calendar_todo_search_todo_by_duedate_range_p(void) +{ + const char* api_name = API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_DUEDATE_RANGE; + + calendar_connect(); + + int error; + if ((error = _create_sample_todo("", 100))) + dts_message(api_name, "Error while building precondition(%d)", error); + if ((error = _create_sample_todo("", 200))) + dts_message(api_name, "Error while building precondition(%d)", error); + if ((error = _create_sample_todo("", 300))) + dts_message(api_name, "Error while building precondition(%d)", error); + if ((error = _create_sample_todo("", 400))) + dts_message(api_name, "Error while building precondition(%d)", error); + if ((error = _create_sample_todo("", 500))) + dts_message(api_name, "Error while building precondition(%d)", error); + + calendar_todo_h *todo_array = NULL; + int length; + if ((error = calendar_todo_search_todo_by_duedate_range(DEFAULT_CALENDAR_BOOK_DB_ID, 200, 400, + CALENDAR_TODO_FILTER_PRIORITY_ALL, CALENDAR_TODO_FILTER_STATUS_ALL, &todo_array, &length)) + != CALENDAR_ERROR_NONE) { + dts_message(api_name, "Error : %d", error); + dts_fail(api_name); + return; + } + + calendar_disconnect(); + + dts_pass(api_name); +} + +static void utc_social_calendar_todo_search_todo_by_duedate_range_n(void) +{ + const char* api_name = API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_DUEDATE_RANGE; + int error; + calendar_todo_h *todo_array = NULL; + int length; + + if ((error = calendar_todo_search_todo_by_duedate_range(DEFAULT_CALENDAR_BOOK_DB_ID, 200, 400, + CALENDAR_TODO_FILTER_PRIORITY_ALL, CALENDAR_TODO_FILTER_STATUS_ALL, NULL, &length)) + != CALENDAR_ERROR_INVALID_PARAMETER) { + dts_message(api_name, "Error : %d", error); + dts_fail(api_name); + return; + } + + if ((error = calendar_todo_search_todo_by_duedate_range(DEFAULT_CALENDAR_BOOK_DB_ID, 200, 400, + CALENDAR_TODO_FILTER_PRIORITY_ALL, CALENDAR_TODO_FILTER_STATUS_ALL, &todo_array, NULL)) + != CALENDAR_ERROR_INVALID_PARAMETER) { + dts_message(api_name, "Error : %d", error); + dts_fail(api_name); + return; + } + + dts_pass(api_name); +} + +static void utc_social_calendar_todo_search_todo_by_version_p(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + int length; + + calendar_connect(); + pcalendar_modified_todo_s* modified_todo_array = NULL; + + if ((ret = calendar_todo_search_todo_by_version(DEFAULT_CALENDAR_BOOK_DB_ID, 0, &modified_todo_array, &length)) == CALENDAR_ERROR_NONE) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_VERSION); + } else { + dts_message(API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_VERSION, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_VERSION); + } +} + +static void utc_social_calendar_todo_search_todo_by_version_n(void) +{ + int ret = CALENDAR_ERROR_NONE; + bool pass = false; + + calendar_modified_todo_s* modified_todo_array = NULL; + int length; + + if ((ret = calendar_todo_search_todo_by_version(DEFAULT_CALENDAR_BOOK_DB_ID, 0, NULL, &length)) == CALENDAR_ERROR_INVALID_PARAMETER && + (ret = calendar_todo_search_todo_by_version(DEFAULT_CALENDAR_BOOK_DB_ID, 0, &modified_todo_array, NULL)) == CALENDAR_ERROR_INVALID_PARAMETER) { + pass = true; + } + + if (pass) { + dts_pass(API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_VERSION); + } else { + dts_message(API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_VERSION, "Calendar : %d", ret); + dts_fail(API_NAME_CALENDAR_TODO_SEARCH_TODO_BY_VERSION); + } +} diff --git a/TC/tet_scen b/TC/tet_scen new file mode 100755 index 0000000..03f029a --- /dev/null +++ b/TC/tet_scen @@ -0,0 +1,7 @@ +all + ^TEST +##### Scenarios for TEST ##### + +# Test scenario +TEST + :include:/testcase/tslist diff --git a/TC/tetbuild.cfg b/TC/tetbuild.cfg new file mode 100755 index 0000000..f7eda55 --- /dev/null +++ b/TC/tetbuild.cfg @@ -0,0 +1,5 @@ +TET_OUTPUT_CAPTURE=True # capture option for build operation checking +TET_BUILD_TOOL=make # build with using make command +TET_BUILD_FILE=-f Makefile # execution file (Makefile) for build +TET_API_COMPLIANT=True # use TET API in Test Case ? +TET_PASS_TC_NAME=True # report passed TC name in Journal file? diff --git a/TC/tetclean.cfg b/TC/tetclean.cfg new file mode 100755 index 0000000..02d7030 --- /dev/null +++ b/TC/tetclean.cfg @@ -0,0 +1,5 @@ +TET_OUTPUT_CAPTURE=True # capture option +TET_CLEAN_TOOL= make clean # clean tool +TET_CLEAN_FILE= Makefile # file for clean +TET_API_COMPLIANT=True # TET API useage +TET_PASS_TC_NAME=True # showing name , passed TC diff --git a/TC/tetexec.cfg b/TC/tetexec.cfg new file mode 100755 index 0000000..ef3e452 --- /dev/null +++ b/TC/tetexec.cfg @@ -0,0 +1,5 @@ +TET_OUTPUT_CAPTURE=True # capturing execution or not +TET_EXEC_TOOL= # ex) exec : execution tool set up/ Optional +TET_EXEC_FILE= # ex) exectool : execution file/ Optional +TET_API_COMPLIANT=True # Test case or Tool usesTET API? +TET_PASS_TC_NAME=True # showing Passed TC name ? diff --git a/debian/capi-social-calendar-dev.install b/debian/capi-social-calendar-dev.install old mode 100755 new mode 100644 diff --git a/debian/capi-social-calendar-dev.postinst b/debian/capi-social-calendar-dev.postinst old mode 100755 new mode 100644 diff --git a/debian/capi-social-calendar.install b/debian/capi-social-calendar.install old mode 100755 new mode 100644 diff --git a/debian/capi-social-calendar.postinst b/debian/capi-social-calendar.postinst old mode 100755 new mode 100644 diff --git a/debian/changelog b/debian/changelog index 6f1192c..2d85b19 100755 --- a/debian/changelog +++ b/debian/changelog @@ -1,37 +1,359 @@ +capi-social-calendar (0.1.1-53) unstable; urgency=low + + * fixed: sound path was not updated because of struct api instead of value api. + * Git: framework/api/calendar + * Tag: capi-social-calendar_0.1.1-53 + + -- Jeesun Kim Tue, 28 Aug 2012 09:51:36 +0900 + +capi-social-calendar (0.1.1-52) unstable; urgency=low + + * fixed: set strdup when returning byday value. + * Git: framework/api/calendar + * Tag: capi-social-calendar_0.1.1-52 + + -- Jeesun Kim Tue, 28 Aug 2012 09:51:36 +0900 + +capi-social-calendar (0.1.1-51) unstable; urgency=low + + * added calendar id when updated list is returned. + * Git: framework/api/calendar + * Tag: capi-social-calendar_0.1.1-51 + + -- Jeesun Kim Mon, 20 Aug 2012 20:10:19 +0900 + +capi-social-calendar (0.1.1-50) unstable; urgency=low + + * set return 0 when count is 0. + * Git: framework/api/calendar + * Tag: capi-social-calendar_0.1.1-50 + + -- Jeesun Kim Thu, 16 Aug 2012 09:59:28 +0900 + +capi-social-calendar (0.1.1-49) unstable; urgency=low + + * added reminder type enum mapping api. + * Git: framework/api/calendar + * Tag: capi-social-calendar_0.1.1-49 + + -- Jeesun Kim Wed, 08 Aug 2012 10:18:43 +0900 + +capi-social-calendar (0.1.1-48) unstable; urgency=low + + * added recurrence until for allday. + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-48 + + -- Jeesun Kim Thu, 02 Aug 2012 22:21:15 +0900 + +capi-social-calendar (0.1.1-47) unstable; urgency=low + + * added define for unsetting due time. + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-47 + + -- Jeesun Kim Mon, 30 Jul 2012 17:44:55 +0900 + +capi-social-calendar (0.1.1-46) unstable; urgency=low + + * fixed jira 6214. + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-46 + + -- Jeesun Kim Wed, 25 Jul 2012 13:10:40 +0900 + +capi-social-calendar (0.1.1-45) unstable; urgency=low + + * modified jira issue. s1-6213. + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-45 + + -- Jeesun Kim Mon, 23 Jul 2012 17:57:21 +0900 + +capi-social-calendar (0.1.1-44) unstable; urgency=low + + * fixed jira 6119. + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-44 + + -- Jeesun Kim Fri, 20 Jul 2012 15:38:23 +0900 + +capi-social-calendar (0.1.1-43) unstable; urgency=low + + * updated changelog for obs. + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-43 + + -- Jeesun Kim Tue, 17 Jul 2012 18:28:00 +0900 + +capi-social-calendar (0.1.1-42) unstable; urgency=low + + * New API : int calendar_begin_transaction(void); int calendar_rollback_transaction(void); int calendar_commit_transaction(void); + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-42 + + -- Jeesun Kim Mon, 16 Jul 2012 18:56:06 +0900 + +capi-social-calendar (0.1.1-41) unstable; urgency=low + + * modified free array API + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-41 + + -- tw123.Kim THU, 13 Jul 2012 13:40:00 +0900 + +capi-social-calendar (0.1.1-40) unstable; urgency=low + + * modified reminder API and todo API + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-40 + + -- tw123.Kim THU, 12 Jul 2012 18:40:00 +0900 + +capi-social-calendar (0.1.1-39) unstable; urgency=low + + * Recurrence API changed Time interface format changed from "struct tm" to "long long int" + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-39 + + -- Jeesun Kim Sun, 01 Jul 2012 16:29:35 +0900 + +capi-social-calendar (0.1.1-38) unstable; urgency=low + + * modified deprecated APIs. + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-38 + + -- Jeesun Kim Mon, 21 May 2012 20:37:50 +0900 + +capi-social-calendar (0.1.1-37) unstable; urgency=low + + * APIs for Calendar added and changed + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-37 + + -- Jonghoon Lim Tue, 08 May 2012 10:56:20 +0900 + +capi-social-calendar (0.1.1-36) unstable; urgency=low + + * added new APIs. + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-36 + + -- Jeesun Kim Fri, 30 Mar 2012 21:59:53 +0900 + +capi-social-calendar (0.1.1-35) unstable; urgency=low + + * added capi-social-contacts in makelists. + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-35 + + -- Jeesun Kim Thu, 22 Mar 2012 11:25:12 +0900 + +capi-social-calendar (0.1.1-34) unstable; urgency=low + + * modified cmakelists -werror for making deprecated api as warning. + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-34 + + -- Jeesun Kim Wed, 21 Mar 2012 16:00:00 +0900 + capi-social-calendar (0.1.1-33) unstable; urgency=low * package build dependency updated - * Git: api/calendar - * Tag: capi-social-calendar_0.1.1-33 + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-33 -- Jonghoon Lim Fri, 16 Mar 2012 12:01:32 +0900 capi-social-calendar (0.1.1-32) unstable; urgency=low - * Multiple calendar feature added - * Git: api/calendar + * so versioning fixed + * Git: slp/api/calendar * Tag: capi-social-calendar_0.1.1-32 - -- Jonghoon Lim Fri, 10 Feb 2012 15:31:07 +0900 + -- Jonghoon Lim Thu, 16 Feb 2012 17:03:16 +0900 + +capi-social-calendar (0.1.1-31) unstable; urgency=low + + * so versioning fixed + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-31 + + -- Jonghoon Lim Tue, 14 Feb 2012 16:33:42 +0900 + +capi-social-calendar (0.1.1-30) unstable; urgency=low + + * calendar_event_get_calendar_db_id, calendar_todo_get_calendar_db_id + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-30 + + -- Jonghoon Lim Thu, 02 Feb 2012 10:40:10 +0900 + +capi-social-calendar (0.1.1-29) unstable; urgency=low + + * DEFAULT_CALENDAR_DB_ID newly defined + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-29 + + -- Jonghoon Lim Thu, 26 Jan 2012 11:03:46 +0900 + +capi-social-calendar (0.1.1-28) unstable; urgency=low + + * multi calendar feature added + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-28 + + -- Jonghoon Lim Mon, 16 Jan 2012 17:28:33 +0900 capi-social-calendar (0.1.1-27) unstable; urgency=low - * version updated - * Git: api/calendar - * Tag: capi-social-calendar_0.1.1-27 + * Typo error fixed + * Git: slp/api/calendar + * Tag: capi-social-calendar_0.1.1-27 - -- Jonghoon Lim Mon, 19 Dec 2011 14:52:01 +0900 + -- Jonghoon Lim Mon, 19 Dec 2011 14:31:53 +0900 capi-social-calendar (0.1.1-26) unstable; urgency=low - * version updated - * Git: api/calendar + * Removed using hidden Legacy API + * Git: slp/api/calendar * Tag: capi-social-calendar_0.1.1-26 - -- Jonghoon Lim Thu, 15 Dec 2011 13:43:07 +0900 + -- Jonghoon Lim Fri, 09 Dec 2011 09:26:07 +0900 + +capi-social-calendar (0.1.1-25) unstable; urgency=low + + * spec file updated + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.1.1-25 + + -- Jonghoon Lim Wed, 07 Dec 2011 12:59:01 +0900 + +capi-social-calendar (0.1.1-24) unstable; urgency=low + + * To follow up, calendar-service To-do status symbol changing 2 + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.1.1-24 + + -- Jonghoon Lim Wed, 07 Dec 2011 10:55:04 +0900 + +capi-social-calendar (0.1.1-23) unstable; urgency=low + + * To follow up, calendar-service To-do status symbol changing + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.1.1-23 + + -- Jonghoon Lim Tue, 06 Dec 2011 19:22:52 +0900 + +capi-social-calendar (0.1.1-22) unstable; urgency=low + + * To follow up, calendar service multi alarm + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.1.1-22 + + -- Jonghoon Lim Mon, 05 Dec 2011 18:35:38 +0900 + +capi-social-calendar (0.1.1-21) unstable; urgency=low + + * TIZEN_ERROR_OK --> TIZEN_ERROR_NONE + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.1.1-21 + + -- Jonghoon Lim Mon, 05 Dec 2011 13:03:18 +0900 + +capi-social-calendar (0.1.1-2) unstable; urgency=low + + * dlog details added + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.1.1-2 + + -- Jonghoon Lim Wed, 30 Nov 2011 20:36:17 +0900 + +capi-social-calendar (0.1.1-1) unstable; urgency=low + + * tizen namespace applied + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.1.1-1 + + -- Jonghoon Lim Wed, 23 Nov 2011 14:20:28 +0900 + +capi-social-calendar (0.1.0-22) unstable; urgency=low + + * Follow up calendar-service changes + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.1.0-22 + + -- Jonghoon Lim Mon, 21 Nov 2011 15:59:42 +0900 + +capi-social-calendar (0.1.0-21) unstable; urgency=low + + * Build break fix + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.1.0-21 + + -- Jonghoon Lim Mon, 21 Nov 2011 06:26:49 +0900 + +capi-social-calendar (0.1.0-2-dts40) unstable; urgency=low + + * DTS updated + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.1.0-2_dts40 + + -- Jonghoon Lim Mon, 10 Oct 2011 11:20:33 +0900 + +capi-social-calendar (0.1.0-2-dts) unstable; urgency=low + + * DTS updated + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.1.0-2_dts + + -- Jonghoon Lim Wed, 05 Oct 2011 17:24:50 +0900 + +capi-social-calendar (0.1.0-1) unstable; urgency=low + + * alpha release + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.1.0-1 + + -- Jonghoon Lim Tue, 27 Sep 2011 21:43:15 +0900 + +capi-social-calendar (0.0.1-14) unstable; urgency=low + + * alpha + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.0.1-14 + + -- Jonghoon Lim Mon, 26 Sep 2011 22:21:40 +0900 + +capi-social-calendar (0.0.1-13) unstable; urgency=low + + * alpha + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.0.1-13 + + -- Jonghoon Lim Fri, 23 Sep 2011 20:12:32 +0900 + +capi-social-calendar (0.0.1-12) unstable; urgency=low + + * "alpha" release : applied Vincent's and Juwon's review + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.0.1-12 + + -- Jonghoon Lim Fri, 23 Sep 2011 20:06:59 +0900 + +capi-social-calendar (0.0.1-11) unstable; urgency=low + + * "To do" object added, timezone function added + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.0.1-11 + + -- Jonghoon Lim Mon, 05 Sep 2011 11:04:51 +0900 capi-social-calendar (0.0.1-1) unstable; urgency=low + * Initial upload + * Git: slp-source.sec.samsung.net:slp/api/calendar + * Tag: capi-social-calendar_0.0.1-1 - * Initial release. + -- Jonghoon Lim Mon, 08 Aug 2011 09:49:19 +0900 - -- Jonghoon Lim Wed, 07 Dec 2011 12:48:12 +0900 diff --git a/debian/rules b/debian/rules index fb887f6..5ba9d0b 100755 --- a/debian/rules +++ b/debian/rules @@ -26,11 +26,10 @@ build-stamp: configure-stamp touch $@ clean: - cd $(CMAKE_ROOT_DIR) dh_testdir dh_testroot rm -f build-stamp configure-stamp - rm -f + -cd $(CMAKE_BUILD_DIR) && $(MAKE) distclean rm -rf $(CMAKE_BUILD_DIR) dh_clean diff --git a/include/calendar.h b/include/calendar.h index cb12a45..74020d0 100755 --- a/include/calendar.h +++ b/include/calendar.h @@ -11,17 +11,17 @@ * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License. + * limitations under the License. */ - + #ifndef __TIZEN_SOCIAL_CALENDAR_CALENDAR_H__ #define __TIZEN_SOCIAL_CALENDAR_CALENDAR_H__ #include #include -#include -#include +#include "calendar_attendee.h" +#include "calendar_types.h" #ifdef __cplusplus @@ -36,9 +36,9 @@ extern "C" { /** * @brief Connects to the calendar service. * - * @details Opening connection is necessary to access the calendar database. + * @details Opening connection is necessary to access the calendar database. * All operations like inserting, updating, or deleting calendar require opened connection to work properly. - + * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_DB_FAILED No access to database @@ -61,27 +61,56 @@ int calendar_connect(void); int calendar_disconnect(void); /** - * @brief Retrieves all timezone information supported on a device. + * @brief Begins transaction to calendar database * - * @param[in] callback The callback function to invoke - * @param[in] user_data The user data to be passed to the callback function + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_DB_FAILED No access to database * - * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @pre This function requires an open connection to the calendar service by calendar_connect(). * - * @post This function invokes calendar_foreach_timezone_cb(). + * @see calendar_connect() + * @see calendar_rollback_transaction() + * @see calendar_commit_transaction() + */ +int calendar_begin_transaction(void); + +/** + * @brief Rollbacks transaction to calendar database * - * @see calendar_foreach_timezone_cb() - * @see calendar_event_set_timezone() - * @see calendar_todo_set_timezone() + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). + * + * @see calendar_connect() + * @see calendar_begin_transaction() + * @see calendar_commit_transaction() + */ +int calendar_rollback_transaction(void); + +/** + * @brief Commits transaction to calendar database + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). + * + * @see calendar_connect() + * @see calendar_begin_transaction() + * @see calendar_rollback_transaction() */ -int calendar_foreach_timezone(calendar_foreach_timezone_cb callback, void *user_data); +int calendar_commit_transaction(void); + /** - * @brief Registers a callback function to be invoked when any database change occur. + * @brief Registers a callback function to be invoked when any database change occurs. * - * @param[in] callback The callback function to invoke + * @param[in] callback The callback function to invoke + * @param[in] type The notification type to subscribe * @param[in] user_data The user data to be passed to the callback function * * @return 0 on success, otherwise a negative error value. @@ -90,19 +119,26 @@ int calendar_foreach_timezone(calendar_foreach_timezone_cb callback, void *user_ * * @pre This function requires an open connection to the calendar service by calendar_connect(). * @post calendar_db_changed_cb() will be invoked. - * + * * @see calendar_db_changed_cb() - * @see calendar_unset_db_changed_cb() + * @see calendar_remove_db_changed_cb() + * @see calendar_book_insert_to_db() + * @see calendar_book_update_to_db() + * @see calendar_book_delete_from_db() * @see calendar_event_insert_to_db() * @see calendar_event_update_to_db() * @see calendar_event_delete_from_db() + * @see calendar_todo_insert_to_db() + * @see calendar_todo_update_to_db() + * @see calendar_todo_delete_from_db() */ -int calendar_set_db_changed_cb(calendar_db_changed_cb callback, void *user_data); +int calendar_add_db_changed_cb(calendar_db_changed_cb callback, calendar_db_changed_cb_type_e type, void *user_data); /** * @brief Unregisters the callback function. * * @param[in] callback The callback function to unregister + * @param[in] type The notification type to unregister callback * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -110,9 +146,23 @@ int calendar_set_db_changed_cb(calendar_db_changed_cb callback, void *user_data) * * @pre This function requires an open connection to the calendar service by calendar_connect(). * @see calendar_db_changed_cb() - * @see calendar_set_db_changed_cb() + * @see calendar_add_db_changed_cb() + */ +int calendar_remove_db_changed_cb(calendar_db_changed_cb callback, calendar_db_changed_cb_type_e type); + +/** + * @brief Gets the calendar database version. + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_DB_FAILED Database operation failure + * + * @see calendar_connect() + * @see calendar_query_event_by_version() + * @see calendar_query_todo_by_version() */ -int calendar_unset_db_changed_cb(calendar_db_changed_cb callback); +int calendar_get_db_version(int* calendar_db_version); /** * @} @@ -144,7 +194,7 @@ int calendar_event_create(calendar_event_h *event); /** * @brief Destroys the calendar event handle and releases all its resources. * - * @param[out] event The calendar event handle + * @param[out] event The calendar event handle * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -158,10 +208,10 @@ int calendar_event_destroy(calendar_event_h event); /** * @brief Adds a calendar event to the calendar database. * - * @param[in] event The calendar event handle - * @param[in] calendar_db_id The calendar database ID to which the event insert. \n - * 1 means the default calendar on the device - * @param[out] event_db_id The event db ID associated with the calendar event \n + * @param[in] event The calendar event handle + * @param[in] calendar_book_db_id The calendar book database ID to which the event insert. \n + * #DEFAULT_EVENT_CALENDAR_BOOK_DB_ID means the default event calendar book on the device + * @param[out] event_db_id The event database ID associated with the calendar event \n * If the function fails, it is -1. * * @return 0 on success, otherwise a negative error value. @@ -174,12 +224,12 @@ int calendar_event_destroy(calendar_event_h event); * @see calendar_event_update_to_db() * @see calendar_event_delete_from_db() */ -int calendar_event_insert_to_db(calendar_event_h event, int calendar_db_id, int *event_db_id); +int calendar_event_insert_to_db(calendar_event_h event, int calendar_book_db_id, int *event_db_id); /** * @brief Removes the calendar event from the calendar database. * - * @param[in] event_id The event ID to delete + * @param[in] event_db_id The database event ID to delete * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -191,13 +241,13 @@ int calendar_event_insert_to_db(calendar_event_h event, int calendar_db_id, int * @see calendar_event_insert_to_db() * @see calendar_event_update_to_db() */ -int calendar_event_delete_from_db(int event_id); +int calendar_event_delete_from_db(int event_db_id); /** * @brief Updates the calendar event in the calendar database. * @details calendar_event_get_db_id() is called internally to update in the calendar database to get the event ID in the calendar database. * - * @param[in] event The calendar event handle + * @param[in] event The calendar event handle * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -218,9 +268,9 @@ int calendar_event_update_to_db(calendar_event_h event); /** * @brief Gets the calendar event from the calendar database. * @details This function gets the new calendar event handle with the given event database ID from the calendar database. \n - * The new calendar event handle will be created. + * The new calendar event handle will be created. * - * @remarks The created calendar event handle must be released with calendar_event_destroy() by you. + * @remarks The created calendar event handle must be released with calendar_event_destroy() by you. * * * @param[in] event_id The event ID @@ -235,14 +285,14 @@ int calendar_event_update_to_db(calendar_event_h event); * * @see calendar_event_destroy() */ -int calendar_event_get_from_db(int event_id, calendar_event_h *event); +int calendar_event_get_from_db(int event_db_id, calendar_event_h *event); /** - * @brief Gets the database ID associated with the given calendar event handle. + * @brief Gets the database ID associated with the given calendar event handle. * * @param[in] event The calendar event handle * @param[out] event_db_id The event database ID fetched from the calendar event handle (default : 0) \n - * 0 means the event is not in calendar database. + * 0 means the event is not in calendar database. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -254,11 +304,11 @@ int calendar_event_get_from_db(int event_id, calendar_event_h *event); int calendar_event_get_db_id(calendar_event_h event, int *event_db_id); /** - * @brief Gets the calendar database ID associated with the given calendar event handle. + * @brief Gets The calendar book database ID associated with the given calendar event handle. * * @param[in] event The calendar event handle - * @param[out] calendar_db_id The calendar database ID fetched from the calendar event handle (default : 0) \n - * 0 means the event is not in calendar database. + * @param[out] calendar_book_db_id The calendar book database ID fetched from the calendar event handle (default : 0) \n + * 0 means the event is not in calendar database. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -266,14 +316,14 @@ int calendar_event_get_db_id(calendar_event_h event, int *event_db_id); * * @see calendar_event_insert_to_db() */ -int calendar_event_get_calendar_db_id(calendar_event_h event, int *calendar_db_id); +int calendar_event_get_calendar_book_db_id(calendar_event_h event, int *calendar_book_db_id); /** * @brief Gets the subject of the event from the calendar event handle . * * @remarks @a subject must be released with free() by you. * - * @param [in] event The calendar event handle + * @param [in] event The calendar event handle * @param [out] subject The subject of the event \n If the subject does not exist, it is NULL * * @return 0 on success, otherwise a negative error value. @@ -285,11 +335,10 @@ int calendar_event_get_calendar_db_id(calendar_event_h event, int *calendar_db_i */ int calendar_event_get_subject(calendar_event_h event, char **subject); - /** * @brief Sets the subject of the event in the calendar event handle. * - * @param [in] event The calendar event handle + * @param [in] event The calendar event handle * @param [in] subject The subject of the event * * @return 0 on success, otherwise a negative error value. @@ -300,13 +349,12 @@ int calendar_event_get_subject(calendar_event_h event, char **subject); */ int calendar_event_set_subject(calendar_event_h event, const char *subject); - /** * @brief Gets the description of the event from the calendar event handle. * - * @remarks @a description must be released with free() by you. + * @remarks @a description must be released with free() by you. * - * @param [in] event The calendar event handle + * @param [in] event The calendar event handle * @param [out] description The description of the event \n If the description does not exist, it is NULL * * @return 0 on success, otherwise a negative error value. @@ -317,11 +365,10 @@ int calendar_event_set_subject(calendar_event_h event, const char *subject); */ int calendar_event_get_description(calendar_event_h event, char **description); - /** * @brief Sets a description of the event in the calendar event handle. * - * @param [in] event The calendar event handle + * @param [in] event The calendar event handle * @param [in] description The description of the event * * @return 0 on success, otherwise a negative error value. @@ -332,363 +379,226 @@ int calendar_event_get_description(calendar_event_h event, char **description); */ int calendar_event_set_description(calendar_event_h event, const char *description); - /** - * @brief Gets an all-day event property of the calendar event handle. - * - * @param [in] event The calendar event handle - * @param [out] is_all_day_event @c true if the event lasts for an entire day, otherwise @c false \n - * (default : @c false) - * - * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see calendar_event_set_is_all_day_event() - */ -int calendar_event_get_is_all_day_event(calendar_event_h event, bool *is_all_day_event); - - -/** - * @brief Sets an all-day event property of the calendar event handle. + * @brief Gets the start time of the event from the calendar event handle. * - * @param [in] event The calendar event handle - * @param [in] is_all_day_event The all-day event type \n - * @c true if the event will last for an entire day, otherwise @c false \n - * (default : @c false) + * @param [in] event The calendar event handle + * @param [out] start_time The start date of the event \n + * The @a start_time is a unix timestamp since 00:00, Jan 1 1970 UTC. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_NO_DATA Data not found * - * @see calendar_event_get_is_all_day_event() + * @see calendar_event_set_start_time() */ -int calendar_event_set_is_all_day_event(calendar_event_h event, bool is_all_day_event); - +int calendar_event_get_start_time(calendar_event_h event, long long int *start_time); /** - * @brief Gets the location of the event from the calendar event handle. + * @brief Sets a start time of the event in the calendar event handle. * - * @remarks @a location must be released with free() by you. - * - * @param [in] event The calendar event handle - * @param [out] location The location of the event \n If the location does not exist, it is NULL + * @param [in] event The calendar event handle + * @param [in] start_time The start date of the event \n + * The @a start_time is a unix timestamp since 00:00, Jan 1 1970 UTC. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_event_set_location() + * @see calendar_event_get_start_time() */ -int calendar_event_get_location(calendar_event_h event, char **location); - +int calendar_event_set_start_time(calendar_event_h event, long long int start_time); /** - * @brief Sets a location of the event in the calendar event handle. + * @brief Gets the end time of the event from the calendar event handle. * - * @param [in] event The calendar event handle - * @param [in] location The location of the event + * @param [in] event The calendar event handle + * @param [out] end_time The end date of the event\n + * The @a end_time is a unix timestamp since 00:00, Jan 1 1970 UTC. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_NO_DATA Data not found * - * @see calendar_event_get_location() + * @see calendar_event_set_end_time() */ -int calendar_event_set_location(calendar_event_h event, const char *location); - +int calendar_event_get_end_time(calendar_event_h event, long long int *end_time); /** - * @brief Gets the reminder of the event from the calendar event handle. - * @details The function returns reminder type and interval of the event. - * + * @brief Sets the end time of the event in the calendar event handle. * - * @param [in] event The calendar event handle - * @param [out] reminder_interval_type The reminder type - * @param [out] reminder_interval The interval + * @param[in] event The calendar event handle + * @param[in] end_time The end date of the event\n + * The @a end_time is a unix timestamp since 00:00, Jan 1 1970 UTC. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_event_set_reminder() - */ -int calendar_event_get_reminder(calendar_event_h event, calendar_reminder_interval_type_e *reminder_interval_type, int *reminder_interval); - - -/** - * @brief Sets a reminder of the event in the calendar event handle. - * - * @remarks If reminder is set, the alarm will remind the event with in-house calendar application. - * - * @param [in] event The calendar event handle - * @param [in] reminder_interval_type The reminder interval type - * @param [in] reminder_interval The reminder interval - * - * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see calendar_event_get_reminder() + * @see calendar_event_get_end_time() */ -int calendar_event_set_reminder(calendar_event_h event, calendar_reminder_interval_type_e reminder_interval_type, int reminder_interval); +int calendar_event_set_end_time(calendar_event_h event, long long int end_time); /** - * @brief Gets the recurrence frequency of the event from the calendar event handle. + * @brief Gets an all-day event property of the calendar event handle. * - * @param[in] event The calendar event handle - * @param[out] recurrence_frequency The recurrence type of the event + * @param [in] event The calendar event handle + * @param [out] is_all_day_event @c true if the event lasts for an entire day, otherwise @c false \n + * (default : @c false) * * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_event_set_recurrence_frequency() - * @see calendar_event_set_recurrence_week_flag() - * @see calendar_event_get_recurrence_week_flag() - * @see calendar_event_add_recurrence_exception_date() + * @see calendar_event_set_is_all_day_event() */ -int calendar_event_get_recurrence_frequency(calendar_event_h event, calendar_recurrence_frequency_e *recurrence_frequency); - +int calendar_event_get_is_all_day_event(calendar_event_h event, bool *is_all_day_event); /** - * @brief Sets a recurrence frequency of the event in the calendar event handle. + * @brief Sets an all-day event with date range * - * @param [in] event The calendar event handle - * @param [in] recurrence_frequency The recurrence frequency of the event \n - * If you set it to #CALENDAR_RECURRENCE_WEEKLY, you have to set calendar_event_set_recurrence_week_flag(). + * @param [in] event The calendar event handle + * @param [in] start_year Year of start date + * @param [in] start_month Month of start date + * @param [in] start_day Day of start date + * @param [in] end_year Year of end date + * @param [in] end_month Month of end date + * @param [in] end_day Day of end date * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_event_get_recurrence_frequency() - * @see calendar_event_set_recurrence_week_flag() - * @see calendar_event_get_recurrence_week_flag() - * @see calendar_event_add_recurrence_exception_date() + * @see calendar_event_get_is_all_day_event() + * @see calendar_event_get_all_day_event() */ -int calendar_event_set_recurrence_frequency(calendar_event_h event, calendar_recurrence_frequency_e recurrence_frequency); +int calendar_event_set_all_day_event(calendar_event_h event, int start_year, int start_month, int start_day, + int end_year, int end_month, int end_day); /** - * @brief Gets the recurrence frequency of the event in the calendar event handle. + * @brief Gets an all-day event date range * - * @remarks This function is valid only if recurrence frequency of the event is #CALENDAR_RECURRENCE_WEEKLY. - * - * @param[in] event The calendar event handle - * @param[out] week_flag The days of week flag of the event \n It supports "OR"ing combination of #calendar_week_flag_e. \n eg) #CALENDAR_WEEK_FLAG_TUE | #CALENDAR_WEEK_FLAG_FRI + * @param [in] event The calendar event handle + * @param [out] start_year Year of start date + * @param [out] start_month Month of start date + * @param [out] start_day Day of start date + * @param [out] end_year Year of end date + * @param [out] end_month Month of end date + * @param [out] end_day Day of end date * * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_event_set_recurrence_week_flag() - * @see calendar_event_set_recurrence_frequency() - * @see calendar_event_get_recurrence_frequency() + * @see calendar_event_get_is_all_day_event() + * @see calendar_event_set_all_day_event() */ -int calendar_event_get_recurrence_week_flag(calendar_event_h event, int *week_flag); +int calendar_event_get_all_day_event(calendar_event_h event, int *start_year, int *start_month, int *start_day, + int *end_year, int *end_month, int *end_day); /** - * @brief Sets the days of week flag to the calendar event handle. - * - * @remarks This function is valid only if recurrence frequency of the event is #CALENDAR_RECURRENCE_WEEKLY. - * - * @param[in] event The calendar event handle - * @param[in] week_flag The days of week flag of the event \n It supports "OR"ing combination of #calendar_week_flag_e. \n eg) #CALENDAR_WEEK_FLAG_TUE | #CALENDAR_WEEK_FLAG_FRI - * - * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see calendar_event_get_recurrence_week_flag() - * @see calendar_event_set_recurrence_frequency() - * @see calendar_event_get_recurrence_frequency() + * @brief Gets the location of the event from the calendar event handle. * - */ -int calendar_event_set_recurrence_week_flag(calendar_event_h event, int week_flag); - -/** - * @brief Gets the recurrence ending time of the event from the calendar event handle. - * @details If recurrence frequency of the event is activated, then @a recurrence_until_date indicates recurrence ending time. + * @remarks @a location must be released with free() by you. * - * @param [in] event The calendar event handle - * @param [out] recurrence_until_date The ending time of the recurrence event + * @param [in] event The calendar event handle + * @param [out] location The location of the event \n If the location does not exist, it is NULL * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_NO_DATA Data not found * - * @see calendar_event_set_recurrence_until_date() + * @see calendar_event_set_location() */ -int calendar_event_get_recurrence_until_date(calendar_event_h event, struct tm *recurrence_until_date); - +int calendar_event_get_location(calendar_event_h event, char **location); /** - * @brief Sets a recurrence end time of the event in the calendar event handle. + * @brief Sets a location of the event in the calendar event handle. * - * @param [in] event The calendar event handle - * @param [in] recurrence_until_date The end time of the recurrence event + * @param [in] event The calendar event handle + * @param [in] location The location of the event * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @pre @a event has a recurrence frequency property using calendar_event_set_recurrence_frequency(). - * - * @see calendar_event_get_recurrence_until_date() + * @see calendar_event_get_location() */ -int calendar_event_set_recurrence_until_date(calendar_event_h event, struct tm recurrence_until_date); +int calendar_event_set_location(calendar_event_h event, const char *location); /** - * @brief Adds a recurrence exception date to the calendar event handle. - * - * @param[in] event The calendar event handle - * @param[in] year The year of date \n It has to be more than 1900 - * @param[in] month The month of date [1-12] - * @param[in] day The day of date [1-31] - * - * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_OUT_OF_MEMORY Out of memory - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @brief Gets the reminder of the event from the calendar event handle. + * @details The function returns reminder type and interval of the event. * - * @see calendar_event_set_recurrence_frequency() - * @see calendar_event_get_recurrence_exception_iterator() - */ -int calendar_event_add_recurrence_exception_date(calendar_event_h event, int year, int month, int day); - - -/** - * @brief Gets the recurrence exception iterator handle from the event handle. * - * @param[in] event The calendar event handle - * @param[out] iterator The recurrence exception iterator handle \n If the iterator does not exist, it is NULL + * @param [in] event The calendar event handle + * @param [out] reminder_interval_type The reminder type + * @param [out] reminder_interval The interval * * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_recurrence_exception_has_next() - * @see calendar_recurrence_exception_next() + * @see calendar_event_set_reminder() */ -int calendar_event_get_recurrence_exception_iterator(calendar_event_h event, calendar_recurrence_exception_iterator_h *iterator); +int calendar_event_get_reminder(calendar_event_h event, calendar_reminder_interval_type_e *reminder_interval_type, int *reminder_interval); /** - * @brief Checks whether there is a next recurrence exception handle on the list. - * - * @param [in] iterator The recurrence exception iterator handle - * - * @return @c true If the next element exists or @c false If the next element doesn't exist + * @brief Sets a reminder of the event in the calendar event handle. * - * @see calendar_event_get_recurrence_exception_iterator() - * @see calendar_recurrence_exception_next() - */ -bool calendar_recurrence_exception_has_next(calendar_recurrence_exception_iterator_h iterator); - -/** - * @brief Moves recurrence exception list iterator to the next position and gets recurrence exception date. - * @details If the next element for the current recurrence exception list exists, then the iterator is moved to - * the next position on the list and the recurrence exception handle for this position is returned. - * When the iterator reaches the last element of the list, all further calls will return - * #CALENDAR_ERROR_ITERATOR_END and @a recurrence exception will remain unchanged. + * @remarks If reminder is set, the alarm will remind the event with in-house calendar application. * - * @param [in] iterator The recurrent exception iterator handle - * @param [out] year The year of date \n It is supposed to be more than 1900 - * @param [out] month The month of date [1-12] - * @param [out] day The day of date [1-31] + * @param [in] event The calendar event handle + * @param [in] reminder_interval_type The reminder interval type + * @param [in] reminder_interval The reminder interval * * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_ITERATOR_END Iterator is on the last position - * - * @see calendar_event_get_recurrence_exception_iterator() - * @see calendar_recurrence_exception_has_next() - */ -int calendar_recurrence_exception_next(calendar_recurrence_exception_iterator_h *iterator, int* year, int* month, int* day); - -/** - * @brief Gets the start time of the event from the calendar event handle. * - * @param [in] event The calendar event handle - * @param [out] start_time The start date of the event - * - * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_NO_DATA Data not found - * - * @see calendar_event_set_start_time() - */ -int calendar_event_get_start_time(calendar_event_h event, struct tm *start_time); - - -/** - * @brief Sets a start time of the event in the calendar event handle. - * - * @param [in] event The calendar event handle - * @param [in] start_time The start date of the event - * - * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * - * @see calendar_event_get_start_time() + * @see calendar_event_get_reminder() */ -int calendar_event_set_start_time(calendar_event_h event, struct tm start_time); - +int calendar_event_set_reminder(calendar_event_h event, calendar_reminder_interval_type_e reminder_interval_type, int reminder_interval); /** - * @brief Gets the end time of the event from the calendar event handle. - * - * @param [in] event The calendar event handle - * @param [out] end_time The end date of the event - * - * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_NO_DATA Data not found + * @brief Gets the sound file path from the event handle. * - * @see calendar_event_set_end_time() - */ -int calendar_event_get_end_time(calendar_event_h event, struct tm *end_time); - - -/** - * @brief Sets the end time of the event in the calendar event handle. + * @remarks @a sound_file_path must be released with free() by you. * - * @param[in] event The calendar event handle - * @param[in] end_time The end date of the event + * @param[in] event The calendar event handle + * @param[out] sound_file_path The sound file path \n + * If @a sound_file_path does not exist, it is NULL * * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_event_get_end_time() + * @see calendar_event_set_reminder_sound_file_path() */ -int calendar_event_set_end_time(calendar_event_h event, struct tm end_time); +int calendar_event_get_reminder_sound_file_path(calendar_event_h event, char **sound_file_path); /** - * @brief Gets the total number of events from the calendar database. - * @pre This function requires an open connection to the calendar service by calendar_connect(). + * @brief Sets the sound file path to the event handle. * - * @param[out] count The total number of events + * @param[in] event The calendar event handle + * @param[in] sound_file_path The sound file path to set * - * @return 0 on success, otherwise a negative error value. - * @retval #CALENDAR_ERROR_NONE Successful - * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_connect() + * @see calendar_event_get_reminder_sound_file_path() */ -int calendar_event_get_total_count_from_db(int *count); +int calendar_event_set_reminder_sound_file_path(calendar_event_h event, const char *sound_file_path); /** * @brief Creates a attendee handle and make adds it to the calendar event. * * @remarks The created handle is not added to calendar database until calendar_event_insert_to_db() is called * - * @param[in] event The calendar event handle + * @param[in] event The calendar event handle * @param[out] attendee A new attendee handle * * @return 0 on success, otherwise a negative error value. @@ -707,12 +617,12 @@ int calendar_event_add_attendee(calendar_event_h event, calendar_attendee_h* att /** * @brief Creates a attendee handle with contact ID and adds it to the calendar event. * - * @details Adds an existing contact as an attendee to an event. A new attendee record is created, and the name, email address and phone number are populated from the values in the contact record. + * @details Adds an existing contact as an attendee to an event. A new attendee record is created, and the name, email address and phone number are populated from the values in the contact record. * @remarks The created handle is not added to calendar database until calendar_event_insert_to_db() is called * * - * @param[in] event The calendar event handle - * @param[in] contact_db_id The contact DB ID which is related to attendee + * @param[in] event The calendar event handle + * @param[in] contact_db_id The contact DB ID which is related to attendee * @param[out] attendee A new attendee handle from contact ID in the contacts database * * @return 0 on success, otherwise a negative error value. @@ -720,7 +630,7 @@ int calendar_event_add_attendee(calendar_event_h event, calendar_attendee_h* att * @retval #CALENDAR_ERROR_OUT_OF_MEMORY Out of memory * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @pre This function requires an open connection to Contacts Service by contacts_connect(). + * @pre This function requires an open connection to Contacts Service by contacts_connect(). * * @see calendar_event_remove_attendee() * @see calendar_attendee_set_name() @@ -737,7 +647,7 @@ int calendar_event_add_attendee_with_contact(calendar_event_h event, int contact * @brief Removes the attendee from the calendar event handle. * * - * @param[in] event The calendar event handle + * @param[in] event The calendar event handle * @param[in] attendee The attendee handle * * @return 0 on success, otherwise a negative error value. @@ -750,9 +660,9 @@ int calendar_event_add_attendee_with_contact(calendar_event_h event, int contact int calendar_event_remove_attendee(calendar_event_h event, calendar_attendee_h attendee); /** - * @brief Gets the attendee iterator handle from the event handle. + * @brief Gets the attendee iterator handle from the event handle. * - * @param[in] event The calendar event handle + * @param[in] event The calendar event handle * @param[out] iterator The attendee iterator handle * * @return 0 on success, otherwise a negative error value. @@ -768,8 +678,9 @@ int calendar_event_get_attendee_iterator(calendar_event_h event, calendar_attend /** * @brief Gets the last modified time of the event handle. * - * @param[in] event The calendar event handle - * @param[out] modified_time The last modified time of event + * @param[in] event The calendar event handle + * @param[out] modified_time The last modified time of event \n + * The @a modified_time is a unix timestamp since 00:00, Jan 1 1970 UTC. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -779,10 +690,10 @@ int calendar_event_get_attendee_iterator(calendar_event_h event, calendar_attend * @see calendar_event_insert_to_db() * @see calendar_event_update_to_db() */ -int calendar_event_get_last_modified_time(calendar_event_h event, struct tm *modified_time); +int calendar_event_get_last_modified_time(calendar_event_h event, long long int *modified_time); /** - * @brief Gets the visibility for the given calendar event handle. + * @brief Gets the visibility for the given calendar event handle. * * @param[in] event The calendar event handle * @param[out] visibility The visibility of the event \n (default : #CALENDAR_VISIBILITY_PUBLIC) @@ -796,7 +707,7 @@ int calendar_event_get_last_modified_time(calendar_event_h event, struct tm *mod int calendar_event_get_visibility(calendar_event_h event, calendar_visibility_e *visibility); /** - * @brief Sets a visibility for the given calendar event handle. + * @brief Sets the visibility for the given calendar event handle. * * @param[in] event The calendar event handle * @param[in] visibility The visibility of the event @@ -810,209 +721,698 @@ int calendar_event_get_visibility(calendar_event_h event, calendar_visibility_e int calendar_event_set_visibility(calendar_event_h event, calendar_visibility_e visibility); /** - * @brief Gets the timezone details for the given calendar event handle. + * @brief Gets the category for the given calendar event handle. + * @remarks @a categories must be released with free() by you. * - * @remark @a timezone_name must be released with free() by you. - * - * @param[in] event The calendar event handle - * @param[out] timezone_name The time zone name + * @param[in] event The calendar event handle + * @param[out] categories The category of the event \n Multiple categories are seperated by "," * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_foreach_timezone() - * @see calendar_event_set_timezone() + * @see calendar_event_set_categories() */ -int calendar_event_get_timezone(calendar_event_h event, char** timezone_name); +int calendar_event_get_categories(calendar_event_h event, char **categories); /** - * @brief Sets a timezone for the given calendar event handle. + * @brief Sets the category for the given calendar event handle. * - * @param[in] event The calendar event handle - * @param[in] timezone_name The time zone name + * @param[in] event The calendar event handle + * @param[in] categories The category of the event \n Multiple categories are seperated by "," * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_foreach_timezone() - * @see calendar_event_get_timezone() + * @see calendar_event_get_categories() */ -int calendar_event_set_timezone(calendar_event_h event, const char* timezone_name); +int calendar_event_set_categories(calendar_event_h event, const char *categories); /** - * @brief Gets an event from vCalendar and returns a new event handle. - * - * @remarks The new event handle must be released with calendar_event_destroy() by you. + * @brief Gets the status for the given calendar event handle. * - * @param[in] vcalendar_stream The vCalendar stream to convert - * @param[out] event The event handle + * @param[in] event The calendar event handle + * @param[out] status The status of the event \n (default : #CALENDAR_EVENT_STATUS_NONE) * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_OUT_OF_MEMORY Out of memory * - * @see calendar_event_destroy() - * @see calendar_event_get_vcalendar_from_event() + * @see calendar_event_set_status() */ -int calendar_event_get_from_vcalendar(const char *vcalendar_stream, calendar_event_h *event); +int calendar_event_get_status(calendar_event_h event, calendar_event_status_e *status); /** - * @brief Gets vCalendar from the event handle. - * - * @remarks @a vcalendar_stream must be released with free() by you. + * @brief Sets a status for the given calendar event handle. * - * @param[in] event The event handle - * @param[out] vcalendar_stream The vCalendar stream to convert + * @param[in] event The calendar event handle + * @param[in] status The status of the event * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_event_get_from_vcalendar() + * @see calendar_event_get_status() */ -int calendar_event_get_vcalendar_from_event(calendar_event_h event, char **vcalendar_stream); +int calendar_event_set_status(calendar_event_h event, calendar_event_status_e status); /** - * @brief Retrieves all calendar events from all of calendars by invoking the given callback function iteratively. + * @brief Gets the busy status for the given calendar event handle. * - * @param[in] callback The callback function to invoke - * @param[in] user_data The user data to be passed to the callback function + * @param[in] event The calendar event handle + * @param[out] busy_status The busy status of the event \n (default : #CALENDAR_EVENT_BUSY_STATUS_FREE) * - * @return 0 on success, otherwise a negative error value. + * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_DB_FAILED No access to database * - * @pre This function requires an open connection to the calendar service by calendar_connect(). + * @see calendar_event_set_busy_status() + */ +int calendar_event_get_busy_status(calendar_event_h event, calendar_event_busy_status_e *busy_status); + +/** + * @brief Sets a busy status for the given calendar event handle. * - * @post This function invokes calendar_foreach_query_event_cb(). + * @param[in] event The calendar event handle + * @param[in] busy_status The busy status of the event * - * @see calendar_foreach_query_event_cb() + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_get_busy_status() */ -int calendar_foreach_event_from_db(calendar_foreach_query_event_cb callback, void *user_data); +int calendar_event_set_busy_status(calendar_event_h event, calendar_event_busy_status_e busy_status); /** - * @brief Retrieves all calendar events with the given calendar database ID. + * @brief Gets the priority for the given calendar event handle. * - * @param[in] callback The callback function to invoke - * @param[in] calendar_db_id The calendar database ID to filter \n - * 1 means the default calendar on the device - * @param[in] user_data The user data to be passed to the callback function + * @param[in] event The calendar event handle + * @param[out] priority The priority of the event \n (default : #CALENDAR_EVENT_PRIORITY_LOW) * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_DB_FAILED No access to database * - * @pre This function requires an open connection to the calendar service by calendar_connect(). + * @see calendar_event_set_priority() + */ +int calendar_event_get_priority(calendar_event_h event, calendar_event_priority_e *priority); + +/** + * @brief Sets a priority for the given calendar event handle. + * + * @param[in] todo The calendar event handle + * @param[in] priority The priority of the event + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_get_priority() + */ +int calendar_event_set_priority(calendar_event_h event, calendar_event_priority_e priority); + +/** + * @brief Gets the UID of the event from the calendar event handle. + * + * @remarks @a uid must be released with free() by you. + * + * @param [in] event The calendar event handle + * @param [out] uid The UID of the event \n If the uid does not exist, it is NULL * - * @post This function invokes calendar_foreach_query_event_cb(). + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_foreach_query_event_cb() - * @see calendar_foreach_event_from_db() - * @see calendar_query_event_by_description() - * @see calendar_query_event_by_location() - * @see calendar_query_event_by_period() + * @see calendar_event_set_uid() */ -int calendar_query_event_by_calendar(calendar_foreach_query_event_cb callback, int calendar_db_id, void *user_data); +int calendar_event_get_uid(calendar_event_h event, char **uid); /** - * @brief Retrieves all calendar events with the given subject. + * @brief Sets a UID of the event in the calendar event handle. * - * @param[in] callback The callback function to invoke - * @param[in] calendar_db_id The calendar database ID to filter \n - * 1 means the default calendar on the device - * @param[in] subject_to_find The description to filter - * @param[in] user_data The user data to be passed to the callback function + * @param [in] event The calendar event handle + * @param [in] uid The UID of the event + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_get_uid() + */ +int calendar_event_set_uid(calendar_event_h event, const char *uid); + +/** + * @brief Gets the timezone details for the given calendar event handle. + * + * @remark @a timezone_name must be released with free() by you. + * + * @param[in] event The calendar event handle + * @param[out] timezone_name The time zone name * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_DB_FAILED No access to database * - * @pre This function requires an open connection to the calendar service by calendar_connect(). + * @see calendar_foreach_timezone() + * @see calendar_event_set_timezone() + */ +int calendar_event_get_timezone(calendar_event_h event, char** timezone_name); + +/** + * @brief Sets a timezone for the given calendar event handle. * - * @post This function invokes calendar_foreach_query_event_cb(). + * @param[in] event The calendar event handle + * @param[in] timezone_name The time zone name * - * @see calendar_event_get_subject() - * @see calendar_event_set_subject() - * @see calendar_foreach_query_event_cb() - * @see calendar_query_event_by_calendar() - * @see calendar_query_event_by_description() - * @see calendar_query_event_by_location() - * @see calendar_query_event_by_period() + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_foreach_timezone() + * @see calendar_event_get_timezone() */ -int calendar_query_event_by_subject(calendar_foreach_query_event_cb callback, int calendar_db_id, const char *subject_to_find, void *user_data); +int calendar_event_set_timezone(calendar_event_h event, const char* timezone_name); /** - * @brief Retrieves all calendar events with the given description. + * @brief Gets events as array from vCalendar + * + * @remarks @a event_array must be released with calendar_event_free_event_array() by you. * - * @param[in] callback The callback function to invoke - * @param[in] calendar_db_id The calendar database ID to filter \n - * 1 means the default calendar on the device - * @param[in] description_to_find The description to filter - * @param[in] user_data The user data to be passed to the callback function + * @param[in] vcalendar_stream The vCalendar stream to convert + * @param[out] event_array The event array + * @param[out] length The length of the event array * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_OUT_OF_MEMORY Out of memory * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * @retval #CALENDAR_ERROR_OUT_OF_MEMORY Out of memory * - * @pre This function requires an open connection to the calendar service by calendar_connect(). + * @see calendar_event_free_event_array() + * @see calendar_event_get_vcalendar_from_db() + */ +int calendar_event_get_event_array_from_vcalendar(const char *vcalendar_stream, calendar_event_h **event_array, int *length); + +/** + * @brief Gets vCalendar with event database ID from the calendar database * - * @post This function invokes calendar_foreach_query_event_cb(). + * @remarks @a vcalendar_stream must be released with free() by you. * - * @see calendar_event_get_description() - * @see calendar_event_set_description() - * @see calendar_foreach_query_event_cb() - * @see calendar_query_event_by_calendar() - * @see calendar_query_event_by_subject() - * @see calendar_query_event_by_location() - * @see calendar_query_event_by_period() - * @see calendar_foreach_query_event_cb() + * @param[in] event_db_id_array The event database ID array + * @param[in] length Length of event database ID array + * @param[out] vcalendar_stream The vCalendar stream to convert + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_connect() + * @see calendar_event_get_event_array_from_vcalendar() */ -int calendar_query_event_by_description(calendar_foreach_query_event_cb callback, int calendar_db_id, const char *description_to_find, void *user_data); +int calendar_event_get_vcalendar_from_db(int *event_db_id_array, int length, char **vcalendar_stream); /** - * @brief Retrieves all calendar events with the given location. + * @brief Gets information whether an event is recurrence or not. + * + * @param [in] event The calendar event handle + * @param [out] is_recurrence @c true if the event is recurrence event, otherwise @c false \n + * (default : @c false) * - * @param[in] callback The callback function to invoke - * @param[in] calendar_db_id The calendar database ID to filter \n - * 1 means the default calendar on the device - * @param[in] location_to_find The location to filter - * @param[in] user_data The user data to be passed to the callback function + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_set_recurrence_frequency() + */ +int calendar_event_get_is_recurrence(calendar_event_h event, bool *is_recurrence); + +/** + * @brief Gets the recurrence frequency of the event from the calendar event handle. + * + * @param[in] event The calendar event handle + * @param[out] recurrence_frequency The recurrence frequency of the event + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_set_recurrence_frequency() + * @see calendar_event_set_recurrence_byday() + * @see calendar_event_get_recurrence_byday() + */ +int calendar_event_get_recurrence_frequency(calendar_event_h event, calendar_recurrence_frequency_e *recurrence_frequency); + +/** + * @brief Sets a recurrence frequency of the event to the calendar event handle. + * + * @param [in] event The calendar event handle + * @param [in] recurrence_frequency The recurrence frequency of the event \n + * If you set it to #CALENDAR_RECURRENCE_WEEKLY, you have to set calendar_event_set_recurrence_byday(). + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_get_recurrence_frequency() + * @see calendar_event_set_recurrence_byday() + * @see calendar_event_get_recurrence_byday() + */ +int calendar_event_set_recurrence_frequency(calendar_event_h event, calendar_recurrence_frequency_e recurrence_frequency); + +/** + * @brief Gets the recurrence interval of the event from the calendar event handle. + * + * @param[in] event The calendar event handle + * @param[out] recurrence_interval The recurrence interval of the event + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_set_recurrence_interval() + * @see calendar_event_get_recurrence_frequency() + */ +int calendar_event_get_recurrence_interval(calendar_event_h event, int *recurrence_interval); + +/** + * @brief Sets a recurrence interval of the event in the calendar event handle. + * + * @param [in] event The calendar event handle + * @param [in] recurrence_interval The recurrence interval of the event + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_get_recurrence_interval() + * @see calendar_event_set_recurrence_frequency() + */ +int calendar_event_set_recurrence_interval(calendar_event_h event, int recurrence_interval); + +/** + * @brief Gets the recurrence count of the event from the calendar event handle. + * + * @param[in] event The calendar event handle + * @param[out] recurrence_count The recurrence type of the event + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_set_recurrence_count() + * @see calendar_event_get_recurrence_frequency() + */ +int calendar_event_get_recurrence_count(calendar_event_h event, int *recurrence_count); + +/** + * @brief Sets a recurrence count of the event to the calendar event handle. + * + * @param [in] event The calendar event handle + * @param [in] recurrence_count The recurrence count of the event + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_get_recurrence_count() + * @see calendar_event_set_recurrence_frequency() + */ +int calendar_event_set_recurrence_count(calendar_event_h event, int recurrence_count); + +/** + * @brief Gets the recurrence ending time of the event from the calendar event handle. + * @details If recurrence frequency of the event is activated, then @a recurrence_until_date indicates recurrence ending time. + * + * @param [in] event The calendar event handle + * @param [out] recurrence_until_date The ending time of the recurrence event \n + * The @a recurrence_until_date is a unix timestamp since 00:00, Jan 1 1970 UTC. + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_NO_DATA Data not found + * + * @see calendar_event_set_recurrence_until_date() + */ +int calendar_event_get_recurrence_until_date(calendar_event_h event, long long int *recurrence_until_date); + +/** + * @brief Sets a recurrence end time of the event in the calendar event handle. + * + * @param [in] event The calendar event handle + * @param [in] recurrence_until_date The end time of the recurrence event \n + * The @a recurrence_until_date is a unix timestamp since 00:00, Jan 1 1970 UTC. + * + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @pre @a event has a recurrence frequency property using calendar_event_set_recurrence_frequency(). + * + * @see calendar_event_get_recurrence_until_date() + */ +int calendar_event_set_recurrence_until_date(calendar_event_h event, long long int recurrence_until_date); + +/** + * @brief Gets the recurrence ending date for all day event + * @details If recurrence frequency of the event is activated, then @a recurrence_until_date indicates recurrence ending time. + * + * @param [in] event The calendar event handle + * @param [out] until_year Year of until date + * @param [out] until_month Month of until date + * @param [out] until_day Day of until date + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_NO_DATA Data not found + * + * @see calendar_event_set_all_day_recurrence_until_date() + */ +int calendar_event_get_all_day_recurrence_until_date(calendar_event_h event, int *until_year, int *until_month, int *until_day); + +/** + * @brief Sets a recurrence end date for all day event + * + * @param [in] event The calendar event handle + * @param [in] until_year Year of until date + * @param [in] until_month Month of until date + * @param [in] until_day Day of until date + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @pre @a event has a recurrence frequency property using calendar_event_set_recurrence_frequency(). + * + * @see calendar_event_get_all_day_recurrence_until_date() + */ +int calendar_event_set_all_day_recurrence_until_date(calendar_event_h event, int until_year, int until_month, int until_day); + +/** + * @brief Gets the recurrence frequency of the event from the calendar event handle. + * @details This rule is "BYDAY" rule in RFC 5545 iCalendar http://http://www.ietf.org/rfc/rfc2445.txt + * + * @remarks @a byday must be released with free() by you. + * + * @param[in] event The calendar event handle + * @param[out] byday The "BYDAY" of the reccurrence event \n combination of [[-]1~5]MO, TU, WE, TH, FR, SA, SU with "," + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_set_recurrence_byday() + * @see calendar_event_set_recurrence_frequency() + * @see calendar_event_get_recurrence_frequency() + */ +int calendar_event_get_recurrence_byday(calendar_event_h event, char **byday); + +/** + * @brief Sets the days of week flag to the calendar event handle. + * @details This rule is "BYDAY" rule in RFC 5545 iCalendar http://http://www.ietf.org/rfc/rfc2445.txt + * + * @param[in] event The calendar event handle + * @param[in] byday The "BYDAY" of the reccurrence event \n combination of [[-]1~5]MO, TU, WE, TH, FR, SA, SU with "," + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_get_recurrence_byday() + * @see calendar_event_set_recurrence_frequency() + * @see calendar_event_get_recurrence_frequency() + */ +int calendar_event_set_recurrence_byday(calendar_event_h event, const char* byday); + +/** + * @brief Gets the recurrence position flag of the event from the calendar event handle. + * @details This rule is "BYSETPOS" rule in RFC 5545 iCalendar http://http://www.ietf.org/rfc/rfc2445.txt + * + * @remarks @a bysetpos must be released with free() by you. + * + * @param[in] event The calendar event handle + * @param[out] bysetpos The "BYSETPOS" of the reccurrence event \n combination of 1 to 366 or -366 to -1 with "," + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_set_recurrence_bysetpos() + */ +int calendar_event_get_recurrence_bysetpos(calendar_event_h event, char **bysetpos); + +/** + * @brief Sets a recurrence position flag of the event to the calendar event handle. + * @details This rule is "BYSETPOS" rule in RFC 5545 iCalendar http://http://www.ietf.org/rfc/rfc2445.txt + * + * @param[in] event The calendar event handle + * @param[in] bysetpos The "BYSETPOS" of the reccurrence event \n combination of 1 to 366 or -366 to -1 with "," + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_get_recurrence_bysetpos() + */ +int calendar_event_set_recurrence_bysetpos(calendar_event_h event, const char* bysetpos); + +/** + * @brief Gets a recurrence BYMONTHDAY of the event to the calendar event handle. + * @details This rule is "BYMONTHDAY" rule in RFC 5545 iCalendar http://http://www.ietf.org/rfc/rfc2445.txt + * + * @remarks @a bymonthday must be released with free() by you. + * + * @param[in] event The calendar event handle + * @param[out] bymonthday The BYMONTHDAY of the reccurrence event \n combination of 1 to 31 or -31 to -1 with "," + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + */ +int calendar_event_get_recurrence_bymonthday(calendar_event_h event, char **bymonthday); + +/** + * @brief Sets a recurrence BYMONTHDAY of the event to the calendar event handle. + * @details This rule is "BYMONTHDAY" rule in RFC 5545 iCalendar http://http://www.ietf.org/rfc/rfc2445.txt + * + * @param[in] event The calendar event handle + * @param[in] bymonthday The BYMONTHDAY of the reccurrence event \n combination of 1 to 31 or -31 to -1 with "," + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + */ +int calendar_event_set_recurrence_bymonthday(calendar_event_h event, const char* bymonthday); + +/** + * @brief Gets a recurrence BYMONTH of the event to the calendar event handle. + * @details This rule is "BYMONTH" rule in RFC 5545 iCalendar http://http://www.ietf.org/rfc/rfc2445.txt + * + * @remarks @a bymonth must be released with free() by you. + * + * @param[in] event The calendar event handle + * @param[out] bymonth The BYMONTH of the reccurrence event \n combination of 1 to 12 with "," + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + */ +int calendar_event_get_recurrence_bymonth(calendar_event_h event, char** bymonth); + +/** + * @brief Sets a recurrence BYMONTH of the event to the calendar event handle. + * @details This rule is "BYMONTH" rule in RFC 5545 iCalendar http://http://www.ietf.org/rfc/rfc2445.txt + * + * @param[in] event The calendar event handle + * @param[in] bymonth The BYMONTH of the reccurrence event \n combination of 1 to 12 with "," + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + */ +int calendar_event_set_recurrence_bymonth(calendar_event_h event, const char* bymonth); + +/** + * @brief Gets the first day of the week. + * + * @param[in] event The calendar event handle + * @param[out] week_start The first day of the week for the recurrence + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_set_recurrence_week_start() + */ +int calendar_event_get_recurrence_week_start(calendar_event_h event, calendar_week_flag_e *week_start); + +/** + * @brief Sets the first day of the week + * + * @param[in] event The calendar event handle + * @param[in] week_start The first day of the week for the recurrence + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_get_recurrence_week_start() + */ +int calendar_event_set_recurrence_week_start(calendar_event_h event, calendar_week_flag_e week_start); + +/** + * @brief Removes the recurrence event instance from the calendar database. + * + * @param[in] event_db_id The event database ID to delete + * @param[in] start_time The recurrence instance start time to delete + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). + * + * @see calendar_connect() + * @see calendar_event_get_recurrence_exdate() + */ +int calendar_event_delete_recurrence_instance_from_db(int event_db_id, long long int start_time); + +/** + * @brief Removes the recurrence all day event instance from the calendar database. + * + * @param[in] event_db_id The event database ID to delete + * @param[in] year The year of recurrence all instance + * @param[in] month The month of recurrence all instance + * @param[in] day The day of recurrence all instance + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). + * + * @see calendar_connect() + * @see calendar_event_get_recurrence_exdate() + */ +int calendar_event_delete_recurrence_all_day_instance_from_db(int event_db_id, int year, int month, int day); + +/** + * @brief Gets a recurrence EXDATE of the event to the calendar event handle. + * @details This rule is "EXDATE" rule in RFC 5545 iCalendar http://http://www.ietf.org/rfc/rfc2445.txt + * + * @remarks @a exdate must be released with free() by you. + * + * @param[in] event The calendar event handle + * @param[out] exdate The EXDATE of the reccurrence event + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_delete_recurrence_instance_from_db() + * @see calendar_event_delete_recurrence_all_day_instance_from_db() + */ +int calendar_event_get_recurrence_exdate(calendar_event_h event, char** exdate); + +/** + * @brief Frees event array + * + * @param[out] event_array The event array * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @see calendar_event_search_event_by_calendar_book() + */ +int calendar_event_free_event_array(calendar_event_h *event_array); + +/** + * @brief Frees modified event array + * + * @param[out] modified_event_array The modified event array + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_event_search_event_by_version() + */ +int calendar_event_free_modified_event_array(pcalendar_modified_event_s *modified_event_array); + +/** + * @brief Retrieves all events as array from calendar book + * + * @remarks @a event_array must be released with calendar_event_free_event_array() by you. + * + * @param[in] calendar_book_db_id The calendar book database ID to filter \n + * #DEFAULT_EVENT_CALENDAR_BOOK_DB_ID means the default event calendar book on the device \n + * #CALENDAR_BOOK_FILTER_ALL means all calendar books on the device + * @param[out] event_array The event array + * @param[out] length The length of the event array + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_OUT_OF_MEMORY Out of memory + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_DB_FAILED Database operation failure * * @pre This function requires an open connection to the calendar service by calendar_connect(). * - * @post This function invokes calendar_foreach_query_event_cb(). + * @see calendar_connect() + * @see calendar_event_free_event_array() + */ +int calendar_event_search_event_by_calendar_book(int calendar_book_db_id, calendar_event_h **event_array, int *length); + +/** + * @brief Retrieves extend event instances within specified time range. * - * @see calendar_event_get_location() - * @see calendar_event_set_location() - * @see calendar_foreach_query_event_cb() - * @see calendar_query_event_by_calendar() - * @see calendar_query_event_by_subject() - * @see calendar_query_event_by_description() - * @see calendar_query_event_by_period() + * @remarks @a event_array must be released with calendar_event_free_event_array() by you. + * + * @param[in] calendar_book_db_id The calendar book database ID to filter \n + * #DEFAULT_EVENT_CALENDAR_BOOK_DB_ID means the default event calendar book on the device \n + * #CALENDAR_BOOK_FILTER_ALL means all calendar books on the device + * @param[in] period_start_time The start of the time range\n + * The @a start_time is a unix timestamp since 00:00, Jan 1 1970 UTC. + * @param[in] period_end_time The end of the time range\n + * The @a end_time is a unix timestamp since 00:00, Jan 1 1970 UTC. + * @param[out] event_array The event array + * @param[out] length The length of the event array + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). + * + * @see calendar_connect() + * @see calendar_event_free_event_array() */ -int calendar_query_event_by_location(calendar_foreach_query_event_cb callback, int calendar_db_id, const char *location_to_find, void *user_data); +int calendar_event_search_extend_instance_by_period(int calendar_book_db_id, + long long int period_start_time, long long int period_end_time, + calendar_event_h **event_array, int *length); /** - * @brief Retrieves all calendar events between the given start_time and end_time. + * @brief Retrieves all day extend event instances within specified time range. + * + * @remarks @a event_array must be released with calendar_event_free_event_array() by you. * - * @param[in] callback The callback function to invoke - * @param[in] calendar_db_id The calendar database ID to filter \n - * 1 means the default calendar on the device - * @param[in] start_time The start date - * @param[in] end_time The end date - * @param[in] user_data The user data to be passed to the callback function + * @param[in] calendar_book_db_id The calendar book database ID to filter \n + * #DEFAULT_EVENT_CALENDAR_BOOK_DB_ID means the default event calendar book on the device \n + * #CALENDAR_BOOK_FILTER_ALL means all calendar books on the device + * @param[in] period_start_year The start year of the time range + * @param[in] period_start_month The start month of the time range + * @param[in] period_start_day The start day of the time range + * @param[in] period_end_year The end year of the time range + * @param[in] period_end_month The end month of the time range + * @param[in] period_end_day The end day of the time range + * @param[out] event_array The event array + * @param[out] length The length of the event array * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -1021,45 +1421,38 @@ int calendar_query_event_by_location(calendar_foreach_query_event_cb callback, i * * @pre This function requires an open connection to the calendar service by calendar_connect(). * - * @post This function invokes calendar_foreach_query_event_cb(). - * - * @see calendar_event_get_start_time() - * @see calendar_event_set_start_time() - * @see calendar_event_get_end_time() - * @see calendar_event_set_end_time() - * @see calendar_foreach_query_event_cb() - * @see calendar_query_event_by_calendar() - * @see calendar_query_event_by_subject() - * @see calendar_query_event_by_description() - * @see calendar_query_event_by_location() - * @see calendar_foreach_query_event_cb() - * + * @see calendar_connect() + * @see calendar_event_free_event_array() */ -int calendar_query_event_by_period(calendar_foreach_query_event_cb callback, int calendar_db_id, struct tm start_time, struct tm end_time, void *user_data); +int calendar_event_search_all_day_extend_instance_by_period(int calendar_book_db_id, + int period_start_year, int period_start_month, int period_start_day, + int period_end_year, int period_end_month, int period_end_day, + calendar_event_h **event_array, int *length); /** - * @brief Retrieves all calendar events that have been modified since the given time. - * @details This function will find all changed event since the given time + * @brief Retrieves all modified events information as array that have been modified since the given version. + * + * @remarks @a modified_event_array must be released with calendar_event_free_modified_event_array() by you. * - * @param[in] callback The callback function to invoke - * @param[in] calendar_db_id The calendar database ID to filter \n - * 1 means the default calendar on the device - * @param[in] time The time to find events which are changed since when - * @param[in] user_data The user data to be passed to the callback function + * @param[in] calendar_book_db_id The calendar book database ID to filter \n + * #DEFAULT_EVENT_CALENDAR_BOOK_DB_ID means the default event calendar book on the device \n + * #CALENDAR_BOOK_FILTER_ALL means all calendar books on the device + * @param[in] calendar_db_version The calendar database version + * @param[out] modified_event_array The modified event information array + * @param[out] length The length of the event array * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_OUT_OF_MEMORY Out of memory * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * @retval #CALENDAR_ERROR_DB_FAILED Database operation failure * * @pre This function requires an open connection to the calendar service by calendar_connect(). * - * @post This function invokes calendar_foreach_query_event_cb(). - * - * @see calendar_event_get_last_modified_time() - * @see calendar_foreach_query_event_cb() + * @see calendar_connect() + * @see calendar_event_free_modified_event_array() */ -int calendar_query_event_by_time_last_modified(calendar_foreach_query_event_cb callback, int calendar_db_id, struct tm time, void *user_data); +int calendar_event_search_event_by_version(int calendar_book_db_id, int calendar_db_version, pcalendar_modified_event_s **modified_event_array, int *length); /** * @} @@ -1090,9 +1483,9 @@ int calendar_query_event_by_time_last_modified(calendar_foreach_query_event_cb c int calendar_todo_create(calendar_todo_h *todo); /** - * @brief Destroys the calendar to-do handle + * @brief Destroys the calendar to-do handle * - * @param[in] todo The calendar to-do handle + * @param[in] todo The calendar to-do handle * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -1106,9 +1499,9 @@ int calendar_todo_destroy(calendar_todo_h todo); /** * @brief Adds the given to-do item to the calendar database. * - * @param[in] todo The calendar to-do handle - * @param[in] calendar_db_id The calendar database ID to which the event insert. \n - * 1 means the default calendar on the device + * @param[in] todo The calendar to-do handle + * @param[in] calendar_book_db_id The calendar book database ID to which the to-do insert. \n + * #DEFAULT_TODO_CALENDAR_BOOK_DB_ID means the default to-do calendar book on the device * @param[out] todo_db_id The to-do ID to be assigned to the to-do item * * @return 0 on success, otherwise a negative error value. @@ -1120,7 +1513,7 @@ int calendar_todo_destroy(calendar_todo_h todo); * @see calendar_todo_update_to_db() * */ -int calendar_todo_insert_to_db(calendar_todo_h todo, int calendar_db_id, int *todo_db_id); +int calendar_todo_insert_to_db(calendar_todo_h todo, int calendar_book_db_id, int *todo_db_id); /** * @brief Removes the to-do item from the calendar database. @@ -1142,7 +1535,7 @@ int calendar_todo_delete_from_db(int todo_id); * @brief Updates the to-do item on the calendar database. * @details calendar_todo_get_db_id() is called internally to update the to-do item in the calendar database. * - * @param[in] todo The calendar to-do handle + * @param[in] todo The calendar to-do handle * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -1160,13 +1553,13 @@ int calendar_todo_update_to_db(calendar_todo_h todo); /** * @brief Gets the to-do item handle associated with the given to-do DB ID. - * @details This function gets the new to-do handle with the given to-do database ID from the calendar database. - * A new calendar to-do handle will be created. + * @details This function gets the new to-do handle with the given to-do database ID from the calendar database. + * A new calendar to-do handle will be created. * - * @remarks The new to-do handle must be released with calendar_todo_destroy() by you. + * @remarks The new to-do handle must be released with calendar_todo_destroy() by you. * * @param[in] todo_id The to-do Database ID - * @param[out] todo The calendar to-do handle + * @param[out] todo The calendar to-do handle * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -1181,7 +1574,7 @@ int calendar_todo_update_to_db(calendar_todo_h todo); int calendar_todo_get_from_db(int todo_id, calendar_todo_h *todo); /** - * @brief Gets the database ID for the given calendar to-do handle. + * @brief Gets the database ID for the given calendar to-do handle. * * @param[in] todo The calendar to-do handle * @param[out] todo_db_id The database ID of the to-do item (default : 0) \n @@ -1197,11 +1590,11 @@ int calendar_todo_get_from_db(int todo_id, calendar_todo_h *todo); int calendar_todo_get_db_id(calendar_todo_h todo, int *todo_db_id); /** - * @brief Gets the calendar database ID associated with the given calendar to-do handle. + * @brief Gets The calendar book database ID associated with the given calendar to-do handle. * * @param[in] todo The calendar to-do handle - * @param[out] calendar_db_id The calendar database ID fetched from the calendar to-do handle (default : 0) \n - * 0 means the to-do is not in calendar database. + * @param[out] calendar_book_db_id The calendar book database ID fetched from the calendar to-do handle (default : 0) \n + * 0 means the to-do is not in calendar database. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -1209,14 +1602,14 @@ int calendar_todo_get_db_id(calendar_todo_h todo, int *todo_db_id); * * @see calendar_todo_insert_to_db() */ -int calendar_todo_get_calendar_db_id(calendar_todo_h todo, int *calendar_db_id); +int calendar_todo_get_calendar_book_db_id(calendar_todo_h todo, int *calendar_book_db_id); /** * @brief Gets the subject of the to-do from the calendar to-do handle. * - * @remarks @a subject must be released with free() by you. + * @remarks @a subject must be released with free() by you. * - * @param [in] todo The calendar to-do handle + * @param [in] todo The calendar to-do handle * @param [out] subject The subject of the to-do \n If the subject does not exist, it is NULL * * @return 0 on success, otherwise a negative error value. @@ -1230,7 +1623,7 @@ int calendar_todo_get_subject(calendar_todo_h todo, char **subject); /** * @brief Sets a subject of the to-do handle. * - * @param [in] todo The calendar to-do handle + * @param [in] todo The calendar to-do handle * @param [in] subject The subject of the to-do * * @return 0 on success, otherwise a negative error value. @@ -1244,9 +1637,9 @@ int calendar_todo_set_subject(calendar_todo_h todo, const char *subject); /** * @brief Gets description of the to-do from the calendar to-do handle. * - * @remarks @a description must be released with free() by you. + * @remarks @a description must be released with free() by you. * - * @param [in] todo The calendar to-do handle + * @param [in] todo The calendar to-do handle * @param [out] description The description of the to-do \n If the description does not exist, it is NULL * * @return 0 on success, otherwise a negative error value. @@ -1260,7 +1653,7 @@ int calendar_todo_get_description(calendar_todo_h todo, char **description); /** * @brief Sets a description of the to-do in the calendar to-do handle. * - * @param [in] todo The calendar to-do handle + * @param [in] todo The calendar to-do handle * @param [in] description The description of the to-do * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -1272,7 +1665,7 @@ int calendar_todo_get_description(calendar_todo_h todo, char **description); int calendar_todo_set_description(calendar_todo_h todo, const char *description); /** - * @brief Gets the priority for the given calendar to-do handle. + * @brief Gets the priority for the given calendar to-do handle. * * @param[in] todo The calendar to-do handle * @param[out] priority The priority of the to-do @@ -1286,7 +1679,7 @@ int calendar_todo_set_description(calendar_todo_h todo, const char *description) int calendar_todo_get_priority(calendar_todo_h todo, calendar_todo_priority_e *priority); /** - * @brief Sets a priority for the given calendar to-do handle. + * @brief Sets a priority for the given calendar to-do handle. * * @param[in] todo The calendar to-do handle * @param[in] priority The priority of the to-do @@ -1300,7 +1693,7 @@ int calendar_todo_get_priority(calendar_todo_h todo, calendar_todo_priority_e *p int calendar_todo_set_priority(calendar_todo_h todo, calendar_todo_priority_e priority); /** - * @brief Gets the status for the given calendar to-do handle. + * @brief Gets the status for the given calendar to-do handle. * * @param[in] todo The calendar to-do handle * @param[out] status The status of the to-do @@ -1309,12 +1702,12 @@ int calendar_todo_set_priority(calendar_todo_h todo, calendar_todo_priority_e pr * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_todo_set_status() + * @see calendar_todo_set_status() */ int calendar_todo_get_status(calendar_todo_h todo, calendar_todo_status_e *status); /** - * @brief Sets a status for the given calendar to-do handle. + * @brief Sets a status for the given calendar to-do handle. * * @param[in] todo The calendar to-do handle * @param[in] status The status of the to-do @@ -1328,7 +1721,7 @@ int calendar_todo_get_status(calendar_todo_h todo, calendar_todo_status_e *statu int calendar_todo_set_status(calendar_todo_h todo, calendar_todo_status_e status); /** - * @brief Gets the visibility for the given calendar to-do handle. + * @brief Gets the visibility for the given calendar to-do handle. * * @param[in] todo The calendar to-do handle * @param[out] visibility The visibility of the to-do \n (default : #CALENDAR_VISIBILITY_PUBLIC) @@ -1342,7 +1735,7 @@ int calendar_todo_set_status(calendar_todo_h todo, calendar_todo_status_e status int calendar_todo_get_visibility(calendar_todo_h todo, calendar_visibility_e *visibility); /** - * @brief Sets a visibility for the given calendar to-do handle. + * @brief Sets a visibility for the given calendar to-do handle. * * @param[in] todo The calendar to-do handle * @param[in] visibility The visibility of the to-do @@ -1358,9 +1751,9 @@ int calendar_todo_set_visibility(calendar_todo_h todo, calendar_visibility_e vis /** * @brief Gets the location of the to-do from the calendar to-do handle. * - * @remarks @a location must be released with free() by you. + * @remarks @a location must be released with free() by you. * - * @param [in] todo The calendar to-do handle + * @param [in] todo The calendar to-do handle * @param [out] location The location of the to-do \n If the location does not exist, it is NULL * * @return 0 on success, otherwise a negative error value. @@ -1375,7 +1768,7 @@ int calendar_todo_get_location(calendar_todo_h todo, char **location); /** * @brief Sets a location of the to-do in the calendar to-do handle. * - * @param [in] todo The calendar to-do handle + * @param [in] todo The calendar to-do handle * @param [in] location The location of the to-do * * @return 0 on success, otherwise a negative error value. @@ -1389,8 +1782,9 @@ int calendar_todo_set_location(calendar_todo_h todo, const char *location); /** * @brief Gets the last modified time of the to-do item. * - * @param[in] todo The calendar to-do handle - * @param[out] modified_time The last modified time + * @param[in] todo The calendar to-do handle + * @param[out] modified_time The last modified time\n + * The @a modified_time is a unix timestamp since 00:00, Jan 1 1970 UTC. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -1401,9 +1795,9 @@ int calendar_todo_set_location(calendar_todo_h todo, const char *location); * @see calendar_todo_update_to_db() * */ -int calendar_todo_get_last_modified_time(calendar_todo_h todo, struct tm *modified_time); +int calendar_todo_get_last_modified_time(calendar_todo_h todo, long long int *modified_time); /** - * @brief Gets the timezone details for the given calendar to-do handle. + * @brief Gets the timezone details for the given calendar to-do handle. * @remarks @a timezone_name must be released with free() by you. * * @param[in] todo The calendar to-do handle @@ -1416,10 +1810,10 @@ int calendar_todo_get_last_modified_time(calendar_todo_h todo, struct tm *modifi * @see calendar_todo_set_timezone() * @see calendar_foreach_timezone() */ -int calendar_todo_get_timezone(calendar_todo_h todo, char** timezone_name); +int calendar_todo_get_timezone(calendar_todo_h todo, char** timezone_name); /** - * @brief Sets the timezone for the given calendar to-do handle. + * @brief Sets the timezone for the given calendar to-do handle. * * @param[in] todo The calendar to-do handle * @param[in] timezone_name The timezone name eg. Europe/Paris @@ -1431,13 +1825,14 @@ int calendar_todo_get_timezone(calendar_todo_h todo, char** timezone_name); * @see calendar_todo_get_timezone() * @see calendar_foreach_timezone() */ -int calendar_todo_set_timezone(calendar_todo_h todo, const char* timezone_name); +int calendar_todo_set_timezone(calendar_todo_h todo, const char* timezone_name); /** * @brief Gets the start time of the to-do from the calendar to-do handle. * - * @param [in] todo The calendar to-do handle - * @param [out] start_time The start date of the to-do + * @param [in] todo The calendar to-do handle + * @param [out] start_time The start date of the to-do\n + * The @a start_time is a unix timestamp since 00:00, Jan 1 1970 UTC. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -1446,29 +1841,42 @@ int calendar_todo_set_timezone(calendar_todo_h todo, const char* timezone_name); * * @see calendar_todo_set_start_time() */ -int calendar_todo_get_start_time(calendar_todo_h todo, struct tm *start_time); +int calendar_todo_get_start_time(calendar_todo_h todo, long long int *start_time); /** - * @brief Sets a start time of the to-do in the calendar to-do handle. + * @brief Sets a start time of the to-do in the calendar to-do handle. * - * @param [in] todo The calendar todo handle - * @param [in] start_time The start date of the todo + * @param [in] todo The calendar todo handle + * @param [in] start_time The start date of the todo\n + * The @a start_time is a unix timestamp since 00:00, Jan 1 1970 UTC. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * * @see calendar_todo_get_start_time() - * */ -int calendar_todo_set_start_time(calendar_todo_h todo, struct tm start_time); +int calendar_todo_set_start_time(calendar_todo_h todo, long long int start_time); +/** + * @brief Unsets a start time of the to-do in the calendar to-do handle. + * + * @param [in] todo The calendar todo handle + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_todo_set_start_time() + */ +int calendar_todo_unset_start_time(calendar_todo_h todo); /** * @brief Gets the due time of the to-do from the calendar to-do handle. * - * @param [in] todo The calendar to-do handle - * @param [out] due_time The due date of the to-do + * @param [in] todo The calendar to-do handle + * @param [out] due_time The due date of the to-do\n + * The @a due_time is a unix timestamp since 00:00, Jan 1 1970 UTC. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -1476,15 +1884,15 @@ int calendar_todo_set_start_time(calendar_todo_h todo, struct tm start_time); * @retval #CALENDAR_ERROR_NO_DATA Data not found * * @see calendar_todo_set_due_time() - * */ -int calendar_todo_get_due_time(calendar_todo_h todo, struct tm *due_time); +int calendar_todo_get_due_time(calendar_todo_h todo, long long int *due_time); /** * @brief Sets a due time of the to-do in the calendar to-do handle. * - * @param[in] todo The calendar to-do handle - * @param[in] due_time The due date of the to-do + * @param[in] todo The calendar to-do handle + * @param[in] due_time The due date of the to-do\n + * The @a due_time is a unix timestamp since 00:00, Jan 1 1970 UTC. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -1492,47 +1900,182 @@ int calendar_todo_get_due_time(calendar_todo_h todo, struct tm *due_time); * * @see calendar_todo_get_due_time() */ -int calendar_todo_set_due_time(calendar_todo_h todo, struct tm due_time); +int calendar_todo_set_due_time(calendar_todo_h todo, long long int due_time); /** - * @brief Retrieves all to-do items by invoking the given callback function iteratively. + * @brief Unsets a due time of the to-do in the calendar to-do handle. * - * @param[in] callback The callback function to invoke - * @param[in] user_data The user data to be passed to the callback function + * @param[in] todo The calendar to-do handle * - * @return 0 on success, otherwise a negative error value. + * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_todo_set_due_time() + */ +int calendar_todo_unset_due_time(calendar_todo_h todo); + +/** + * @brief Gets the total number of to-dos from the calendar book. + * + * @param[in] calendar_book_db_id The calendar book database ID to filter \n + * #DEFAULT_TODO_CALENDAR_BOOK_DB_ID means the default to-do calendar book on the device \n + * #CALENDAR_BOOK_FILTER_ALL means all calendar books on the device + * @param[in] todo_priority The to-do priority(#calendar_todo_priority_e) to filter \n + * Supports "OR"ing of #calendar_todo_priority_e + * @param[in] todo_status The to-do status(#calendar_todo_status_e) to filter \n + * Supports "OR"ing of #calendar_todo_status_e + * @param[out] count The total number of to-dos + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). + * + * @see calendar_connect() + */ +int calendar_todo_get_total_count_from_db(int calendar_book_db_id, int todo_priority, int todo_status, int *count); + +/** + * @brief Gets the total number of to-dos within specified time range from the calendar book. + * + * @param[in] calendar_book_db_id The calendar book database ID to filter \n + * #DEFAULT_TODO_CALENDAR_BOOK_DB_ID means the default to-do calendar book on the device \n + * #CALENDAR_BOOK_FILTER_ALL means all calendar books on the device + * @param[in] start_duedate_range The start of the time range\n + * The @a start_duedate_range is a unix timestamp since 00:00, Jan 1 1970 UTC. + * @param[in] end_duedate_range The end of the time range\n + * The @a end_duedate_range is a unix timestamp since 00:00, Jan 1 1970 UTC. + * @param[in] todo_priority The to-do priority(#calendar_todo_priority_e) to filter \n + * Supports "OR"ing of #calendar_todo_priority_e + * @param[in] todo_status The to-do status(#calendar_todo_status_e) to filter \n + * Supports "OR"ing of #calendar_todo_status_e + * @param[out] count The total number of to-dos + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * @retval #CALENDAR_ERROR_DB_FAILED No access to database * * @pre This function requires an open connection to the calendar service by calendar_connect(). * - * @post This function invokes calendar_foreach_query_todo_cb(). + * @see calendar_connect() + */ +int calendar_todo_get_total_count_by_duedate_range(int calendar_book_db_id, long long int start_duedate_range, long long int end_duedate_range, int todo_priority, int todo_status, int *count); + +/** + * @brief Frees to-do array + * + * @param[out] todo_array The to-do array * - * @see calendar_foreach_query_todo_cb() + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_todo_search_todo_by_calendar_book() */ -int calendar_foreach_todo_from_db(calendar_foreach_query_todo_cb callback, void *user_data); +int calendar_todo_free_todo_array(calendar_todo_h *todo_array); /** - * @brief Retrieves all to-do items with the given calendar database ID by invoking the given callback function iteratively. + * @brief Frees modified to-do array * - * @param[in] callback The callback function to invoke - * @param[in] calendar_db_id The calendar database ID to filter \n - * 1 means the default calendar on the device - * @param[in] user_data The user data to be passed to the callback function + * @param[out] modified_todo_array The modified to-do array + * @param[out] length The length of the array * - * @return 0 on success, otherwise a negative error value. + * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @see calendar_todo_search_todo_by_version() + */ +int calendar_todo_free_modified_todo_array(pcalendar_modified_todo_s *modified_todo_array); + +/** + * @brief Retrieves all to-dos as array from calendar book + * + * @remarks @a todo_array must be released with calendar_todo_free_todo_array() by you. + * + * @param[in] calendar_book_db_id The calendar book database ID to filter \n + * #DEFAULT_TODO_CALENDAR_BOOK_DB_ID means the default to-do calendar book on the device \n + * #CALENDAR_BOOK_FILTER_ALL means all calendar books on the device + * @param[in] todo_priority The to-do priority(#calendar_todo_priority_e) to filter \n + * Supports "OR"ing of #calendar_todo_priority_e + * @param[in] todo_status The to-do status(#calendar_todo_status_e) to filter \n + * Supports "OR"ing of #calendar_todo_status_e + * @param[out] todo_array The to-do array + * @param[out] length The length of the to-do array + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_OUT_OF_MEMORY Out of memory + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_DB_FAILED Database operation failure + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). + * + * @see calendar_connect() + * @see calendar_todo_free_todo_array() + */ +int calendar_todo_search_todo_by_calendar_book(int calendar_book_db_id, int todo_priority, int todo_status, calendar_todo_h **todo_array, int *length); + +/** + * @brief Retrieves all calendar to-dos as array within specified time range. + * + * @remarks @a todo_array must be released with calendar_todo_free_todo_array() by you. + * + * @param[in] calendar_book_db_id The calendar book database ID to filter \n + * #DEFAULT_TODO_CALENDAR_BOOK_DB_ID means the default to-do calendar book on the device \n + * #CALENDAR_BOOK_FILTER_ALL means all calendar books on the device + * @param[in] start_duedate_range The start of the time range\n + * The @a start_duedate_range is a unix timestamp since 00:00, Jan 1 1970 UTC. + * @param[in] end_duedate_range The end of the time range\n + * The @a end_duedate_range is a unix timestamp since 00:00, Jan 1 1970 UTC. + * @param[in] todo_priority The to-do priority(#calendar_todo_priority_e) to filter \n + * Supports "OR"ing of #calendar_todo_priority_e + * @param[in] todo_status The to-do status(#calendar_todo_status_e) to filter \n + * Supports "OR"ing of #calendar_todo_status_e + * @param[out] todo_array The to-do array + * @param[out] length The length of the todo array + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_OUT_OF_MEMORY Out of memory + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_DB_FAILED Database operation failure * * @pre This function requires an open connection to the calendar service by calendar_connect(). * - * @post This function invokes calendar_foreach_query_todo_cb(). + * @see calendar_connect() + * @see calendar_todo_free_todo_array() + */ +int calendar_todo_search_todo_by_duedate_range(int calendar_book_db_id, long long int start_duedate_range, long long int end_duedate_range, int todo_priority, int todo_status, calendar_todo_h **todo_array, int *length); + +/** + * @brief Retrieves all modified to-dos information as array that have been modified since the given version. + * + * @remarks @a modified_todo_array must be released with calendar_todo_free_modified_todo_array() by you. + * + * @param[in] calendar_book_db_id The calendar book database ID to filter \n + * #DEFAULT_TODO_CALENDAR_BOOK_DB_ID means the default to-do calendar book on the device \n + * #CALENDAR_BOOK_FILTER_ALL means all calendar books on the device + * @param[in] calendar_db_version The calendar database version + * @param[out] modified_todo_array The modified to-do information array + * @param[out] length The length of the to-do array + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_OUT_OF_MEMORY Out of memory + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_DB_FAILED Database operation failure + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). * - * @see calendar_foreach_query_todo_cb() + * @see calendar_connect() + * @see calendar_todo_free_modified_todo_array() */ -int calendar_query_todo_by_calendar(calendar_foreach_query_todo_cb callback, int calendar_db_id, void *user_data); +int calendar_todo_search_todo_by_version(int calendar_book_db_id, int calendar_db_version, pcalendar_modified_todo_s **modified_todo_array, int *length); /** * @} @@ -1544,14 +2087,44 @@ int calendar_query_todo_by_calendar(calendar_foreach_query_todo_cb callback, int */ /** - * @brief Gets the calendar from the calendar database. - * @details This function gets the new calendar handle with the given calendar database ID from the calendar database. \n - * The new calendar handle will be created. + * @brief Creates a handle to the calendar book. + * @remarks The calendar book handle must be released with calendar_book_destroy() by you. + * @remarks The created handle is not added to calendar database until calendar_insert_to_db() is called + * + * @param[out] calendar_book A new handle to calendar book + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_OUT_OF_MEMORY Out of memory + * + * @see calendar_book_destroy() + * + */ +int calendar_book_create(calendar_book_h *calendar_book); + +/** + * @brief Destroys the calendar book handle and releases all its resources. + * + * @param[out] calendar_book The calendar book handle + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_book_get_from_db() + */ +int calendar_book_destroy(calendar_book_h calendar_book); + +/** + * @brief Gets the calendar book from the calendar database. + * @details This function gets the new calendar book handle with the given calendar book database ID from the calendar database. \n + * The new calendar book handle will be created. * - * @remarks The created calendar handle must be released with calendar_destroy() by you. + * @remarks The created calendar book handle must be released with calendar_book_destroy() by you. * - * @param[in] calendar_db_id The calendar database ID - * @param[out] calendar The calendar handle associated with the calendar database ID + * @param[in] calendar_book_db_id The calendar book database ID + * @param[out] calendar_book The calendar book handle associated with The calendar book database ID * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -1560,110 +2133,289 @@ int calendar_query_todo_by_calendar(calendar_foreach_query_todo_cb callback, int * * @pre This function requires an open connection to the calendar service by calendar_connect(). * - * @see calendar_destroy() + * @see calendar_book_destroy() + */ +int calendar_book_get_from_db(int calendar_book_db_id, calendar_book_h *calendar_book); + +/** + * @brief Adds a calendar book to the calendar database. + * + * @param[in] calendar_book The calendar book handle + * @param[out] calendar_book_db_id The calendar book database ID associated with the calendar book \n + * If the function fails, it is -1. + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). + * + * @see calendar_connect() + * @see calendar_book_delete_from_db() + */ +int calendar_book_insert_to_db(calendar_book_h calendar_book, int *calendar_book_db_id); + +/** + * @brief Updates a calendar book to the calendar database. + * + * @param[in] calendar_book The calendar book handle + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). + * + * @see calendar_book_connect() + */ +int calendar_book_update_to_db(calendar_book_h calendar_book); + +/** + * @brief Removes the calendar book from the calendar database. + * + * @param[in] calendar_book_db_id The calendar book database ID to delete + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). + * + * @see calendar_connect() + */ +int calendar_book_delete_from_db(int calendar_book_db_id); + +/** + * @brief Removes the calendar books, events and to-dos from the calendar database. + * + * @param[in] account_db_id The account database ID to filter + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). + * + * @see calendar_connect() */ -int calendar_get_from_db(int calendar_db_id, calendar_h *calendar); +int calendar_book_delete_all_by_account(int account_db_id); /** - * @brief Destroys the calendar handle and releases all its resources. + * @brief Gets the calendar book database ID associated with the given calendar book handle. * - * @param[out] calendar The calendar handle + * @param[in] calendar_book The calendar book handle + * @param[out] calendar_book_db_id The calendar book database ID fetched from the calendar book handle * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_get_from_db() + * @see calendar_book_get_from_db() + */ +int calendar_book_get_db_id(calendar_book_h calendar_book, int *calendar_book_db_id); + +/** + * @brief Sets the calendar book type associated with the given calendar book handle. + * + * @param[in] calendar_book The calendar book handle + * @param[in] calendar_book_type The calendar book type. \n Supports "OR"ing of #calendar_book_type_e + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * + * @see calendar_book_get_type() */ -int calendar_destroy(calendar_h calendar); +int calendar_book_set_type(calendar_book_h calendar_book, int calendar_book_type); /** - * @brief Gets the database ID associated with the given calendar handle. + * @brief Gets the calendar book type associated with the given calendar book handle. * - * @param[in] calendar The calendar handle - * @param[out] calendar_db_id The calendar database ID fetched from the calendar handle + * @param[in] calendar_book The calendar book handle + * @param[out] calendar_book_type The calendar book type. \n Supports "OR"ing of #calendar_book_type_e * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @see calendar_get_from_db() + * @see calendar_book_set_type() */ -int calendar_get_db_id(calendar_h calendar, int *calendar_db_id); +int calendar_book_get_type(calendar_book_h calendar_book, int *calendar_book_type); /** - * @brief Gets the status whether the calendar is default calendar is or not in the device. + * @brief Gets the status whether the calendar book is default calendar book is or not in the device. * - * @param [in] calendar The calendar handle - * @param [out] is_default @c true if the calendar is the default calendar in the device @c false \n + * @param [in] calendar_book The calendar book handle + * @param [out] is_default @c true if the calendar is the default calendar book in the device @c false \n * (default : @c false) * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter */ -int calendar_get_is_default(calendar_h calendar, bool *is_default); +int calendar_book_get_is_default(calendar_book_h calendar_book, bool *is_default); + +/** + * @brief Sets the name of the calendar from the calendar book handle. + * + * @remarks @a calendar_name must be released with free() by you. + * + * @param [in] calendar_book The calendar book handle + * @param [in] calendar_book_name The name of the calendar book + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_book_get_name() + */ +int calendar_book_set_name(calendar_book_h calendar_book, const char *calendar_book_name); /** - * @brief Gets the name of the calendar from the calendar handle. + * @brief Gets the name of the calendar book from the calendar book handle. + * + * @remarks @a calendar_book_name must be released with free() by you. + * + * @param [in] calendar_book The calendar book handle + * @param [out] calendar_book_name The name of the calendar book \n If the name does not exist, it is NULL + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter * - * @remarks @a calendar_name must be released with free() by you. + * @see calendar_book_set_name() + */ +int calendar_book_get_name(calendar_book_h calendar_book, char **calendar_book_name); + +/** + * @brief Sets the visible status of the calendar book handle. * - * @param [in] calendar The calendar handle - * @param [out] calendar_name The name of the calendar \n If the name does not exist, it is NULL + * @param [in] calendar_book The calendar book handle + * @param [in] is_visible @c true if the calendar book is visible in the device, otherwise @c false \n + * (default : @c false) * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_book_get_is_visibile() */ -int calendar_get_name(calendar_h calendar, char **calendar_name); +int calendar_book_set_is_visible(calendar_book_h calendar_book, bool is_visible); /** - * @brief Gets the visible status of the calendar handle. + * @brief Gets the visible status of the calendar book handle. * - * @param [in] calendar The calendar handle - * @param [out] is_visible @c true if the calendar is visible in the device, otherwise @c false \n + * @param [in] calendar_book The calendar book handle + * @param [out] is_visible @c true if the calendar book is visible in the device, otherwise @c false \n * (default : @c false) * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_book_set_is_visibile() + */ +int calendar_book_get_is_visible(calendar_book_h calendar_book, bool *is_visible); + +/** + * @brief Sets the color of the calendar book from the calendar book handle. + * + * @param [in] calendar_book The calendar book handle + * @param [in] red The calendar book color which represents red among RGB + * @param [in] green The calendar book color which represents green among RGB + * @param [in] blue The calendar book color which represents blue among RGB + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_book_get_color() + * @see calendar_book_unset_color() + */ +int calendar_book_set_color(calendar_book_h calendar_book, unsigned char red, unsigned char green, unsigned char blue); + +/** + * @brief Unsets the color of the calendar book from the calendar book handle. + * + * @param [in] calendar_book The calendar book handle + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_book_set_color() */ -int calendar_get_is_visibile(calendar_h calendar, bool *is_visible); +int calendar_book_unset_color(calendar_book_h calendar_book); /** - * @brief Gets the color of the calendar from the calendar handle. + * @brief Gets the color of the calendar book from the calendar book handle. * - * @param [in] calendar The calendar handle - * @param [out] red The calendar color which represents red among RGB - * @param [out] green The calendar color which represents green among RGB - * @param [out] blue The calendar color which represents blue among RGB + * @remarks returns @a CALENDAR_ERROR_NO_DATA means calendar book color is not valid + * + * @param [in] calendar_book The calendar book handle + * @param [out] red The calendar book color which represents red among RGB + * @param [out] green The calendar book color which represents green among RGB + * @param [out] blue The calendar book color which represents blue among RGB * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_NO_DATA Data not found + * + * @see calendar_book_set_color() + */ +int calendar_book_get_color(calendar_book_h calendar_book, unsigned char *red, unsigned char *green, unsigned char *blue); + +/** + * @brief Sets the account database ID associated with the given calendar book handle. + * + * @param[in] calendar_book The calendar book handle + * @param[in] account_db_id The account database ID(default : 0) \n + * 0 means the calendar book is not related to any accounts. + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_book_get_account_db_id() */ -int calendar_get_color(calendar_h calendar, unsigned char *red, unsigned char *green, unsigned char *blue); +int calendar_book_set_account_db_id(calendar_book_h calendar_book, int account_db_id); /** - * @brief Gets the account database ID associated with the given calendar handle. + * @brief Gets the account database ID associated with the given calendar book handle. * - * @param[in] calendar The calendar handle + * @param[in] calendar_book The calendar book handle * @param[out] account_db_id The account database ID(default : 0) \n - * 0 means the calendar is not related to any accounts. + * 0 means the calendar book is not related to any accounts. * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_book_set_account_db_id() */ -int calendar_get_account_db_id(calendar_h calendar, int *account_db_id); +int calendar_book_get_account_db_id(calendar_book_h calendar_book, int *account_db_id); /** - * @brief Retrieves all calendars by invoking the given callback function iteratively. + * @brief Frees calendar book array * - * @param[in] callback The callback function to invoke - * @param[in] user_data The user data to be passed to the callback function + * @param[out] calendar_book_array The calendar book array + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_book_get_all_calendar_book() + */ +int calendar_book_free_calendar_book_array(calendar_book_h *calendar_book_array); + +/** + * @brief Retrieves all calendar books as array from database. + * + * @remarks @a calendar_book_array must be released with calendar_book_free_calendar_book_array() by you. + * + * @param[out] calendar_book_array The calendar book array + * @param[out] length The length of the calendar book array * * @return 0 on success, otherwise a negative error value. * @retval #CALENDAR_ERROR_NONE Successful @@ -1672,11 +2424,31 @@ int calendar_get_account_db_id(calendar_h calendar, int *account_db_id); * * @pre This function requires an open connection to the calendar service by calendar_connect(). * - * @post This function invokes calendar_foreach_query_event_cb(). + * @see calendar_connect() + * @see calendar_book_free_calendar_book_array() + */ +int calendar_book_get_all_calendar_book(calendar_book_h **calendar_book_array, int *length); + +/** + * @brief Retrieves calendar books as array with account database ID from database. + * + * @remarks @a calendar_book_array must be released with calendar_book_free_calendar_book_array() by you. + * + * @param[in] account_db_id The account database ID to filter + * @param[out] calendar_book_array The calendar book array + * @param[out] length The length of the calendar book array * - * @see calendar_foreach_query_calendar_cb() + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #CALENDAR_ERROR_DB_FAILED No access to database + * + * @pre This function requires an open connection to the calendar service by calendar_connect(). + * + * @see calendar_connect() + * @see calendar_book_free_calendar_book_array() */ -int calendar_foreach_calendar_from_db(calendar_foreach_query_calendar_cb callback, void *user_data); +int calendar_book_search_calendar_book_by_account(int account_db_id, calendar_book_h **calendar_book_array, int *length); /** * @} diff --git a/include/calendar_attendee.h b/include/calendar_attendee.h index 8e4cf90..49821f4 100755 --- a/include/calendar_attendee.h +++ b/include/calendar_attendee.h @@ -14,13 +14,14 @@ * limitations under the License. */ - + #ifndef __TIZEN_SOCIAL_CALENDAR_CALENDAR_ATTENDEE_H__ #define __TIZEN_SOCIAL_CALENDAR_CALENDAR_ATTENDEE_H__ #include #include -#include + +#include "calendar_types.h" @@ -161,6 +162,62 @@ int calendar_attendee_get_contact_db_id(calendar_attendee_h attendee, int *conta int calendar_attendee_set_contact_db_id(calendar_attendee_h attendee, int contact_db_id); /** + * @brief Gets the status for the given calendar attendee handle. + * + * @param[in] attendee The calendar attendee handle + * @param[out] status The status of the attendee \n (default : #CALENDAR_ATTENDEE_STATUS_PENDING) + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_attendee_set_status() + */ +int calendar_attendee_get_status(calendar_attendee_h attendee, calendar_attendee_status_e *status); + +/** + * @brief Sets a status for the given calendar attendee handle. + * + * @param[in] attendee The calendar attendee handle + * @param[in] status The status of the attendee + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_attendee_get_status() + */ +int calendar_attendee_set_status(calendar_attendee_h attendee, calendar_attendee_status_e status); + +/** + * @brief Gets the role for the given calendar attendee handle. + * + * @param[in] attendee The calendar attendee handle + * @param[out] role The role of the attendee \n (default : #CALENDAR_ATTENDEE_ROLE_REQ_PARTICIPANT) + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_attendee_set_role() + */ +int calendar_attendee_get_role(calendar_attendee_h attendee, calendar_attendee_role_e *role); + +/** + * @brief Sets a role for the given calendar attendee handle. + * + * @param[in] attendee The calendar attendee handle + * @param[in] role The role of the attendee + * + * @return 0 on success, otherwise a negative error value. + * @retval #CALENDAR_ERROR_NONE Successful + * @retval #CALENDAR_ERROR_INVALID_PARAMETER Invalid parameter + * + * @see calendar_attendee_get_role() + */ +int calendar_attendee_set_role(calendar_attendee_h attendee, calendar_attendee_role_e role); + +/** * @brief Checks whether there is a next attendee handle on the list. * * @param [in] iterator The attendee iterator handle diff --git a/include/calendar_private.h b/include/calendar_private.h old mode 100755 new mode 100644 index 18d1bcc..2796572 --- a/include/calendar_private.h +++ b/include/calendar_private.h @@ -11,15 +11,18 @@ * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License. + * limitations under the License. */ - + #ifndef __TIZEN_SOCIAL_CALENDAR_PRIVATE_H__ #define __TIZEN_SOCIAL_CALENDAR_PRIVATE_H__ #include -#include + +#include "calendar_types.h" +#include "calendar_private.h" +#include "calendar.h" #ifdef __cplusplus extern "C" { @@ -28,11 +31,11 @@ extern "C" { /** * @internal */ -typedef struct GList calendar_list_s; +typedef struct GList calendar_list_s; typedef struct { - int event_type; - void* user_data; + int event_type; + void* user_data; } calendar_event_legacy_s; typedef struct { @@ -42,7 +45,7 @@ typedef struct { typedef struct { int index; /**< Record index */ - int account_id; /**< Account_id */ + int account_id; /**< Account_id */ int cal_type; /**< Calendar event type */ int sch_category; /**< Category of schedule */ @@ -72,7 +75,7 @@ typedef struct int task_status; /**< current task status */ int priority; /**< Priority */ int timezone; /**< timezone of task */ - int file_id; /**< file id for attach or alarm tone*/ + int file_id; /**< file id for attach or alarm tone*/ int contact_id; /**< contact id for birthday in contact list */ GList* attendee_list; /**< collection of attendee */ int busy_status; /**< ACS, G : Flag of busy or not */ @@ -93,7 +96,6 @@ typedef struct char* edit_uri; /**< G : EditUri for google calendar */ char* gevent_id; /**< G : Server id of an event */ int dst; /**< dst of event */ - GList* exception_date_list; /**< exception dates */ int original_event_id; /**< original event id for recurrency exception */ double latitude; double longitude; @@ -120,11 +122,8 @@ typedef struct GList* _calendar_glist_next_until_not_deleted(GList* list); -int _calendar_event_foreach(calendar_foreach_query_event_cb callback, int account_db_id, int calendar_db_id, void* user_data); -int _calendar_todo_foreach(calendar_foreach_query_todo_cb callback, int account_db_id, int calendar_db_id, void* user_data); -int _calendar_event_query(calendar_foreach_query_event_cb callback, int calendar_db_id, char* option, const char* string_to_find, void* user_data); -int _calendar_get_account_db_id(int calendar_db_id); -void _calendar_parse_color(char* color_string, unsigned char* red, unsigned char* green, unsigned char* blue); +int _calendar_get_account_db_id(int calendar_db_id); +void _calendar_parse_color(char* color_string, unsigned char* red, unsigned char* green, unsigned char* blue); /** * Internal Macros @@ -140,14 +139,13 @@ void _calendar_parse_color(char* color_string, unsigned char* red, unsigned char } \ }while(0) -#define CONTACTS_INVALID_ARG_CHECK(_condition_) do { \ +#define CALENDAR_INVALID_ARG_CHECK(_condition_) do { \ if(_condition_) { \ LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); \ return CALENDAR_ERROR_INVALID_PARAMETER; \ } \ }while(0) - #ifdef __cplusplus } #endif diff --git a/include/calendar_types.h b/include/calendar_types.h index 890a711..058d395 100755 --- a/include/calendar_types.h +++ b/include/calendar_types.h @@ -11,7 +11,7 @@ * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License. + * limitations under the License. */ @@ -46,6 +46,16 @@ typedef enum } calendar_error_e; /** + * @brief Enumerations for calendar book type. "OR"ing supported. + */ +typedef enum +{ + CALENDAR_BOOK_TYPE_NONE = 0, /**< Calendar book type default */ + CALENDAR_BOOK_TYPE_EVENT = 1<<0, /**< Event calendar book type */ + CALENDAR_BOOK_TYPE_TODO = 1<<1 /**< To-do Calendar book type */ +} calendar_book_type_e; + +/** * @brief Enumerations for calendar visibility type. */ typedef enum @@ -56,31 +66,6 @@ typedef enum } calendar_visibility_e; /** - * @brief Enumerations for calendar timezone details. - */ -typedef struct -{ - char* timezone_name; /**< Timezone name eg. Europe/Paris */ - char* city_name; /**< City name eg. Paris */ - char* country_name; /**< Country name eg. France */ - char* time_offset; /**< Time offset eg. GMT+1 */ - char* timezone_detail_filepath; /**< Timezone detail file path eg. /.../Europe/Paris */ -}calendar_foreach_timezone_s ; - -/** - * @brief Called once for each timezone supported on a device. - * - * @param[out] timezone The timezone information - * @param[in] user_data The user data passed from the foreach function - * - * @return @c true to continue with the next iteration of the loop or return @c false to break out of the loop. - * - * @pre calendar_foreach_timezone() will invoke this callback. - * - * @see calendar_foreach_timezone() - */ -typedef bool (*calendar_foreach_timezone_cb)(calendar_foreach_timezone_s *timezone, void *user_data); -/** * @} */ @@ -89,18 +74,45 @@ typedef bool (*calendar_foreach_timezone_cb)(calendar_foreach_timezone_s *timezo * @{ */ - /** +/** + * @brief Enumerations of attendee status. + */ +typedef enum +{ + CALENDAR_ATTENDEE_STATUS_PENDING = 0, /**< Pending status */ + CALENDAR_ATTENDEE_STATUS_ACCEPTED, /**< Accepted status */ + CALENDAR_ATTENDEE_STATUS_DECLINED, /**< Decliend status */ + CALENDAR_ATTENDEE_STATUS_TENTATIVE, /**< Tentative status */ + CALENDAR_ATTENDEE_STATUS_DELEGATED, /**< Delegated status */ + CALENDAR_ATTENDEE_STATUS_COMPLETED, /**< Completed status */ + CALENDAR_ATTENDEE_STATUS_IN_PROCESS, /**< In process status */ + CALENDAR_ATTENDEE_STATUS_MAX, +}calendar_attendee_status_e; + +/** + * @brief Enumerations of attendee role. + */ +typedef enum +{ + CALENDAR_ATTENDEE_ROLE_REQ_PARTICIPANT = 0, /**< Participation is required */ + CALENDAR_ATTENDEE_ROLE_OPT_PARTICIPANT, /**< Accepted status */ + CALENDAR_ATTENDEE_ROLE_NON_PARTICIPANT, /**< Non-Participant */ + CALENDAR_ATTENDEE_ROLE_CHAIR, /**< Chairperson */ + CALENDAR_ATTENDEE_ROLE_MAX, +}calendar_attendee_role_e; + +/** * @brief The calendar attendee handle. * @see calendar_event_add_attendee() * @see calendar_event_remove_attendee() */ -typedef struct calendar_attendee_s *calendar_attendee_h; /* cal_value */ +typedef struct calendar_attendee_s* calendar_attendee_h; /** * @brief The event attendee iterator. * @see calendar_event_get_attendee_iterator() */ -typedef struct calendar_list_s *calendar_attendee_iterator_h; +typedef struct calendar_list_s* calendar_attendee_iterator_h; /** * @} @@ -115,16 +127,10 @@ typedef struct calendar_list_s *calendar_attendee_iterator_h; /** * @brief The calendar event handle. */ -typedef struct calendar_event_s *calendar_event_h; +typedef struct calendar_event_s* calendar_event_h; /** - * @brief The calendar recurrence exception iterator handle. - * @see calendar_event_get_recurrence_exception_iterator() - */ -typedef struct calendar_list_s *calendar_recurrence_exception_iterator_h; - -/** - * @brief Reminder interval type of event such as minutes, hours, days, or etc. + * @brief Reminder interval type of event such as minutes, hours, days, or etc. */ typedef enum { @@ -136,7 +142,6 @@ typedef enum CALENDAR_REMINDER_TIME_UNIT_MONTH, /**< Reminder interval in months */ } calendar_reminder_interval_type_e; - /** * @brief Enumerations of the frequency of event recurrence. */ @@ -146,11 +151,11 @@ typedef enum CALENDAR_RECURRENCE_DAILY, /**< A Event occurs every day */ CALENDAR_RECURRENCE_WEEKLY, /**< A Event occurs on the same day of every week \n According to week flag, the event will recurrence every days of week */ CALENDAR_RECURRENCE_MONTHLY, /**< A Event occurs on the same day of every month */ - CALENDAR_RECURRENCE_YEARLY, /**< A Event occurs on the same day of every year */ + CALENDAR_RECURRENCE_YEARLY /**< A Event occurs on the same day of every year */ } calendar_recurrence_frequency_e; /** - * @brief Enumerations of weekly recurrence event which days of week will be repeated. + * @brief Enumerations of weekly recurrence event which days of week will be repeated. "OR"ing supported. */ typedef enum { @@ -166,27 +171,79 @@ typedef enum } calendar_week_flag_e; /** - * @brief Called once for each event returned from the query. - * - * @param[in] event The calendar event handle - * @param[in] user_data The user data passed from the foreach function - * - * @return @c true to continue with the next iteration of the loop or return @c false to break out of the loop. - * - * @pre calendar_foreach_event_from_db() will invoke this callback. - * @pre calendar_query_event_by_subject() will invoke this callback. - * @pre calendar_query_event_by_description() will invoke this callback. - * @pre calendar_query_event_by_location() will invoke this callback. - * @pre calendar_query_event_by_period() will invoke this callback. - * @pre calendar_query_event_by_time_last_modified() will invoke this callback. + * @brief Enumerations of category for event. + */ +typedef enum +{ + CALENDAR_EVENT_CATEGORY_NONE=0, /**< No category */ + CALENDAR_EVENT_CATEGORY_APPOINTMENT, /**< Appointment category */ + CALENDAR_EVENT_CATEGORY_IMPORTANT, /**< Important category */ + CALENDAR_EVENT_CATEGORY_ANNIVERSARY, /**< Anniversary category */ + CALENDAR_EVENT_CATEGORY_BIRTHDAY, /**< Birthday category */ + CALENDAR_EVENT_CATEGORY_HOLIDAY, /**< Holiday category */ + CALENDAR_EVENT_CATEGORY_PRIVATE, /**< Private category */ + CALENDAR_EVENT_CATEGORY_BUSSINESS /**< Bussiness category */ +}calendar_event_category_e; + +/** + * @brief Enumerations of status for event. + */ +typedef enum +{ + CALENDAR_EVENT_STATUS_NONE = 0x01, /**< None */ + CALENDAR_EVENT_STATUS_TENTATIVE = 0x02, /**< The event is tentative */ + CALENDAR_EVENT_STATUS_CONFIRMED = 0x04, /**< The event is confirmed */ + CALENDAR_EVENT_STATUS_CANCELLED = 0x08 /**< The event is cancelled */ +}calendar_event_status_e; + +/** + * @brief Enumerations of busy status for event. + */ +typedef enum +{ + CALENDAR_EVENT_BUSY_STATUS_FREE = 0, /**< The free status */ + CALENDAR_EVENT_BUSY_STATUS_BUSY, /**< The busy status */ + CALENDAR_EVENT_BUSY_STATUS_UNAVAILABLE, /**< The unavailable status */ + CALENDAR_EVENT_BUSY_STATUS_TENTATIVE /**< The tentative status */ +}calendar_event_busy_status_e; + +/** + * @brief Calendar event item priority + */ +typedef enum +{ + CALENDAR_EVENT_PRIORITY_LOW = 0, /**< Low priority */ + CALENDAR_EVENT_PRIORITY_NORMAL, /**< Normal priority */ + CALENDAR_EVENT_PRIORITY_HIGH /**< High priority */ +} calendar_event_priority_e; + +/** + * @brief Enumerations of modified status for event. + */ +typedef enum +{ + CALENDAR_EVENT_MODIFIED_STATUS_INSERTED = 0, /**< The event is inserted */ + CALENDAR_EVENT_MODIFIED_STATUS_UPDATED, /**< The event is updated */ + CALENDAR_EVENT_MODIFIED_STATUS_DELETED /**< The event is deleted */ +}calendar_event_modified_status_e; + +/** + * @brief The structure of modified event * - * @see calendar_query_event_by_subject() - * @see calendar_query_event_by_description() - * @see calendar_query_event_by_location() - * @see calendar_query_event_by_period() - * @see calendar_foreach_event_from_db() + * @see calendar_event_search_event_by_version() + */ +typedef struct +{ + calendar_event_modified_status_e modified_status; /**< modified status */ + int event_db_id; /**< event database ID */ + int calendar_book_db_id; /**< calendar book database ID */ + int calendar_db_version; /**< calendar database version */ +}calendar_modified_event_s; + +/** + * @brief The pointer type of calendar_modified_event_s */ -typedef bool (*calendar_foreach_query_event_cb)(calendar_event_h event, void *user_data); +typedef calendar_modified_event_s* pcalendar_modified_event_s; /** * @} @@ -198,18 +255,25 @@ typedef bool (*calendar_foreach_query_event_cb)(calendar_event_h event, void *us */ /** - * @brief Called when any database changes has occurred. + * @brief Enumerations of calendar database changed type. + */ +typedef enum +{ + CALENDAR_DB_CHANGED_CB_TYPE_CALENDAR_BOOK = 1, /**< Subscribes a calendar book related notifications */ + CALENDAR_DB_CHANGED_CB_TYPE_EVENT, /**< Subscribes a event related notifications */ + CALENDAR_DB_CHANGED_CB_TYPE_TODO /**< Subscribes a to-do related notifications */ +}calendar_db_changed_cb_type_e; + +/** + * @brief Called when any database changes has occurred. * * @param[in] user_data The user data passed from the callback registration function * - * @pre calendar_set_db_changed_cb() will invoke this callback. + * @pre calendar_add_db_changed_cb() will invoke this callback. * @pre calendar_event_insert_to_db(), calendar_event_delete_from_db() or calendar_event_update_to_db() will invoke this callback. * - * @see calendar_set_db_changed_cb() - * @see calendar_unset_db_changed_cb() - * @see calendar_event_insert_to_db() - * @see calendar_event_delete_from_db() - * @see calendar_event_update_to_db() + * @see calendar_add_db_changed_cb() + * @see calendar_remove_db_changed_cb() */ typedef void (*calendar_db_changed_cb)(void *user_data); @@ -225,56 +289,67 @@ typedef void (*calendar_db_changed_cb)(void *user_data); /** * @brief The calendar to-do handle. */ -typedef struct calendar_event_s *calendar_todo_h; +typedef struct calendar_event_s* calendar_todo_h; /** * @brief Calendar to-do item priority */ typedef enum { - CALENDAR_TODO_PRIORITY_LOW = 0, /**< Low priority */ - CALENDAR_TODO_PRIORITY_NORMAL, /**< Normal priority */ - CALENDAR_TODO_PRIORITY_HIGH /**< High priority */ + CALENDAR_TODO_PRIORITY_NONE = 0x01, /**< Priority none */ + CALENDAR_TODO_PRIORITY_LOW = 0x08, /**< Low priority */ + CALENDAR_TODO_PRIORITY_NORMAL = 0x04, /**< Normal priority */ + CALENDAR_TODO_PRIORITY_HIGH = 0x02, /**< High priority */ } calendar_todo_priority_e; +/** + * @brief Enumerations of status for to-do. + */ typedef enum { - CALENDAR_TODO_STATUS_NONE = 0, /**< None */ - CALENDAR_TODO_STATUS_NEEDS_ACTION, /**< Needs action status */ - CALENDAR_TODO_STATUS_COMPLETED, /**< Completed status */ - CALENDAR_TODO_STATUS_IN_PROCESS, /**< Work in process status */ - CALENDAR_TODO_STATUS_CANCELED /**< Canceled status */ + CALENDAR_TODO_STATUS_NONE = 0x0100, /**< None */ + CALENDAR_TODO_STATUS_NEEDS_ACTION = 0x0200, /**< Needs action status */ + CALENDAR_TODO_STATUS_COMPLETED = 0x0400, /**< Completed status */ + CALENDAR_TODO_STATUS_IN_PROCESS = 0x0800, /**< Work in process status */ + CALENDAR_TODO_STATUS_CANCELED = 0x1000 /**< Canceled status */ } calendar_todo_status_e; +// deprecated +#define CALENDAR_TODO_FILTER_PRIORITY_ALL -1 + +// deprecated +#define CALENDAR_TODO_FILTER_STATUS_ALL -1 + /** - * @brief Called once for each calendar to-do item. - * - * @param[in] todo The calendar to-do handle - * @param[in] user_data The user data passed from the foreach function - * - * @return @c true to continue with the next iteration of the loop or return @c false to break out of the loop. + * @brief Enumerations of modified status for to-do. + */ +typedef enum +{ + CALENDAR_TODO_MODIFIED_STATUS_INSERTED = 0, /**< The to-do is inserted */ + CALENDAR_TODO_MODIFIED_STATUS_UPDATED, /**< The to-do is updated */ + CALENDAR_TODO_MODIFIED_STATUS_DELETED /**< The to-do is deleted */ +}calendar_todo_modified_status_e; + +/** + * @brief The structure of modified to-do * - * @pre calendar_foreach_todo_from_db() will invoke this callback. - * @see calendar_foreach_todo_from_db() + * @see calendar_todo_search_todo_by_version() */ -typedef bool (*calendar_foreach_query_todo_cb)(calendar_todo_h todo, void *user_data); +typedef struct +{ + calendar_todo_modified_status_e modified_status; /**< modified status */ + int todo_db_id; /**< to-do database ID */ + int calendar_book_db_id; /**< calendar book database ID */ + int calendar_db_version; /**< calendar database version */ +}calendar_modified_todo_s; + /** - * @} + * @brief The pointer type of calendar_modified_todo_s */ +typedef calendar_modified_todo_s* pcalendar_modified_todo_s; /** - * @ingroup CAPI_SOCIAL_CALENDAR_MODULE - * @defgroup CAPI_SOCIAL_CALENDAR_MULTIPLECALENDAR_MODULE Multiple Calendar - * - * @brief Calendar definition and Calendar related operations. - * - * @section CAPI_SOCIAL_CALENDAR_MULTIPLECALENDAR_MODULE_HEADER Required Header - * \#include - * - * @section CAPI_SOCIAL_CALENDAR_MULTIPLECALENDAR_MODULE_OVERVIEW Overview - * Calendar - * - *
+ * @} */ /** @@ -285,42 +360,42 @@ typedef bool (*calendar_foreach_query_todo_cb)(calendar_todo_h todo, void *user_ /** * @brief The calendar handle. */ -typedef struct calendar_event_s *calendar_h; +typedef struct calendar_event_s* calendar_book_h; + +// deprecated +#define DEFAULT_CALENDAR_BOOK_DB_ID 1 + +/** + * @brief Definition for default event calendar book database ID + */ +#define DEFAULT_EVENT_CALENDAR_BOOK_DB_ID 1 + +/** + * @brief Definition for default to-do calendar book database ID + */ +#define DEFAULT_TODO_CALENDAR_BOOK_DB_ID 2 /** - * @brief Definition for default calendar database ID + * @brief Definition for all calendar book */ -#define DEFAULT_CALENDAR_DB_ID 1 +#define CALENDAR_BOOK_FILTER_ALL -1 /** * @brief The structure of calendar in search results. * - * @see calendar_foreach_query_calendar_cb() + * @see calendar_foreach_query_calendar_book_cb() */ typedef struct { - int calendar_db_id; /**< calendar database ID */ - char* calendar_name; /**< calendar name */ - bool calendar_is_default; /**< default calendar status */ - bool calendar_is_visible; /**< calendar visible status */ - unsigned char calendar_color_red; /**< calendar color red among RGB */ - unsigned char calendar_color_green; /**< calendar color green among RGB */ - unsigned char calendar_color_blue; /**< calendar color blue among RGB */ - int account_db_id; /**< account database ID */ -}calendar_query_calendar_s; - -/** - * @brief The callback function to get the calendar - * - * @param[in] calendar The calendar - * @param[in] user_data The user data passed from the foreach function - * - * @return @c true to continue with the next iteration of the loop or @c false to break out of the loop. - * - * @pre calendar_foreach_calendar_from_db() will invoke this callback. - * - * @see calendar_foreach_calendar_from_db() - */ -typedef bool (*calendar_foreach_query_calendar_cb)(calendar_query_calendar_s *calendar, void *user_data); + int calendar_db_id; /**< Calendar database ID */ + int calendar_type; /**< Calendar type. It supports "OR"ing of #calendar_book_type_e*/ + char* calendar_name; /**< Calendar name */ + bool calendar_is_default; /**< Default calendar status */ + bool calendar_is_visible; /**< Calendar visible status */ + unsigned char calendar_color_red; /**< Calendar color red among RGB */ + unsigned char calendar_color_green; /**< Calendar color green among RGB */ + unsigned char calendar_color_blue; /**< Calendar color blue among RGB */ + int account_db_id; /**< Account database ID */ +}calendar_query_calendar_book_s; /** * @} diff --git a/packaging/capi-social-calendar.manifest b/packaging/capi-social-calendar.manifest deleted file mode 100644 index 017d22d..0000000 --- a/packaging/capi-social-calendar.manifest +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/packaging/capi-social-calendar.spec b/packaging/capi-social-calendar.spec old mode 100644 new mode 100755 index 05126be..e38aab8 --- a/packaging/capi-social-calendar.spec +++ b/packaging/capi-social-calendar.spec @@ -1,11 +1,10 @@ Name: capi-social-calendar -Summary: Calendar library in Tizen Native API -Version: 0.1.1 -Release: 35 +Summary: Calendar library in Tizen C API +Version: 0.1.1 +Release: 53 Group: TO_BE/FILLED_IN -License: Apache-2.0 +License: TO BE FILLED IN Source0: %{name}-%{version}.tar.gz -Source1001: packaging/capi-social-calendar.manifest BuildRequires: cmake BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(calendar) @@ -22,7 +21,7 @@ Requires(postun): /sbin/ldconfig %package devel -Summary: Calendar library in Tizen Native API (Development) +Summary: Calendar library in SLP C API (Development) Group: TO_BE/FILLED_IN Requires: %{name} = %{version}-%{release} @@ -35,7 +34,6 @@ Requires: %{name} = %{version}-%{release} %build -cp %{SOURCE1001} . MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` cmake . -DCMAKE_INSTALL_PREFIX=/usr -DFULLVER=%{version} -DMAJORVER=${MAJORVER} @@ -52,11 +50,9 @@ rm -rf %{buildroot} %files -%manifest capi-social-calendar.manifest %{_libdir}/libcapi-social-calendar.so.* %files devel -%manifest capi-social-calendar.manifest %{_includedir}/social/*.h %{_libdir}/pkgconfig/*.pc %{_libdir}/libcapi-social-calendar.so diff --git a/src/calendar.c b/src/calendar.c index c91ec63..d27d007 100755 --- a/src/calendar.c +++ b/src/calendar.c @@ -11,20 +11,22 @@ * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License. + * limitations under the License. */ - + #include #include #include +#include #include -#include -#include - -#include #include #include +#include + +#include "calendar_private.h" +#include "calendar_types.h" +#include "calendar.h" #ifdef LOG_TAG #undef LOG_TAG @@ -33,142 +35,189 @@ #define LOG_TAG "TIZEN_N_CALENDAR" #define LOG_MODE (1) +#ifndef CALS_TODO_NO_DUE_DATE +#define CALS_TODO_NO_DUE_DATE INT64_MAX +#endif + + /* * Public Implementation */ int calendar_connect(void) { - int ret_val = calendar_svc_connect(); - - if (ret_val == CAL_SUCCESS) { - return CALENDAR_ERROR_NONE; - } else { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + if (calendar_svc_connect() != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); return CALENDAR_ERROR_DB_FAILED; } + return CALENDAR_ERROR_NONE; } int calendar_disconnect(void) { - int ret_val = calendar_svc_close(); + if (calendar_svc_close() != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_begin_transaction(void) +{ + if (calendar_svc_begin_trans()!= CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + return CALENDAR_ERROR_NONE; +} - if (ret_val == CAL_SUCCESS) { - return CALENDAR_ERROR_NONE; - } else { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); +int calendar_rollback_transaction(void) +{ + if (calendar_svc_end_trans(false)!= CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_commit_transaction(void) +{ + if (calendar_svc_end_trans(true)!= CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_book_delete_from_db(int calendar_db_id) +{ + int ret; + + ret = calendar_svc_delete(CAL_STRUCT_CALENDAR, calendar_db_id); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); return CALENDAR_ERROR_DB_FAILED; } + return CALENDAR_ERROR_NONE; +} + +int calendar_delete_all_by_account(int account_db_id) +{ + int ret; + + ret = calendar_svc_delete(CAL_STRUCT_SCHEDULE, account_db_id); + + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + return CALENDAR_ERROR_NONE; } int calendar_event_insert_to_db(calendar_event_h event, int calendar_db_id, int *event_id) -{ +{ CALENDAR_NULL_ARG_CHECK(event); CALENDAR_NULL_ARG_CHECK(event_id); - - int ret_val = CALENDAR_ERROR_NONE; - int account_db_id = _calendar_get_account_db_id(calendar_db_id); - CONTACTS_INVALID_ARG_CHECK(account_db_id == -2); + int ret; + int account_db_id; + cal_struct *cs; - calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_INT_CALENDAR_ID, calendar_db_id); - calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_INT_ACCOUNT_ID, account_db_id); + account_db_id = _calendar_get_account_db_id(calendar_db_id); + CALENDAR_INVALID_ARG_CHECK(account_db_id == -2); - ret_val = -1; - ret_val = calendar_svc_insert((cal_struct*)((calendar_event_s*)event)->event_legacy); - if (ret_val < 0) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if (cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + calendar_svc_struct_set_int(cs, CAL_VALUE_INT_CALENDAR_ID, calendar_db_id); + calendar_svc_struct_set_int(cs, CAL_VALUE_INT_ACCOUNT_ID, account_db_id); + + ret = calendar_svc_insert(cs); + if (ret < 0) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); return CALENDAR_ERROR_DB_FAILED; } - *event_id = ret_val; - return CALENDAR_ERROR_NONE; + *event_id = ret; + return CALENDAR_ERROR_NONE; } int calendar_event_delete_from_db(int event_id) -{ - CONTACTS_INVALID_ARG_CHECK(event_id <= 0); - - int ret_val = CALENDAR_ERROR_NONE; - - ret_val = calendar_svc_delete(CAL_STRUCT_SCHEDULE, event_id); - - if (ret_val == CAL_SUCCESS) { - ret_val = CALENDAR_ERROR_NONE; - } - else { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - ret_val = CALENDAR_ERROR_DB_FAILED; - } +{ + CALENDAR_INVALID_ARG_CHECK(event_id <= 0); + + int ret; - return ret_val; + ret = calendar_svc_delete(CAL_STRUCT_SCHEDULE, event_id); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + return CALENDAR_ERROR_NONE; } int calendar_event_update_to_db(calendar_event_h event) -{ +{ CALENDAR_NULL_ARG_CHECK(event); - int ret_val = CALENDAR_ERROR_NONE; + int ret; + cal_struct *cs; - if((cal_struct*)((calendar_event_s*)event)->event_legacy == NULL) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; - } - - int event_id = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_TABLE_INT_INDEX); - if(event_id <= 0) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; - } - - cal_struct* cal = NULL; - if(calendar_svc_get(CAL_STRUCT_SCHEDULE, event_id, NULL, &cal) == CAL_SUCCESS) { // referenced (SVACE) - if( ((calendar_schedule_s*)((calendar_event_legacy_s*)cal)->user_data)->is_deleted == true ) { // referenced (SVACE) - if(cal != NULL) { // referenced (SVACE) - calendar_svc_struct_free(&cal); - } - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; - } else { - if(cal != NULL) { // referenced (SVACE) - calendar_svc_struct_free(&cal); - } - } - } else { - if(cal != NULL) { // referenced (SVACE) - calendar_svc_struct_free(&cal); - } - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } - - ret_val = calendar_svc_update((cal_struct*)((calendar_event_s*)event)->event_legacy); - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + ret = calendar_svc_update(cs); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); return CALENDAR_ERROR_DB_FAILED; } - - return CALENDAR_ERROR_NONE; + return CALENDAR_ERROR_NONE; } int calendar_event_get_from_db(int event_id, calendar_event_h *event) { CALENDAR_NULL_ARG_CHECK(event); - *event = malloc(sizeof(calendar_event_s)); - if (*event == NULL) { - LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + + int ret; + calendar_event_s *ce; + + ce = calloc(1, sizeof(calendar_event_s)); + if (ce == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); return CALENDAR_ERROR_OUT_OF_MEMORY; } - memset(*event, 0, sizeof(calendar_event_s)); - if(calendar_svc_get(CAL_STRUCT_SCHEDULE, event_id, NULL, (cal_struct**)&(*(calendar_event_s**)event)->event_legacy) != CAL_SUCCESS) { + LOGD("event_id = %d", event_id); + + ret = calendar_svc_get(CAL_STRUCT_SCHEDULE, event_id, NULL, + (cal_struct **)&(ce->event_legacy)); + if(ret != CAL_SUCCESS) { free(*event); *event = NULL; - - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); return CALENDAR_ERROR_DB_FAILED; } + *event = (calendar_event_h)ce; return CALENDAR_ERROR_NONE; } @@ -177,973 +226,2622 @@ int calendar_event_get_db_id(calendar_event_h event, int *db_id) CALENDAR_NULL_ARG_CHECK(event); CALENDAR_NULL_ARG_CHECK(db_id); - *db_id = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)event)->event_legacy, (char*)CAL_VALUE_INT_INDEX); + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + *db_id = calendar_svc_struct_get_int(cs, CAL_VALUE_INT_INDEX); if(*db_id < 0) *db_id = 0; return CALENDAR_ERROR_NONE; } -int calendar_event_get_calendar_db_id(calendar_event_h event, int *calendar_db_id) +int calendar_event_get_calendar_book_db_id(calendar_event_h event, int *calendar_book_db_id) { CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(calendar_db_id); + CALENDAR_NULL_ARG_CHECK(calendar_book_db_id); - *calendar_db_id = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)event)->event_legacy, - (char*)CAL_VALUE_INT_CALENDAR_ID); - if(*calendar_db_id < 0) - *calendar_db_id = 0; - return CALENDAR_ERROR_NONE; -} + cal_struct *cs; -int calendar_event_get_total_count_from_db(int *count) -{ - CALENDAR_NULL_ARG_CHECK(count); - - *count = calendar_svc_get_count(0, 0, (char*)CAL_STRUCT_SCHEDULE); - if(*count == CAL_ERR_FAIL) - { - *count = 0; - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - return CALENDAR_ERROR_NONE; + *calendar_book_db_id = calendar_svc_struct_get_int(cs, CAL_VALUE_INT_CALENDAR_ID); + if(*calendar_book_db_id < 0) + *calendar_book_db_id = 0; + return CALENDAR_ERROR_NONE; } -int calendar_event_create (calendar_event_h *event) -{ +int calendar_event_get_status(calendar_event_h event, calendar_event_status_e *status) +{ CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(status); - *event = malloc(sizeof(calendar_event_s)); - if (*event == NULL) { - LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); - return CALENDAR_ERROR_OUT_OF_MEMORY; - } - (*(calendar_event_s**)event)->event_legacy = (calendar_event_legacy_s*)calendar_svc_struct_new(CAL_STRUCT_SCHEDULE); + cal_struct *cs; - if ((*(calendar_event_s**)event)->event_legacy == NULL) { - free(*event); - *event = NULL; - LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); - return CALENDAR_ERROR_OUT_OF_MEMORY; + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - calendar_svc_struct_set_int((cal_struct*)(*(calendar_event_s**)event)->event_legacy, CAL_VALUE_INT_TIMEZONE, 100); // set default timezone - - return CALENDAR_ERROR_NONE; -} - -int calendar_event_destroy(calendar_event_h event) -{ - int ret_val = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(event); - ret_val = calendar_svc_struct_free((cal_struct **)&((calendar_event_s*)event)->event_legacy); - - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - ret_val = CALENDAR_ERROR_INVALID_PARAMETER; - } else { - free(event); - ret_val = CALENDAR_ERROR_NONE; + *status = calendar_svc_struct_get_int(cs, CAL_VALUE_INT_MEETING_STATUS); + if (*status < 0) { + *status = 0; } - - return ret_val; -} - -int calendar_event_get_subject(calendar_event_h event, char **subject) -{ - CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(subject); - - *subject = NULL; - *subject = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_TXT_SUMMARY)); - - return CALENDAR_ERROR_NONE; + return CALENDAR_ERROR_NONE; } -int calendar_event_set_subject(calendar_event_h event,const char *subject) -{ - int ret_val = CALENDAR_ERROR_NONE; +int calendar_event_set_status(calendar_event_h event, calendar_event_status_e status) +{ CALENDAR_NULL_ARG_CHECK(event); - ret_val = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_TXT_SUMMARY, subject); + int ret; + cal_struct *cs; - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } + ret = calendar_svc_struct_set_int(cs, CAL_VALUE_INT_MEETING_STATUS, status); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } return CALENDAR_ERROR_NONE; } -int calendar_event_get_description(calendar_event_h event,char **description) -{ +int calendar_event_get_priority(calendar_event_h event, calendar_event_priority_e *priority) +{ CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(description); + CALENDAR_NULL_ARG_CHECK(priority); - *description = NULL; - *description = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_TXT_DESCRIPTION)); + cal_struct *cs; - return CALENDAR_ERROR_NONE; -} + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + *priority = calendar_svc_struct_get_int(cs, CAL_VALUE_INT_PRIORITY); -int calendar_event_set_description(calendar_event_h event, const char *description) -{ - int ret_val = CALENDAR_ERROR_NONE; + return CALENDAR_ERROR_NONE; +} +int calendar_event_set_priority(calendar_event_h event, calendar_event_priority_e priority) +{ CALENDAR_NULL_ARG_CHECK(event); - ret_val = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_TXT_DESCRIPTION, description); + int ret; + cal_struct *cs; - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } + ret = calendar_svc_struct_set_int(cs, CAL_VALUE_INT_PRIORITY, priority); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } return CALENDAR_ERROR_NONE; } -int calendar_event_get_is_all_day_event(calendar_event_h event, bool *is_all_day_event) +int calendar_event_get_busy_status(calendar_event_h event, calendar_event_busy_status_e *busy_status) { CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(is_all_day_event); + CALENDAR_NULL_ARG_CHECK(busy_status); + + cal_struct *cs; - *is_all_day_event = (bool)calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_INT_ALL_DAY_EVENT); + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + *busy_status = calendar_svc_struct_get_int(cs, CAL_VALUE_INT_BUSY_STATUS); return CALENDAR_ERROR_NONE; } -int calendar_event_set_is_all_day_event(calendar_event_h event, bool is_all_day_event) -{ - int ret_val = CALENDAR_ERROR_NONE; - +int calendar_event_set_busy_status(calendar_event_h event, calendar_event_busy_status_e busy_status) +{ CALENDAR_NULL_ARG_CHECK(event); - ret_val = calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_INT_ALL_DAY_EVENT, is_all_day_event); - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + int ret; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } + ret = calendar_svc_struct_set_int(cs, CAL_VALUE_INT_BUSY_STATUS, busy_status); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } return CALENDAR_ERROR_NONE; - } - -int calendar_event_get_location(calendar_event_h event, char **location) -{ - CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(location); - - *location = NULL; - *location = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_TXT_LOCATION)); - - return CALENDAR_ERROR_NONE; } -int calendar_event_set_location(calendar_event_h event, const char *location) -{ - int ret_val = CALENDAR_ERROR_NONE; +// TOREM +int calendar_event_get_total_count_from_db(int calendar_book_db_id, int *count) +{ + CALENDAR_NULL_ARG_CHECK(count); - CALENDAR_NULL_ARG_CHECK(event); + int cnt; + int account_db_id; - ret_val = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_TXT_LOCATION, location); - - if (ret_val != CAL_SUCCESS) - { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; + account_db_id = _calendar_get_account_db_id(calendar_book_db_id); + CALENDAR_INVALID_ARG_CHECK(account_db_id == -2); + cnt = calendar_svc_get_count(account_db_id, calendar_book_db_id, CAL_STRUCT_SCHEDULE); + if(cnt == CAL_ERR_FAIL) { + *count = 0; + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; } - return CALENDAR_ERROR_NONE; + *count = cnt; + return CALENDAR_ERROR_NONE; } -int calendar_event_get_reminder(calendar_event_h event,calendar_reminder_interval_type_e *reminder_interval_type, int *reminder_interval) +int calendar_event_get_reminder_sound_file_path(calendar_event_h event, char **sound_file_path) { CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(reminder_interval_type); - CALENDAR_NULL_ARG_CHECK(reminder_interval); + CALENDAR_NULL_ARG_CHECK(sound_file_path); + + cal_struct *cs; + GList *alarm_list; + int ret; - GList* list = NULL; - if(calendar_svc_struct_get_list((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_LST_ALARM, &list) != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } - - if (g_list_length(list) == 0) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + ret = calendar_svc_struct_get_list(cs, CAL_VALUE_LST_ALARM, &alarm_list); + if (ret < CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } - cal_value *value = (cal_value *)list->data; + if (!alarm_list || !alarm_list->data) { + *sound_file_path = NULL; + return CALENDAR_ERROR_NONE; + } - *reminder_interval_type = calendar_svc_value_get_int(value, CAL_VALUE_INT_ALARMS_TICK_UNIT); - *reminder_interval = calendar_svc_value_get_int(value, CAL_VALUE_INT_ALARMS_TICK); + *sound_file_path = _calendar_safe_strdup( + calendar_svc_value_get_str(alarm_list->data, CAL_VALUE_TXT_ALARMS_TONE)); return CALENDAR_ERROR_NONE; } -int calendar_event_set_reminder(calendar_event_h event,calendar_reminder_interval_type_e reminder_interval_type, int reminder_interval) +int calendar_event_set_reminder_sound_file_path(calendar_event_h event, const char *sound_file_path) { CALENDAR_NULL_ARG_CHECK(event); - cal_value *value = calendar_svc_value_new(CAL_VALUE_LST_ALARM); - if(calendar_svc_value_set_int(value, CAL_VALUE_INT_ALARMS_TICK_UNIT, reminder_interval_type) != CAL_SUCCESS) { + int ret; + cal_struct *cs; + GList *alarm_list = NULL; + cal_value *value; + GList* list = NULL; + int svc_reminder_interval_type; + int reminder_interval; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + ret = calendar_svc_struct_get_list(cs, CAL_VALUE_LST_ALARM, &alarm_list); + if (ret < CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + if (alarm_list) { + if (!alarm_list->data) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + value = (cal_value *)alarm_list->data; + svc_reminder_interval_type = calendar_svc_value_get_int(value, + CAL_VALUE_INT_ALARMS_TICK_UNIT); + reminder_interval = calendar_svc_value_get_int(value, + CAL_VALUE_INT_ALARMS_TICK); + calendar_svc_struct_free(&value); + alarm_list = NULL; + } + + value = calendar_svc_value_new(CAL_VALUE_LST_ALARM); + if (value == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + ret = calendar_svc_value_set_int(value, + CAL_VALUE_INT_ALARMS_TICK_UNIT, svc_reminder_interval_type); + if (ret != CAL_SUCCESS) { calendar_svc_value_free(&value); - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } - if(calendar_svc_value_set_int(value, CAL_VALUE_INT_ALARMS_TICK, reminder_interval) != CAL_SUCCESS) { + ret = calendar_svc_value_set_int(value, CAL_VALUE_INT_ALARMS_TICK, reminder_interval); + if (ret != CAL_SUCCESS) { calendar_svc_value_free(&value); - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } - GList* list = NULL; - calendar_svc_struct_store_list((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_LST_ALARM, NULL); - list = g_list_append(list, value); + ret = calendar_svc_value_set_str(value, CAL_VALUE_TXT_ALARMS_TONE, sound_file_path); + if (ret != CAL_SUCCESS) { + calendar_svc_value_free(&value); + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } - if(calendar_svc_struct_store_list((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_LST_ALARM, list) != CAL_SUCCESS) { + calendar_svc_struct_store_list(cs, CAL_VALUE_LST_ALARM, NULL); + list = g_list_append(list, value); + ret = calendar_svc_struct_store_list(cs, CAL_VALUE_LST_ALARM, list); + if (ret != CAL_SUCCESS) { calendar_svc_value_free(&value); g_list_free(list); - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } - return CALENDAR_ERROR_NONE; } -int calendar_event_get_recurrence_frequency(calendar_event_h event,calendar_recurrence_frequency_e *recurrence_frequency) +int calendar_event_get_recurrence_byday(calendar_event_h event, char **byday) { CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(recurrence_frequency); + CALENDAR_NULL_ARG_CHECK(byday); - *recurrence_frequency = (calendar_recurrence_frequency_e)calendar_svc_struct_get_int( - (cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_INT_REPEAT_TERM); + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + *byday = _calendar_safe_strdup( + calendar_svc_struct_get_str(cs, CALS_VALUE_TXT_RRULE_BYDAY)); return CALENDAR_ERROR_NONE; } -int calendar_event_set_recurrence_frequency(calendar_event_h event,calendar_recurrence_frequency_e recurrence_frequency) +int calendar_event_set_recurrence_byday(calendar_event_h event, const char* byday) { - int ret_val = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(event); - calendar_event_legacy_s* event_legacy = ((calendar_event_s*)event)->event_legacy; - ret_val = calendar_svc_struct_set_int((cal_struct*)event_legacy, CAL_VALUE_INT_REPEAT_TERM, recurrence_frequency); - switch(recurrence_frequency) - { - case CALENDAR_RECURRENCE_DAILY: - ret_val = calendar_svc_struct_set_int((cal_struct*)event_legacy, CAL_VALUE_INT_REPEAT_INTERVAL, 1); - break; - case CALENDAR_RECURRENCE_WEEKLY: - ret_val = calendar_svc_struct_set_int((cal_struct*)event_legacy, CAL_VALUE_INT_REPEAT_INTERVAL, 1); - break; -// case CALENDAR_RECURRENCE_WEEKDAY: -// ret_val = calendar_svc_struct_set_int((cal_struct*)event_legacy, CAL_VALUE_INT_REPEAT_INTERVAL, 1); -// break; - case CALENDAR_RECURRENCE_NONE: - ret_val = calendar_svc_struct_set_int((cal_struct*)event_legacy, CAL_VALUE_INT_REPEAT_INTERVAL, 1); - break; - case CALENDAR_RECURRENCE_MONTHLY: - case CALENDAR_RECURRENCE_YEARLY: -// case CALENDAR_RECURRENCE_MONTHLY_ON_DAY: - ret_val = calendar_svc_struct_set_int((cal_struct*)event_legacy, CAL_VALUE_INT_REPEAT_INTERVAL, 1); - break; + int ret; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - if (ret_val != CAL_SUCCESS) - { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + ret = calendar_svc_struct_set_str(cs, CALS_VALUE_TXT_RRULE_BYDAY, byday); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } return CALENDAR_ERROR_NONE; } -int calendar_event_get_recurrence_week_flag(calendar_event_h event, int *week_flag) +int calendar_event_get_recurrence_bysetpos(calendar_event_h event, char **bysetpos) { CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(week_flag); - - char* week_flag_string = calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_TXT_WEEK_FLAG); - - if(week_flag_string == NULL) { - *week_flag = 0; - return CALENDAR_ERROR_NONE; - } - - *week_flag = CALENDAR_WEEK_FLAG_NONE; - if(week_flag_string[0] == '1') - *week_flag = *week_flag | CALENDAR_WEEK_FLAG_SUN; - if(week_flag_string[1] == '1') - *week_flag = *week_flag | CALENDAR_WEEK_FLAG_MON; - if(week_flag_string[2] == '1') - *week_flag = *week_flag | CALENDAR_WEEK_FLAG_TUE; - if(week_flag_string[3] == '1') - *week_flag = *week_flag | CALENDAR_WEEK_FLAG_WED; - if(week_flag_string[4] == '1') - *week_flag = *week_flag | CALENDAR_WEEK_FLAG_THU; - if(week_flag_string[5] == '1') - *week_flag = *week_flag | CALENDAR_WEEK_FLAG_FRI; - if(week_flag_string[6] == '1') - *week_flag = *week_flag | CALENDAR_WEEK_FLAG_SAT; - - return CALENDAR_ERROR_NONE; -} - -int calendar_event_set_recurrence_week_flag(calendar_event_h event, int week_flag) -{ - CALENDAR_NULL_ARG_CHECK(event); - - char week_flag_string[8]; // never overflows - if(week_flag & CALENDAR_WEEK_FLAG_SUN) week_flag_string[0] = '1'; - else week_flag_string[0] = '0'; - if(week_flag & CALENDAR_WEEK_FLAG_MON) week_flag_string[1] = '1'; - else week_flag_string[1] = '0'; - if(week_flag & CALENDAR_WEEK_FLAG_TUE) week_flag_string[2] = '1'; - else week_flag_string[2] = '0'; - if(week_flag & CALENDAR_WEEK_FLAG_WED) week_flag_string[3] = '1'; - else week_flag_string[3] = '0'; - if(week_flag & CALENDAR_WEEK_FLAG_THU) week_flag_string[4] = '1'; - else week_flag_string[4] = '0'; - if(week_flag & CALENDAR_WEEK_FLAG_FRI) week_flag_string[5] = '1'; - else week_flag_string[5] = '0'; - if(week_flag & CALENDAR_WEEK_FLAG_SAT) week_flag_string[6] = '1'; - else week_flag_string[6] = '0'; - week_flag_string[7] = 0x00; - - calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_TXT_WEEK_FLAG, week_flag_string); //days in which recurrence should be activated - - return CALENDAR_ERROR_NONE; -} - - -int calendar_event_get_recurrence_until_date(calendar_event_h event, struct tm *recurrence_until_date) -{ - time_t time; - struct tm *tmp_date = NULL; - - CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(recurrence_until_date); + CALENDAR_NULL_ARG_CHECK(bysetpos); - time = calendar_svc_struct_get_time((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_GMT_REPEAT_END_DATE, CAL_TZ_FLAG_LOCAL); - - if(time == 0) { - LOGE("[%s] CALENDAR_ERROR_NO_DATA(0x%08x)", __FUNCTION__, CALENDAR_ERROR_NO_DATA); - return CALENDAR_ERROR_NO_DATA; - } - - tmp_date = localtime(&time); - - if (tmp_date == NULL) { - return CALENDAR_ERROR_NO_DATA; - } + cal_struct *cs; - *recurrence_until_date = *tmp_date; + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } - return CALENDAR_ERROR_NONE; + *bysetpos = _calendar_safe_strdup( + calendar_svc_struct_get_str(cs, CALS_VALUE_TXT_RRULE_BYSETPOS)); + return CALENDAR_ERROR_NONE; } -int calendar_event_set_recurrence_until_date(calendar_event_h event, struct tm recurrence_until_date) -{ - int ret_val = CALENDAR_ERROR_NONE; - +int calendar_event_set_recurrence_bysetpos(calendar_event_h event, const char* bysetpos) +{ CALENDAR_NULL_ARG_CHECK(event); - ret_val = calendar_svc_struct_set_time((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_GMT_REPEAT_END_DATE, CAL_TZ_FLAG_LOCAL, mktime(&recurrence_until_date)); - - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; + int ret; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - return CALENDAR_ERROR_NONE; + ret = calendar_svc_struct_set_str(cs, CALS_VALUE_TXT_RRULE_BYSETPOS, bysetpos); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; } -int calendar_event_add_recurrence_exception_date(calendar_event_h event, int year, int month, int day) +int calendar_event_get_recurrence_bymonthday(calendar_event_h event, char **bymonthday) { - CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(bymonthday); - int ret_val = CALENDAR_ERROR_NONE; - GList* exception_list = NULL; - struct tm date = {0}; - date.tm_year = year - 1900; - date.tm_mon = month - 1; - date.tm_mday = day; - - cal_value *value = calendar_svc_value_new(CAL_VALUE_LST_EXCEPTION_DATE); - if(value == NULL) { - LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); - return CALENDAR_ERROR_OUT_OF_MEMORY; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - calendar_svc_value_set_tm(value, CAL_VALUE_GMT_EXCEPTION_DATE_TIME, CAL_TZ_FLAG_LOCAL, &date); - - //get attendee list firstly - calendar_svc_struct_get_list((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_LST_EXCEPTION_DATE, &exception_list); - exception_list = g_list_append(exception_list, value); - ret_val = calendar_svc_struct_store_list((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_LST_EXCEPTION_DATE, exception_list); - - return CALENDAR_ERROR_NONE; + + *bymonthday = _calendar_safe_strdup( + calendar_svc_struct_get_str(cs, CALS_VALUE_TXT_RRULE_BYMONTHDAY)); + return CALENDAR_ERROR_NONE; } -int calendar_event_get_recurrence_exception_iterator(calendar_event_h event, calendar_recurrence_exception_iterator_h *iterator) +int calendar_event_set_recurrence_bymonthday(calendar_event_h event, const char* bymonthday) { - CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(iterator); - - GList* exception_list = NULL; - //get attendee list first - calendar_svc_struct_get_list((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_LST_EXCEPTION_DATE, &exception_list); - *iterator = (calendar_recurrence_exception_iterator_h)exception_list; + CALENDAR_NULL_ARG_CHECK(event); - return CALENDAR_ERROR_NONE; -} + int ret; + cal_struct *cs; -bool calendar_recurrence_exception_has_next(calendar_recurrence_exception_iterator_h iterator) -{ - CALENDAR_NULL_ARG_CHECK(iterator); - if(iterator == NULL) { - return false; + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - GList* glist = (GList*)iterator; - cal_value* value = (cal_value*)glist->data; - if(value == NULL) { - return false; - } - glist = _calendar_glist_next_until_not_deleted(glist); - if(glist == NULL) { - return false; + ret = calendar_svc_struct_set_str(cs, CALS_VALUE_TXT_RRULE_BYMONTHDAY, bymonthday); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - - return true; + return CALENDAR_ERROR_NONE; } -int calendar_recurrence_exception_next(calendar_recurrence_exception_iterator_h *iterator, int* year, int* month, int* day) +int calendar_event_get_recurrence_bymonth(calendar_event_h event, char **bymonth) { - CALENDAR_NULL_ARG_CHECK(iterator); - CALENDAR_NULL_ARG_CHECK(year); - CALENDAR_NULL_ARG_CHECK(month); - CALENDAR_NULL_ARG_CHECK(day); + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(bymonth); - cal_value *value = NULL; - *year = 0; - *month = 0; - *day = 0; - GList* glist = (GList*)*iterator; - glist = _calendar_glist_next_until_not_deleted(glist); - if(glist != NULL) - { - value = glist->data; - struct tm *date = calendar_svc_value_get_tm(value, CAL_VALUE_GMT_EXCEPTION_DATE_TIME, CAL_TZ_FLAG_LOCAL); - *year = date->tm_year + 1900; - *month = date->tm_mon + 1; - *day = date->tm_mday; - glist = g_list_next(glist); - *iterator = (calendar_recurrence_exception_iterator_h)glist; - return CALENDAR_ERROR_NONE; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - *iterator = NULL; - return CALENDAR_ERROR_ITERATOR_END; + + *bymonth = _calendar_safe_strdup( + calendar_svc_struct_get_str(cs, CALS_VALUE_TXT_RRULE_BYMONTH)); + return CALENDAR_ERROR_NONE; } -int calendar_event_get_start_time(calendar_event_h event, struct tm *start_time) -{ - time_t time; - struct tm *tmp_date = NULL; +int calendar_event_set_recurrence_bymonth(calendar_event_h event, const char* bymonth) +{ CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(start_time); - time = calendar_svc_struct_get_time((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_GMT_START_DATE_TIME, CAL_TZ_FLAG_LOCAL); - - if(time == 0) { - LOGE("[%s] CALENDAR_ERROR_NO_DATA(0x%08x)", __FUNCTION__, CALENDAR_ERROR_NO_DATA); - return CALENDAR_ERROR_NO_DATA; - } - - tmp_date = localtime(&time); - - if (tmp_date == NULL) { - LOGE("[%s] CALENDAR_ERROR_NO_DATA(0x%08x)", __FUNCTION__, CALENDAR_ERROR_NO_DATA); - return CALENDAR_ERROR_NO_DATA; - } + int ret; + cal_struct *cs; - *start_time = *tmp_date; + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } - return CALENDAR_ERROR_NONE; + ret = calendar_svc_struct_set_str(cs, CALS_VALUE_TXT_RRULE_BYMONTH, bymonth); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; } -int calendar_event_set_start_time(calendar_event_h event, struct tm start_time) -{ - int ret_val = CALENDAR_ERROR_NONE; - +int calendar_event_get_recurrence_week_start(calendar_event_h event, calendar_week_flag_e *week_start) +{ CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(week_start); - ret_val = calendar_svc_struct_set_time((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_GMT_START_DATE_TIME, CAL_TZ_FLAG_LOCAL, mktime(&start_time)); + int wkst; + cal_struct *cs; - if (ret_val != CAL_SUCCESS) - { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - return CALENDAR_ERROR_NONE; + wkst = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_RRULE_WKST); + switch (wkst) { + case CALS_SUNDAY: + *week_start = CALENDAR_WEEK_FLAG_SUN; + break; + case CALS_MONDAY: + *week_start = CALENDAR_WEEK_FLAG_MON; + break; + case CALS_TUESDAY: + *week_start = CALENDAR_WEEK_FLAG_TUE; + break; + case CALS_WEDNESDAY: + *week_start = CALENDAR_WEEK_FLAG_WED; + break; + case CALS_THURSDAY: + *week_start = CALENDAR_WEEK_FLAG_THU; + break; + case CALS_FRIDAY: + *week_start = CALENDAR_WEEK_FLAG_FRI; + break; + case CALS_SATURDAY: + *week_start = CALENDAR_WEEK_FLAG_SAT; + break; + default: + *week_start = CALENDAR_WEEK_FLAG_SUN; + break; + } + return CALENDAR_ERROR_NONE; } -int calendar_event_get_end_time(calendar_event_h event, struct tm *end_time) -{ - time_t time; - struct tm *tmp_date = NULL; - +int calendar_event_set_recurrence_week_start(calendar_event_h event, calendar_week_flag_e week_start) +{ CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(end_time); - time = calendar_svc_struct_get_time((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_GMT_END_DATE_TIME, CAL_TZ_FLAG_LOCAL); - - if(time == 0) { - LOGE("[%s] CALENDAR_ERROR_NO_DATA(0x%08x)", __FUNCTION__, CALENDAR_ERROR_NO_DATA); - return CALENDAR_ERROR_NO_DATA; - } - - tmp_date = localtime(&time); - - if (tmp_date == NULL) { - LOGE("[%s] CALENDAR_ERROR_NO_DATA(0x%08x)", __FUNCTION__, CALENDAR_ERROR_NO_DATA); - return CALENDAR_ERROR_NO_DATA; - } + int ret = CALENDAR_ERROR_NONE; + int wkst; + cal_struct *cs; - *end_time = *tmp_date; + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } - return CALENDAR_ERROR_NONE; + switch (week_start) { + case CALENDAR_WEEK_FLAG_SUN: + wkst = CALS_SUNDAY; + break; + case CALENDAR_WEEK_FLAG_MON: + wkst = CALS_MONDAY; + break; + case CALENDAR_WEEK_FLAG_TUE: + wkst = CALS_TUESDAY; + break; + case CALENDAR_WEEK_FLAG_WED: + wkst = CALS_WEDNESDAY; + break; + case CALENDAR_WEEK_FLAG_THU: + wkst = CALS_THURSDAY; + break; + case CALENDAR_WEEK_FLAG_FRI: + wkst = CALS_FRIDAY; + break; + case CALENDAR_WEEK_FLAG_SAT: + wkst = CALS_SATURDAY; + break; + default: + wkst = CALS_SUNDAY; + break; + } + ret = calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_WKST, wkst); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; } -int calendar_event_set_end_time(calendar_event_h event, struct tm end_time) -{ - int ret_val = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(event); +int calendar_event_delete_recurrence_instance_from_db(int event_db_id, long long int start_time) +{ + int ret; - ret_val = calendar_svc_struct_set_time((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_GMT_END_DATE_TIME, CAL_TZ_FLAG_LOCAL, mktime(&end_time)); - - if (ret_val != CAL_SUCCESS) - { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + if (event_db_id < 0) { + LOGE("Invalid argument: event_db_id is NULL"); return CALENDAR_ERROR_INVALID_PARAMETER; } - return CALENDAR_ERROR_NONE; + ret = calendar_svc_event_delete_normal_instance(event_db_id, start_time); + if (ret != CAL_SUCCESS) { + LOGE("Failed to delete normal instance"); + return CALENDAR_ERROR_DB_FAILED; + } + return CALENDAR_ERROR_NONE; } -int calendar_attendee_get_name(calendar_attendee_h attendee, char **name) -{ - CALENDAR_NULL_ARG_CHECK(attendee); - CALENDAR_NULL_ARG_CHECK(name); +int calendar_event_delete_recurrence_all_day_instance_from_db(int event_db_id, int year, int month, int day) +{ + int ret; - *name = NULL; - *name = _calendar_safe_strdup(calendar_svc_value_get_str((cal_value*)attendee, CAL_VALUE_TXT_ATTENDEE_DETAIL_NAME)); + if (event_db_id < 0) { + LOGE("Invalid argument: event_db_id is NULL"); + return CALENDAR_ERROR_INVALID_PARAMETER; + } - return CALENDAR_ERROR_NONE; + ret = calendar_svc_event_delete_allday_instance(event_db_id, year, month, day); + if (ret != CAL_SUCCESS) { + LOGE("Failed to delete normal instance"); + return CALENDAR_ERROR_DB_FAILED; + } + return CALENDAR_ERROR_NONE; } -int calendar_attendee_set_name(calendar_attendee_h attendee, const char *name) -{ - int ret_val = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(attendee); +int calendar_event_get_recurrence_exdate(calendar_event_h event, char** exdate) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(exdate); - ret_val = calendar_svc_value_set_str((cal_value*)attendee, CAL_VALUE_TXT_ATTENDEE_DETAIL_NAME, name); + cal_struct *cs; - if (ret_val != CAL_SUCCESS) - { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if (cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } - return CALENDAR_ERROR_NONE; + *exdate = _calendar_safe_strdup( + calendar_svc_struct_get_str(cs, CAL_VALUE_TXT_EXDATE)); + return CALENDAR_ERROR_NONE; } -int calendar_attendee_get_email(calendar_attendee_h attendee, char **email) -{ - CALENDAR_NULL_ARG_CHECK(attendee); - CALENDAR_NULL_ARG_CHECK(email); +int calendar_event_get_uid(calendar_event_h event, char **uid) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(uid); - *email = NULL; - *email = _calendar_safe_strdup(calendar_svc_value_get_str((cal_value*)attendee, CAL_VALUE_TXT_ATTENDEE_DETAIL_EMAIL)); - - return CALENDAR_ERROR_NONE; + char *_uid; + cal_struct *cs; -} + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } -int calendar_attendee_set_email(calendar_attendee_h attendee, const char *email) -{ - int ret_val = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(attendee); - CALENDAR_NULL_ARG_CHECK(email); + _uid = _calendar_safe_strdup( + calendar_svc_struct_get_str(cs, CAL_VALUE_TXT_UID)); + if (_uid == NULL || strlen(_uid) < 1) { + *uid = NULL; + + } else { + *uid = _uid; - ret_val = calendar_svc_value_set_str((cal_value*)attendee, CAL_VALUE_TXT_ATTENDEE_DETAIL_EMAIL, email); - - if (ret_val != CAL_SUCCESS) - { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; } - return CALENDAR_ERROR_NONE; + return CALENDAR_ERROR_NONE; } -int calendar_attendee_get_phone_number(calendar_attendee_h attendee, char **phone_number) +int calendar_event_set_uid(calendar_event_h event, const char *uid) { - CALENDAR_NULL_ARG_CHECK(attendee); - CALENDAR_NULL_ARG_CHECK(phone_number); + CALENDAR_NULL_ARG_CHECK(event); - *phone_number = NULL; - *phone_number = _calendar_safe_strdup(calendar_svc_value_get_str((cal_value*)attendee, CAL_VALUE_TXT_ATTENDEE_DETAIL_NUMBER)); + int ret; + cal_struct *cs; - return CALENDAR_ERROR_NONE; + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + ret = calendar_svc_struct_set_str(cs, CAL_VALUE_TXT_UID, uid); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; } -int calendar_attendee_set_phone_number(calendar_attendee_h attendee, const char *phone_number) +int calendar_event_get_recurrence_interval(calendar_event_h event, int *recurrence_interval) { - int ret_val = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(attendee); - CALENDAR_NULL_ARG_CHECK(phone_number); + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(recurrence_interval); - ret_val = calendar_svc_value_set_str((cal_value*)attendee, CAL_VALUE_TXT_ATTENDEE_DETAIL_NUMBER, phone_number); - - if (ret_val != CAL_SUCCESS) - { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } - return CALENDAR_ERROR_NONE; + *recurrence_interval = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_RRULE_INTERVAL); + + return CALENDAR_ERROR_NONE; } -int calendar_attendee_get_contact_db_id(calendar_attendee_h attendee, int *contact_db_id) +int calendar_event_set_recurrence_interval(calendar_event_h event, int recurrence_interval) { - CALENDAR_NULL_ARG_CHECK(attendee); - CALENDAR_NULL_ARG_CHECK(contact_db_id); + CALENDAR_NULL_ARG_CHECK(event); - *contact_db_id = -1; - *contact_db_id = calendar_svc_value_get_int((cal_value*)attendee, CAL_VALUE_INT_ATTENDEE_DETAIL_CT_INDEX); - if(*contact_db_id <= 0) - *contact_db_id = -1; - return CALENDAR_ERROR_NONE; -} + int ret; + cal_struct *cs; -int calendar_attendee_set_contact_db_id(calendar_attendee_h attendee, int contact_db_id) -{ - int ret_val = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(attendee); - - ret_val = calendar_svc_value_set_int((cal_value*)attendee, CAL_VALUE_INT_ATTENDEE_DETAIL_CT_INDEX, contact_db_id); - if (ret_val != CAL_SUCCESS) - { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } - return CALENDAR_ERROR_NONE; + ret = calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_INTERVAL, recurrence_interval); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; } - -int calendar_event_add_attendee(calendar_event_h event, calendar_attendee_h* attendee) -{ - int ret_val = CALENDAR_ERROR_NONE; - GList* attendee_list = NULL; +int calendar_event_get_recurrence_count(calendar_event_h event, int *recurrence_count) +{ CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(attendee); + CALENDAR_NULL_ARG_CHECK(recurrence_count); - *attendee = (calendar_attendee_h)calendar_svc_value_new(CAL_VALUE_LST_ATTENDEE_LIST); + cal_struct *cs; - if (*attendee == NULL) - { - LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); - return CALENDAR_ERROR_OUT_OF_MEMORY; + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - //get attendee list first - calendar_svc_struct_get_list((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_LST_ATTENDEE_LIST, &attendee_list); - attendee_list = g_list_append(attendee_list, *attendee); - ret_val = calendar_svc_struct_store_list((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_LST_ATTENDEE_LIST, attendee_list); - - return CALENDAR_ERROR_NONE; + *recurrence_count = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_RRULE_COUNT); + + return CALENDAR_ERROR_NONE; } -int calendar_event_add_attendee_with_contact(calendar_event_h event, int contact_db_id, calendar_attendee_h* attendee) +int calendar_event_set_recurrence_count(calendar_event_h event, int recurrence_count) { - int ret_val = CALENDAR_ERROR_NONE; - contact_h contact = NULL; - if(contact_get_from_db(contact_db_id, &contact) != CONTACTS_ERROR_NONE) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; - } - if((ret_val = calendar_event_add_attendee(event, attendee)) != CALENDAR_ERROR_NONE) - { - LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); - return CALENDAR_ERROR_OUT_OF_MEMORY; - } + CALENDAR_NULL_ARG_CHECK(event); - calendar_attendee_set_contact_db_id(*attendee, contact_db_id); - - contact_name_h name = NULL; - if(contact_get_name(contact, &name) == CONTACTS_ERROR_NONE) { - char *first_name = NULL; - if(contact_name_get_detail(name, CONTACT_NAME_DETAIL_FIRST, &first_name) == CONTACTS_ERROR_NONE) { - calendar_attendee_set_name(*attendee, first_name); - } - _calendar_safe_free(first_name); - } + int ret; + int type; + cal_struct *cs; - contact_email_iterator_h email_iterator = NULL; - if(contact_get_email_iterator(contact, &email_iterator) == CONTACTS_ERROR_NONE) { - contact_email_h email = NULL; - if(contact_email_iterator_next(&email_iterator, &email) == CONTACTS_ERROR_NONE) { - char *email_address = NULL; - if(contact_email_get_address(email, &email_address) == CONTACTS_ERROR_NONE) { - calendar_attendee_set_email(*attendee, email_address); - } - _calendar_safe_free(email_address); - } + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - contact_number_iterator_h number_iterator = NULL; - if(contact_get_number_iterator(contact, &number_iterator) == CONTACTS_ERROR_NONE) { - contact_number_h number = NULL; - if(contact_number_iterator_next(&number_iterator, &number) == CONTACTS_ERROR_NONE) { - char *number_string = NULL; - if(contact_number_get_number(number, &number_string) == CONTACTS_ERROR_NONE) { - calendar_attendee_set_phone_number(*attendee, number_string); - } - _calendar_safe_free(number_string); - } + type = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_DTSTART_TYPE); + calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_UNTIL_TYPE, type); + + calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_RANGE_TYPE, CALS_RANGE_COUNT); + ret = calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_COUNT, recurrence_count); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - - contact_destroy(contact); - - return CALENDAR_ERROR_NONE; + return CALENDAR_ERROR_NONE; } -int calendar_event_remove_attendee(calendar_event_h event, calendar_attendee_h attendee) -{ - CALENDAR_NULL_ARG_CHECK(event); +int calendar_attendee_get_status(calendar_attendee_h attendee, calendar_attendee_status_e *status) +{ CALENDAR_NULL_ARG_CHECK(attendee); + CALENDAR_NULL_ARG_CHECK(status); - calendar_svc_value_set_int((cal_value*)attendee, CAL_VALUE_INT_DETAIL_DELETE, 1); - - return CALENDAR_ERROR_NONE; + *status = calendar_svc_value_get_int( + (cal_value*)attendee, + CAL_VALUE_INT_ATTENDEE_DETAIL_STATUS); + if(*status < 0 || *status > CALENDAR_ATTENDEE_STATUS_MAX) { + *status = -1; + return CALENDAR_ERROR_NO_DATA; + } + return CALENDAR_ERROR_NONE; } -int calendar_event_get_attendee_iterator(calendar_event_h event, calendar_attendee_iterator_h *iterator) +int calendar_attendee_set_status(calendar_attendee_h attendee, calendar_attendee_status_e status) { - GList* attendee_list = NULL; + CALENDAR_NULL_ARG_CHECK(attendee); - CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(iterator); + int ret; - //get attendee list first - calendar_svc_struct_get_list((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_LST_ATTENDEE_LIST, &attendee_list); - *iterator = (calendar_attendee_iterator_h)attendee_list; - return CALENDAR_ERROR_NONE; + ret = calendar_svc_value_set_int( + (cal_value*)attendee, + CAL_VALUE_INT_ATTENDEE_DETAIL_STATUS, status); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; } -bool calendar_attendee_iterator_has_next(calendar_attendee_iterator_h iterator) -{ - if(iterator == NULL) { - return false; - } +int calendar_attendee_get_role(calendar_attendee_h attendee, calendar_attendee_role_e *role) +{ + CALENDAR_NULL_ARG_CHECK(attendee); + CALENDAR_NULL_ARG_CHECK(role); - GList* glist = (GList*)iterator; - cal_value* value = (cal_value*)glist->data; - if(value == NULL) { - return false; - } - glist = _calendar_glist_next_until_not_deleted(glist); - if(glist == NULL) { - return false; + *role = calendar_svc_value_get_int( + (cal_value*)attendee, + CAL_VALUE_INT_ATTENDEE_ROLE); + if(*role < 0 || *role > CALENDAR_ATTENDEE_ROLE_MAX) { + *role = -1; + return CALENDAR_ERROR_NO_DATA; } - - return true; + return CALENDAR_ERROR_NONE; } -int calendar_attendee_iterator_next(calendar_attendee_iterator_h *iterator, calendar_attendee_h *attendee) -{ - CALENDAR_NULL_ARG_CHECK(iterator); +int calendar_attendee_set_role(calendar_attendee_h attendee, calendar_attendee_role_e role) +{ CALENDAR_NULL_ARG_CHECK(attendee); - *attendee = NULL; - GList* glist = (GList*)*iterator; - glist = _calendar_glist_next_until_not_deleted(glist); - if(glist != NULL) - { + int ret; + + ret = calendar_svc_value_set_int( + (cal_value*)attendee, + CAL_VALUE_INT_ATTENDEE_ROLE, role); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_event_create (calendar_event_h *event) +{ + CALENDAR_NULL_ARG_CHECK(event); + + *event = calloc(1, sizeof(calendar_event_s)); + if (*event == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + (*(calendar_event_s**)event)->event_legacy = (calendar_event_legacy_s*)calendar_svc_struct_new(CAL_STRUCT_SCHEDULE); + if ((*(calendar_event_s**)event)->event_legacy == NULL) { + free(*event); + *event = NULL; + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_destroy(calendar_event_h event) +{ + CALENDAR_NULL_ARG_CHECK(event); + + int ret; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + ret = calendar_svc_struct_free(&cs); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + free(event); + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_subject(calendar_event_h event, char **subject) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(subject); + + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + *subject = _calendar_safe_strdup( + calendar_svc_struct_get_str(cs, CAL_VALUE_TXT_SUMMARY)); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_set_subject(calendar_event_h event,const char *subject) +{ + CALENDAR_NULL_ARG_CHECK(event); + + int ret; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + ret = calendar_svc_struct_set_str(cs, CAL_VALUE_TXT_SUMMARY, subject); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_categories(calendar_event_h event, char **categories) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(categories); + + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + *categories = _calendar_safe_strdup( + calendar_svc_struct_get_str(cs, CAL_VALUE_TXT_CATEGORIES)); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_set_categories(calendar_event_h event,const char *categories) +{ + CALENDAR_NULL_ARG_CHECK(event); + + int ret; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + ret = calendar_svc_struct_set_str(cs, CAL_VALUE_TXT_CATEGORIES, categories); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_description(calendar_event_h event,char **description) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(description); + + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + *description = _calendar_safe_strdup( + calendar_svc_struct_get_str(cs, CAL_VALUE_TXT_DESCRIPTION)); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_set_description(calendar_event_h event, const char *description) +{ + CALENDAR_NULL_ARG_CHECK(event); + + int ret; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + ret = calendar_svc_struct_set_str(cs, CAL_VALUE_TXT_DESCRIPTION, description); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_is_all_day_event(calendar_event_h event, bool *is_all_day_event) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(is_all_day_event); + + cal_struct *cs; + bool all_day; + int type; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + type = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_DTSTART_TYPE); + + if (type == CALS_TIME_LOCALTIME) + all_day = true; + else + all_day = false; + + *is_all_day_event = all_day; + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_set_all_day_event(calendar_event_h event, + int start_year, int start_month, int start_day, + int end_year, int end_month, int end_day) +{ + CALENDAR_NULL_ARG_CHECK(event); + + int ret; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + ret = calendar_svc_struct_set_int(cs, CALS_VALUE_INT_DTSTART_TYPE, CALS_TIME_LOCALTIME); + ret |= calendar_svc_struct_set_int(cs, CALS_VALUE_INT_DTSTART_YEAR, start_year); + ret |= calendar_svc_struct_set_int(cs, CALS_VALUE_INT_DTSTART_MONTH, start_month); + ret |= calendar_svc_struct_set_int(cs, CALS_VALUE_INT_DTSTART_MDAY, start_day); + ret |= calendar_svc_struct_set_int(cs, CALS_VALUE_INT_DTEND_TYPE, CALS_TIME_LOCALTIME); + ret |= calendar_svc_struct_set_int(cs, CALS_VALUE_INT_DTEND_YEAR, end_year); + ret |= calendar_svc_struct_set_int(cs, CALS_VALUE_INT_DTEND_MONTH, end_month); + ret |= calendar_svc_struct_set_int(cs, CALS_VALUE_INT_DTEND_MDAY, end_day); + + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_all_day_event(calendar_event_h event, + int *start_year, int *start_month, int *start_day, + int *end_year, int *end_month, int *end_day) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(start_year); + CALENDAR_NULL_ARG_CHECK(start_month); + CALENDAR_NULL_ARG_CHECK(start_day); + CALENDAR_NULL_ARG_CHECK(end_year); + CALENDAR_NULL_ARG_CHECK(end_month); + CALENDAR_NULL_ARG_CHECK(end_day); + + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + *start_year = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_DTSTART_YEAR); + *start_month = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_DTSTART_MONTH); + *start_day = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_DTSTART_MDAY); + *end_year = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_DTEND_YEAR); + *end_month = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_DTEND_MONTH); + *end_day = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_DTEND_MDAY); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_location(calendar_event_h event, char **location) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(location); + + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + *location = _calendar_safe_strdup( + calendar_svc_struct_get_str(cs, CAL_VALUE_TXT_LOCATION) ); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_set_location(calendar_event_h event, const char *location) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(location); + + int ret; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + ret = calendar_svc_struct_set_str(cs, CAL_VALUE_TXT_LOCATION, location); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + + +int _get_svc_reminder_interval_type(calendar_reminder_interval_type_e reminder_interval_type) +{ + switch (reminder_interval_type) { + case CALENDAR_REMINDER_NONE: + return CAL_SCH_TIME_UNIT_OFF; + case CALENDAR_REMINDER_TIME_UNIT_MINUTE: + return CAL_SCH_TIME_UNIT_MIN; + case CALENDAR_REMINDER_TIME_UNIT_HOUR: + return CAL_SCH_TIME_UNIT_HOUR; + case CALENDAR_REMINDER_TIME_UNIT_DAY: + return CAL_SCH_TIME_UNIT_DAY; + case CALENDAR_REMINDER_TIME_UNIT_WEEK: + return CAL_SCH_TIME_UNIT_WEEK; + case CALENDAR_REMINDER_TIME_UNIT_MONTH: + return CAL_SCH_TIME_UNIT_MONTH; + } + return CAL_SCH_TIME_UNIT_OFF; +} + +calendar_reminder_interval_type_e _set_svc_reminder_interval_type(int svc_reminder_interval_type) +{ + switch (svc_reminder_interval_type) { + case CAL_SCH_TIME_UNIT_OFF: + return CALENDAR_REMINDER_NONE; + case CAL_SCH_TIME_UNIT_MIN: + return CALENDAR_REMINDER_TIME_UNIT_MINUTE; + case CAL_SCH_TIME_UNIT_HOUR: + return CALENDAR_REMINDER_TIME_UNIT_HOUR; + case CAL_SCH_TIME_UNIT_DAY: + return CALENDAR_REMINDER_TIME_UNIT_DAY; + case CAL_SCH_TIME_UNIT_WEEK: + return CALENDAR_REMINDER_TIME_UNIT_WEEK; + case CAL_SCH_TIME_UNIT_MONTH: + return CALENDAR_REMINDER_TIME_UNIT_MONTH; + } + return CALENDAR_REMINDER_NONE; +} + +int calendar_event_get_reminder(calendar_event_h event,calendar_reminder_interval_type_e *reminder_interval_type, int *reminder_interval) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(reminder_interval_type); + CALENDAR_NULL_ARG_CHECK(reminder_interval); + + GList *alarm_list; + int r; + int svc_reminder_interval_type; + + r = calendar_svc_struct_get_list((cal_struct*)((calendar_event_s*)event)->event_legacy, + CAL_VALUE_LST_ALARM, &alarm_list); + if (r < CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + if (!alarm_list || !alarm_list->data) { + *reminder_interval_type = CALENDAR_REMINDER_NONE; + *reminder_interval = 0; + return CALENDAR_ERROR_NONE; + } + + svc_reminder_interval_type = calendar_svc_value_get_int(alarm_list->data, + CAL_VALUE_INT_ALARMS_TICK_UNIT); + *reminder_interval_type = _set_svc_reminder_interval_type(svc_reminder_interval_type); + *reminder_interval = calendar_svc_value_get_int(alarm_list->data, + CAL_VALUE_INT_ALARMS_TICK); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_set_reminder(calendar_event_h event,calendar_reminder_interval_type_e reminder_interval_type, int reminder_interval) +{ + CALENDAR_NULL_ARG_CHECK(event); + + int ret; + int svc_reminder_interval_type; + cal_struct *cs; + cal_value *value; + GList* list = NULL; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + value = calendar_svc_value_new(CAL_VALUE_LST_ALARM); + if (value == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + svc_reminder_interval_type = _get_svc_reminder_interval_type(reminder_interval_type); + + ret = calendar_svc_value_set_int(value, + CAL_VALUE_INT_ALARMS_TICK_UNIT, svc_reminder_interval_type); + if (ret != CAL_SUCCESS) { + calendar_svc_value_free(&value); + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + ret = calendar_svc_value_set_int(value, CAL_VALUE_INT_ALARMS_TICK, reminder_interval); + if (ret != CAL_SUCCESS) { + calendar_svc_value_free(&value); + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + calendar_svc_struct_store_list(cs, CAL_VALUE_LST_ALARM, NULL); + list = g_list_append(list, value); + + ret = calendar_svc_struct_store_list(cs, CAL_VALUE_LST_ALARM, list); + if (ret != CAL_SUCCESS) { + calendar_svc_value_free(&value); + g_list_free(list); + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_recurrence_frequency(calendar_event_h event,calendar_recurrence_frequency_e *recurrence_frequency) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(recurrence_frequency); + + int freq; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + freq = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_RRULE_FREQ); + switch (freq) { + case CALS_FREQ_ONCE: + *recurrence_frequency = CALENDAR_RECURRENCE_NONE; + break; + case CALS_FREQ_YEARLY: + *recurrence_frequency = CALENDAR_RECURRENCE_YEARLY; + break; + case CALS_FREQ_MONTHLY: + *recurrence_frequency = CALENDAR_RECURRENCE_MONTHLY; + break; + case CALS_FREQ_WEEKLY: + *recurrence_frequency = CALENDAR_RECURRENCE_WEEKLY; + break; + case CALS_FREQ_DAILY: + *recurrence_frequency = CALENDAR_RECURRENCE_DAILY; + break; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_event_set_recurrence_frequency(calendar_event_h event,calendar_recurrence_frequency_e recurrence_frequency) +{ + CALENDAR_NULL_ARG_CHECK(event); + + int ret; + int freq = CALS_FREQ_ONCE; + cal_struct *cs; + + switch (recurrence_frequency) { + case CALENDAR_RECURRENCE_NONE: + freq = CALS_FREQ_ONCE; + break; + case CALENDAR_RECURRENCE_DAILY: + freq = CALS_FREQ_DAILY; + break; + case CALENDAR_RECURRENCE_WEEKLY: + freq = CALS_FREQ_WEEKLY; + break; + case CALENDAR_RECURRENCE_MONTHLY: + freq = CALS_FREQ_MONTHLY; + break; + case CALENDAR_RECURRENCE_YEARLY: + freq = CALS_FREQ_YEARLY; + break; + default: + freq = CALS_FREQ_ONCE; + break; + } + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + ret = calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_FREQ, freq); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_recurrence_until_date(calendar_event_h event, long long int *recurrence_until_date) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(recurrence_until_date); + + long long int lli; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + lli = calendar_svc_struct_get_lli(cs, CALS_VALUE_LLI_RRULE_UNTIL_UTIME); + if (lli == CALS_TODO_NO_DUE_DATE) { + return CALENDAR_ERROR_NO_DATA; + } + + *recurrence_until_date = lli; + return CALENDAR_ERROR_NONE; +} + +int calendar_event_set_recurrence_until_date(calendar_event_h event, long long int recurrence_until_date) +{ + CALENDAR_NULL_ARG_CHECK(event); + + int ret = CALENDAR_ERROR_NONE; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_RANGE_TYPE, CALS_RANGE_UNTIL); + calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_UNTIL_TYPE, CALS_TIME_UTIME); + ret = calendar_svc_struct_set_lli(cs, + CALS_VALUE_LLI_RRULE_UNTIL_UTIME, recurrence_until_date); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_start_time(calendar_event_h event, long long int *start_time) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(start_time); + + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + *start_time = calendar_svc_struct_get_lli(cs, CALS_VALUE_LLI_DTSTART_UTIME); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_set_start_time(calendar_event_h event, long long int start_time) +{ + CALENDAR_NULL_ARG_CHECK(event); + + int ret; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + ret = calendar_svc_struct_set_int(cs, CALS_VALUE_INT_DTSTART_TYPE, CALS_TIME_UTIME); + ret = calendar_svc_struct_set_lli(cs, + CALS_VALUE_LLI_DTSTART_UTIME, start_time); + + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_end_time(calendar_event_h event, long long int *end_time) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(end_time); + + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + *end_time = calendar_svc_struct_get_lli(cs, CALS_VALUE_LLI_DTEND_UTIME); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_set_end_time(calendar_event_h event, long long int end_time) +{ + CALENDAR_NULL_ARG_CHECK(event); + + int ret; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + ret = calendar_svc_struct_set_lli(cs, CALS_VALUE_LLI_DTEND_UTIME, end_time); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_attendee_get_name(calendar_attendee_h attendee, char **name) +{ + CALENDAR_NULL_ARG_CHECK(attendee); + CALENDAR_NULL_ARG_CHECK(name); + + *name = _calendar_safe_strdup(calendar_svc_value_get_str((cal_value*)attendee, CAL_VALUE_TXT_ATTENDEE_DETAIL_NAME)); + + return CALENDAR_ERROR_NONE; +} + +int calendar_attendee_set_name(calendar_attendee_h attendee, const char *name) +{ + int ret = CALENDAR_ERROR_NONE; + CALENDAR_NULL_ARG_CHECK(attendee); + + ret = calendar_svc_value_set_str((cal_value*)attendee, CAL_VALUE_TXT_ATTENDEE_DETAIL_NAME, name); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_attendee_get_email(calendar_attendee_h attendee, char **email) +{ + CALENDAR_NULL_ARG_CHECK(attendee); + CALENDAR_NULL_ARG_CHECK(email); + + *email = _calendar_safe_strdup( + calendar_svc_value_get_str((cal_value*)attendee, CAL_VALUE_TXT_ATTENDEE_DETAIL_EMAIL)); + + return CALENDAR_ERROR_NONE; + +} + +int calendar_attendee_set_email(calendar_attendee_h attendee, const char *email) +{ + int ret = CALENDAR_ERROR_NONE; + CALENDAR_NULL_ARG_CHECK(attendee); + CALENDAR_NULL_ARG_CHECK(email); + + ret = calendar_svc_value_set_str((cal_value*)attendee, CAL_VALUE_TXT_ATTENDEE_DETAIL_EMAIL, email); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_attendee_get_phone_number(calendar_attendee_h attendee, char **phone_number) +{ + CALENDAR_NULL_ARG_CHECK(attendee); + CALENDAR_NULL_ARG_CHECK(phone_number); + + *phone_number = _calendar_safe_strdup(calendar_svc_value_get_str((cal_value*)attendee, CAL_VALUE_TXT_ATTENDEE_DETAIL_NUMBER)); + + return CALENDAR_ERROR_NONE; +} + +int calendar_attendee_set_phone_number(calendar_attendee_h attendee, const char *phone_number) +{ + int ret = CALENDAR_ERROR_NONE; + CALENDAR_NULL_ARG_CHECK(attendee); + CALENDAR_NULL_ARG_CHECK(phone_number); + + ret = calendar_svc_value_set_str((cal_value*)attendee, CAL_VALUE_TXT_ATTENDEE_DETAIL_NUMBER, phone_number); + + if (ret != CAL_SUCCESS) + { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + return CALENDAR_ERROR_NONE; +} + +int calendar_attendee_get_contact_db_id(calendar_attendee_h attendee, int *contact_db_id) +{ + CALENDAR_NULL_ARG_CHECK(attendee); + CALENDAR_NULL_ARG_CHECK(contact_db_id); + + *contact_db_id = -1; + *contact_db_id = calendar_svc_value_get_int((cal_value*)attendee, CAL_VALUE_INT_ATTENDEE_DETAIL_CT_INDEX); + if(*contact_db_id <= 0) + *contact_db_id = -1; + return CALENDAR_ERROR_NONE; +} + +int calendar_attendee_set_contact_db_id(calendar_attendee_h attendee, int contact_db_id) +{ + CALENDAR_NULL_ARG_CHECK(attendee); + + int ret; + + ret = calendar_svc_value_set_int((cal_value*)attendee, CAL_VALUE_INT_ATTENDEE_DETAIL_CT_INDEX, contact_db_id); + if (ret != CAL_SUCCESS) + { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_add_attendee(calendar_event_h event, calendar_attendee_h* attendee) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(attendee); + + int ret = CALENDAR_ERROR_NONE; + GList* attendee_list = NULL; + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + *attendee = (calendar_attendee_h)calendar_svc_value_new(CAL_VALUE_LST_ATTENDEE_LIST); + if (*attendee == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + //get attendee list first + calendar_svc_struct_get_list(cs, CAL_VALUE_LST_ATTENDEE_LIST, &attendee_list); + attendee_list = g_list_append(attendee_list, *attendee); + ret = calendar_svc_struct_store_list(cs, CAL_VALUE_LST_ATTENDEE_LIST, attendee_list); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_add_attendee_with_contact(calendar_event_h event, int contact_db_id, calendar_attendee_h* attendee) +{ + int ret = CALENDAR_ERROR_NONE; + contact_h contact = NULL; + if(contact_get_from_db(contact_db_id, &contact) != CONTACTS_ERROR_NONE) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + if((ret = calendar_event_add_attendee(event, attendee)) != CALENDAR_ERROR_NONE) + { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + calendar_attendee_set_contact_db_id(*attendee, contact_db_id); + + contact_name_h name = NULL; + if(contact_get_name(contact, &name) == CONTACTS_ERROR_NONE) { + char *first_name = NULL; + if(contact_name_get_detail(name, CONTACT_NAME_DETAIL_FIRST, &first_name) == CONTACTS_ERROR_NONE) { + calendar_attendee_set_name(*attendee, first_name); + } + _calendar_safe_free(first_name); + } + + contact_email_iterator_h email_iterator = NULL; + if(contact_get_email_iterator(contact, &email_iterator) == CONTACTS_ERROR_NONE) { + contact_email_h email = NULL; + if(contact_email_iterator_next(&email_iterator, &email) == CONTACTS_ERROR_NONE) { + char *email_address = NULL; + if(contact_email_get_address(email, &email_address) == CONTACTS_ERROR_NONE) { + calendar_attendee_set_email(*attendee, email_address); + } + _calendar_safe_free(email_address); + } + } + + contact_number_iterator_h number_iterator = NULL; + if(contact_get_number_iterator(contact, &number_iterator) == CONTACTS_ERROR_NONE) { + contact_number_h number = NULL; + if(contact_number_iterator_next(&number_iterator, &number) == CONTACTS_ERROR_NONE) { + char *number_string = NULL; + if(contact_number_get_number(number, &number_string) == CONTACTS_ERROR_NONE) { + calendar_attendee_set_phone_number(*attendee, number_string); + } + _calendar_safe_free(number_string); + } + } + + contact_destroy(contact); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_remove_attendee(calendar_event_h event, calendar_attendee_h attendee) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(attendee); + + calendar_svc_value_set_int((cal_value*)attendee, CAL_VALUE_INT_DETAIL_DELETE, 1); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_attendee_iterator(calendar_event_h event, calendar_attendee_iterator_h *iterator) +{ + GList* attendee_list = NULL; + + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(iterator); + + //get attendee list first + calendar_svc_struct_get_list((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_LST_ATTENDEE_LIST, &attendee_list); + *iterator = (calendar_attendee_iterator_h)attendee_list; + return CALENDAR_ERROR_NONE; +} + +bool calendar_attendee_iterator_has_next(calendar_attendee_iterator_h iterator) +{ + if(iterator == NULL) { + return false; + } + + GList* glist = (GList*)iterator; + cal_value* value = (cal_value*)glist->data; + if(value == NULL) { + return false; + } + glist = _calendar_glist_next_until_not_deleted(glist); + if(glist == NULL) { + return false; + } + + return true; +} + +int calendar_attendee_iterator_next(calendar_attendee_iterator_h *iterator, calendar_attendee_h *attendee) +{ + CALENDAR_NULL_ARG_CHECK(iterator); + CALENDAR_NULL_ARG_CHECK(attendee); + + *attendee = NULL; + GList* glist = (GList*)*iterator; + glist = _calendar_glist_next_until_not_deleted(glist); + if(glist != NULL) + { *attendee = (calendar_attendee_h)(glist)->data; glist = g_list_next(glist); *iterator = (calendar_attendee_iterator_h)glist; - return CALENDAR_ERROR_NONE; + return CALENDAR_ERROR_NONE; + } + *iterator = NULL; + return CALENDAR_ERROR_ITERATOR_END; +} + +int calendar_event_free_event_array(calendar_event_h *event_array) +{ + int i; + CALENDAR_NULL_ARG_CHECK(event_array); + + for (i = 0; event_array[i]; i++) { + calendar_event_destroy(event_array[i]); + } + free(event_array); + return CALENDAR_ERROR_NONE; +} + +int calendar_event_free_modified_event_array(pcalendar_modified_event_s *modified_event_array) +{ + CALENDAR_NULL_ARG_CHECK(modified_event_array); + + int i = 0; + pcalendar_modified_event_s *p; + + p = modified_event_array; + + if (p) { + while (p[i]) { + free(p[i]); + i++; + } + free(p); + } + + return CALENDAR_ERROR_NONE; +} + +void __free_event_data(gpointer data, gpointer user_data) +{ + if (data) { + calendar_event_h *event = (calendar_event_h *)data; + if (event) free(event); + } +} + +static calendar_error_e _get_h_array_from_legacy_iter(const char fn[], + cal_iter* iter, calendar_event_h **event_h_array, int *length) +{ + int i; + int is_error = 0; + cal_struct *cs = NULL; + calendar_event_s *ce; + GList *cursor; + GList *l = NULL; + + if (iter == NULL) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + fn, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + + while (calendar_svc_iter_next(iter) == CAL_SUCCESS) + { + if(calendar_svc_iter_get_info(iter, &cs) != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + fn, CALENDAR_ERROR_OUT_OF_MEMORY); + is_error = 1; + break; + } + + ce = calloc(1, sizeof(calendar_event_s)); + if (ce == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + fn, CALENDAR_ERROR_OUT_OF_MEMORY); + is_error = 1; + } + + ce->event_legacy = (calendar_event_legacy_s *)cs; + l = g_list_append(l, ce); + cs = NULL; + } + calendar_svc_iter_remove(&iter); + + if (is_error) { + g_list_foreach(l, __free_event_data, NULL); + g_list_free(l); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + /* malloc array and fill data */ + *length = g_list_length(l); + + /* plus 1 to fill null pointer*/ + calendar_event_h *p = calloc(*length + 1, sizeof(calendar_event_h)); + if (p == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + fn,CALENDAR_ERROR_OUT_OF_MEMORY); + g_list_foreach(l, __free_event_data, NULL); + g_list_free(l); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + cursor = l; + for (i = 0; cursor; i++) { + p[i] = (calendar_event_h)cursor->data; + cursor = g_list_next(cursor); + } + g_list_free(l); + + /* fill NULL pointer to indicate end of array */ + p[i] = NULL; + *event_h_array = p; + + return CALENDAR_ERROR_NONE; +} + +static calendar_error_e _get_count_from_legacy_iter(const char fn[], + cal_iter* iter, int *count) +{ + int is_error = 0; + cal_struct *cs = NULL; + calendar_event_s *ce; + GList *l = NULL; + + if (iter == NULL) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + fn, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + + while (calendar_svc_iter_next(iter) == CAL_SUCCESS) + { + if(calendar_svc_iter_get_info(iter, &cs) != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + fn, CALENDAR_ERROR_OUT_OF_MEMORY); + is_error = 1; + break; + } + + ce = calloc(1, sizeof(calendar_event_s)); + if (ce == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + fn, CALENDAR_ERROR_OUT_OF_MEMORY); + is_error = 1; + } + + ce->event_legacy = (calendar_event_legacy_s *)cs; + l = g_list_append(l, ce); + cs = NULL; + } + calendar_svc_iter_remove(&iter); + + if (is_error) { + g_list_foreach(l, __free_event_data, NULL); + g_list_free(l); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + *count = g_list_length(l); + + g_list_free(l); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_search_event_by_calendar_book(int calendar_book_db_id, calendar_event_h **event_array, int *length) +{ + CALENDAR_NULL_ARG_CHECK(event_array); + CALENDAR_NULL_ARG_CHECK(length); + + int ret; + cal_iter *iter = NULL; + + ret = calendar_svc_get_all(0, calendar_book_db_id, CAL_STRUCT_SCHEDULE, &iter); + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + + if ((ret = _get_h_array_from_legacy_iter(__FUNCTION__, iter, event_array, length)) + != CALENDAR_ERROR_NONE) + return ret; + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_search_extend_instance_by_period(int calendar_book_db_id, + long long int period_start_time, long long int period_end_time, + calendar_event_h **event_array, int *length) +{ + CALENDAR_NULL_ARG_CHECK(event_array); + CALENDAR_NULL_ARG_CHECK(length); + + cal_iter *iter = NULL; + int ret = calendar_svc_event_get_normal_list_by_period(calendar_book_db_id, + CALS_LIST_PERIOD_NORMAL_OSP, + period_start_time, period_end_time, &iter); + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + + if ((ret = _get_h_array_from_legacy_iter(__FUNCTION__, iter, event_array, length)) + != CALENDAR_ERROR_NONE) + return ret; + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_search_all_day_extend_instance_by_period(int calendar_book_db_id, + int period_start_year, int period_start_month, int period_start_day, + int period_end_year, int period_end_month, int period_end_day, + calendar_event_h **event_array, int *length) +{ + CALENDAR_NULL_ARG_CHECK(event_array); + CALENDAR_NULL_ARG_CHECK(length); + + cal_iter *iter = NULL; + int ret = calendar_svc_event_get_allday_list_by_period(calendar_book_db_id, CALS_LIST_PERIOD_ALLDAY_OSP, + period_start_year, period_start_month, period_start_day, + period_end_year, period_end_month, period_end_day, &iter); + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + + if ((ret = _get_h_array_from_legacy_iter(__FUNCTION__, iter, event_array, length)) + != CALENDAR_ERROR_NONE) + return ret; + + return CALENDAR_ERROR_NONE; +} + +int calendar_add_db_changed_cb(calendar_db_changed_cb callback, calendar_db_changed_cb_type_e type, void* user_data) +{ + int ret; + CALENDAR_NULL_ARG_CHECK(callback); + + switch(type) { + case CALENDAR_DB_CHANGED_CB_TYPE_CALENDAR_BOOK: + ret = calendar_svc_subscribe_db_change(CAL_STRUCT_CALENDAR, callback, user_data); + break; + case CALENDAR_DB_CHANGED_CB_TYPE_EVENT: + ret = calendar_svc_subscribe_db_change(CAL_STRUCT_SCHEDULE, callback, user_data); + break; + case CALENDAR_DB_CHANGED_CB_TYPE_TODO: + ret = calendar_svc_subscribe_db_change(CAL_STRUCT_TODO, callback, user_data); + break; + default: + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + break; + } + + if(ret == CAL_SUCCESS) { + return CALENDAR_ERROR_NONE; + } + + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; +} + +int calendar_remove_db_changed_cb(calendar_db_changed_cb callback, calendar_db_changed_cb_type_e type) +{ + int ret; + CALENDAR_NULL_ARG_CHECK(callback); + + switch(type) { + case CALENDAR_DB_CHANGED_CB_TYPE_CALENDAR_BOOK: + ret = calendar_svc_unsubscribe_db_change(CAL_STRUCT_CALENDAR, callback); + break; + case CALENDAR_DB_CHANGED_CB_TYPE_EVENT: + ret = calendar_svc_unsubscribe_db_change(CAL_STRUCT_SCHEDULE, callback); + break; + case CALENDAR_DB_CHANGED_CB_TYPE_TODO: + ret = calendar_svc_unsubscribe_db_change(CAL_STRUCT_TODO, callback); + break; + default: + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + break; + } + + if(ret == CAL_SUCCESS) { + return CALENDAR_ERROR_NONE; + } + + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; +} + +int calendar_get_db_version(int* calendar_db_version) +{ + CALENDAR_NULL_ARG_CHECK(calendar_db_version); + + if (calendar_svc_begin_trans() != CAL_SUCCESS) { + LOGE("%s] CALENDAR_ERROR_NO_DATA(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + *calendar_db_version = calendar_svc_end_trans(true); + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_last_modified_time(calendar_event_h event, long long int *modified_time) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(modified_time); + + *modified_time = calendar_svc_struct_get_lli((cal_struct*)((calendar_event_s*)event)->event_legacy, + CALS_VALUE_LLI_LASTMOD); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_visibility(calendar_event_h event, calendar_visibility_e *visibility) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(visibility); + + *visibility = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)event)->event_legacy, + CAL_VALUE_INT_SENSITIVITY); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_set_visibility(calendar_event_h event, calendar_visibility_e visibility) +{ + int ret = CALENDAR_ERROR_NONE; + + CALENDAR_NULL_ARG_CHECK(event); + + ret = calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)event)->event_legacy, + CAL_VALUE_INT_SENSITIVITY, visibility); + if (ret != CAL_SUCCESS) + { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_search_event_by_version(int calendar_book_db_id, int calendar_db_version, + pcalendar_modified_event_s **modified_event_array, int *length) +{ + CALENDAR_NULL_ARG_CHECK(modified_event_array); + CALENDAR_NULL_ARG_CHECK(length); + + int i, ret; + int is_error = 0; + GList *l = NULL; + GList *cursor; + cal_iter *iter = NULL; + cal_struct *cs = NULL; + calendar_modified_event_s *cme; + pcalendar_modified_event_s *p; + *length = 0; + + ret = calendar_svc_event_get_changes(calendar_book_db_id, calendar_db_version, &iter); + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALLENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + + /* get event_db_id and append to glist */ + while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { + if(calendar_svc_iter_get_info(iter, &cs) != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + is_error = 1; + break; + } + + cme = calloc(1, sizeof(calendar_modified_event_s)); + if (cme == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + is_error = 1; + break; + } + + cme->modified_status = calendar_svc_struct_get_int(cs, CALS_STRUCT_UPDATED_INT_TYPE); + cme->event_db_id = calendar_svc_struct_get_int(cs, CALS_STRUCT_UPDATED_INT_ID); + cme->calendar_db_version = calendar_svc_struct_get_int(cs, + CALS_STRUCT_UPDATED_INT_VERSION); + cme->calendar_book_db_id = calendar_svc_struct_get_int(cs, + CALS_STRUCT_UPDATED_INT_CALENDAR_ID); + + l = g_list_append(l, cme); + calendar_svc_struct_free(&cs); + } + calendar_svc_iter_remove(&iter); + + if (is_error) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + g_list_free_full(l, free); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + /* if there is no data */ + if (l == NULL) { + *length = 0; + return CALENDAR_ERROR_NONE; + } + + /* malloc array and fill data */ + *length = g_list_length(l); + + /* plus 1 to fill null pointer*/ + p = calloc(*length + 1, sizeof(pcalendar_modified_event_s)); + if (p == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__,CALENDAR_ERROR_OUT_OF_MEMORY); + g_list_free_full(l, free); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + cursor = l; + for (i = 0; cursor; i++) { + p[i] = (calendar_modified_event_s*)(cursor->data); + cursor = g_list_next(cursor); + } + /* free list after allocation */ + g_list_free(l); + + /* fill NULL pointer to indicate end of array */ + p[i] = NULL; + + *modified_event_array = p; + return CALENDAR_ERROR_NONE; +} + +int calendar_event_get_timezone(calendar_event_h event, char** timezone_name) +{ + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(timezone_name); + + *timezone_name = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)event)->event_legacy, + CALS_VALUE_TXT_DTSTART_TZID)); + + return CALENDAR_ERROR_NONE; +} + +int calendar_event_set_timezone(calendar_event_h event, const char* timezone_name) +{ + int ret = CALENDAR_ERROR_NONE; + + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(timezone_name); + + ret = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)event)->event_legacy, CALS_VALUE_TXT_DTSTART_TZID, timezone_name); + if (ret != CAL_SUCCESS) + { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - *iterator = NULL; - return CALENDAR_ERROR_ITERATOR_END; + + return CALENDAR_ERROR_NONE; } -//Provide iterator instead of event -int calendar_foreach_event_from_db(calendar_foreach_query_event_cb callback, void *user_data) -{ - CALENDAR_NULL_ARG_CHECK(callback); - return _calendar_event_foreach(callback, ALL_ACCOUNT_ID, ALL_CALENDAR_ID, user_data); +int calendar_event_get_event_array_from_vcalendar(const char *vcalendar_stream, calendar_event_h **event_array, int *length) +{ + CALENDAR_NULL_ARG_CHECK(event_array); + CALENDAR_NULL_ARG_CHECK(vcalendar_stream); + + int i, ret; + GList *schedules = NULL; + GList *cursor; + calendar_event_s *ces; + calendar_event_h *ceh; + + ret = calendar_svc_read_schedules(vcalendar_stream, &schedules); + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALENDAR_ERROR_READ_SCHEDULES(errno:%d)\n", + __FUNCTION__, ret); + return CALENDAR_ERROR_DB_FAILED; + } + + if (schedules == NULL) { + LOGW("[%s] CALENDAR_ERROR_NO_SCHEDULES", __FUNCTION__); + *event_array = NULL; + *length = 0; + return CALENDAR_ERROR_NONE; + } + + *length = g_list_length(schedules); + + ceh = calloc(*length + 1, sizeof(calendar_event_h)); + if (ceh == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + g_list_free(schedules); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + /* allocate list to array */ + cursor = schedules; + for (i = 0; cursor; i++) { + ces = calloc(1, sizeof(calendar_event_s)); + if (ces == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + break; + } + + ceh[i] = (calendar_event_h)ces; + ces->event_legacy = (calendar_event_legacy_s *)cursor->data; + cursor = g_list_next(cursor); + } + g_list_free(schedules); + + ceh[i] = NULL; + + *event_array = ceh; + return CALENDAR_ERROR_NONE; } -int calendar_query_event_by_calendar(calendar_foreach_query_event_cb callback, int calendar_db_id, void *user_data) +int calendar_event_get_vcalendar_from_db(int *event_db_id_array, int length, char **vcalendar_stream) { - CALENDAR_NULL_ARG_CHECK(callback); - CONTACTS_INVALID_ARG_CHECK(calendar_db_id < 1); + CALENDAR_NULL_ARG_CHECK(event_db_id_array); + CALENDAR_NULL_ARG_CHECK(vcalendar_stream); + + int i, ret; + GList *schedules = NULL; + cal_struct *cs = NULL; + + if (length < 1) { + LOGD("[%s] EVENT_DB_LENGTH is 0", __FUNCTION__); + return CALENDAR_ERROR_NONE; + } + + for (i = 0; i < length; i++) { + ret = calendar_svc_get(CAL_STRUCT_SCHEDULE, event_db_id_array[i], NULL, &cs); + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALENDAR_ERROR_GET_EVENT(errno:%d)", __FUNCTION__, ret); + break; + } + if (cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_GET_EVENT", __FUNCTION__); + break; + } + schedules = g_list_append(schedules, cs); + } + + ret = calendar_svc_write_schedules(schedules, vcalendar_stream); + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALENDAR_ERROR_WRITE_SCHEDDULES", __FUNCTION__); + return CALENDAR_ERROR_DB_FAILED; + } + + return CALENDAR_ERROR_NONE; +} + +int calendar_todo_create(calendar_todo_h *todo) +{ + CALENDAR_NULL_ARG_CHECK(todo); + + *todo = malloc(sizeof(calendar_event_s)); + if (*todo == NULL) + { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + (*(calendar_event_s**)todo)->event_legacy = (calendar_event_legacy_s*)calendar_svc_struct_new(CAL_STRUCT_TODO); + + if ((*(calendar_event_s**)todo)->event_legacy == NULL) + { + free(*todo); + *todo = NULL; + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + return CALENDAR_ERROR_NONE; +} + +int calendar_todo_destroy(calendar_todo_h todo) +{ + int ret = CALENDAR_ERROR_NONE; + CALENDAR_NULL_ARG_CHECK(todo); + + ret = calendar_svc_struct_free((cal_struct **)&((calendar_event_s*)todo)->event_legacy); + + if (ret != CAL_SUCCESS) + { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + ret = CALENDAR_ERROR_INVALID_PARAMETER; + } else { + free(todo); + ret = CALENDAR_ERROR_NONE; + } + + return ret; +} + +int calendar_todo_get_db_id(calendar_todo_h todo, int *db_id) +{ + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(db_id); + + *db_id = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, (char*)CAL_VALUE_INT_INDEX); + if(*db_id < 0) { + *db_id = 0; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_todo_get_calendar_book_db_id(calendar_todo_h todo, int *calendar_db_id) +{ + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(calendar_db_id); + + *calendar_db_id = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, + (char*)CAL_VALUE_INT_CALENDAR_ID); + if(*calendar_db_id < 0) + *calendar_db_id = 0; + return CALENDAR_ERROR_NONE; +} + +int calendar_todo_insert_to_db(calendar_todo_h todo, int calendar_db_id, int *todo_id) +{ + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(todo_id); + + int ret = CALENDAR_ERROR_NONE; + int account_db_id = _calendar_get_account_db_id(calendar_db_id); - CONTACTS_INVALID_ARG_CHECK(account_db_id == -2); - - return _calendar_event_foreach(callback, account_db_id, calendar_db_id, user_data); + CALENDAR_INVALID_ARG_CHECK(account_db_id == -2); + + calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_INT_CALENDAR_ID, calendar_db_id); + calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_INT_ACCOUNT_ID, account_db_id); + + ret = calendar_svc_insert((cal_struct*)((calendar_event_s*)todo)->event_legacy); + if (ret < 0) + { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + *todo_id = ret; + return CALENDAR_ERROR_NONE; } -int calendar_query_event_by_subject(calendar_foreach_query_event_cb callback, int calendar_db_id, const char *subject_to_find, void* user_data) +int calendar_todo_delete_from_db(int todo_id) { - CALENDAR_NULL_ARG_CHECK(callback); - CALENDAR_NULL_ARG_CHECK(subject_to_find); - return _calendar_event_query(callback, calendar_db_id, CAL_VALUE_TXT_SUMMARY, subject_to_find, user_data); + if(todo_id <= 0) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + int ret = CALENDAR_ERROR_NONE; + + ret = calendar_svc_delete(CAL_STRUCT_TODO, todo_id); + + if (ret == CAL_SUCCESS) { + ret = CALENDAR_ERROR_NONE; + } + else { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + ret = CALENDAR_ERROR_DB_FAILED; + } + + return ret; } -int calendar_query_event_by_description(calendar_foreach_query_event_cb callback, int calendar_db_id, const char *description_to_find, void* user_data) +int calendar_todo_update_to_db(calendar_todo_h todo) { - CALENDAR_NULL_ARG_CHECK(callback); - CALENDAR_NULL_ARG_CHECK(description_to_find); - return _calendar_event_query(callback, calendar_db_id, CAL_VALUE_TXT_DESCRIPTION, description_to_find, user_data); + int ret = CALENDAR_ERROR_NONE; + + CALENDAR_NULL_ARG_CHECK(todo); + if((cal_struct*)((calendar_event_s*)todo)->event_legacy == NULL) { + LOGE("[%s] CALENDAR_ERROR_NO_DATA(0x%08x)", __FUNCTION__, CALENDAR_ERROR_NO_DATA); + return CALENDAR_ERROR_NO_DATA; + } + + ret = calendar_svc_update((cal_struct*)((calendar_event_s*)todo)->event_legacy); + + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + + return CALENDAR_ERROR_NONE; +} + +int calendar_todo_get_from_db(int todo_id, calendar_todo_h *todo) +{ + CALENDAR_NULL_ARG_CHECK(todo); + *todo = malloc(sizeof(calendar_event_s)); + if (*todo == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + memset(*todo, 0, sizeof(calendar_event_s)); + if(calendar_svc_get(CAL_STRUCT_TODO, todo_id, NULL, (cal_struct**)&(*(calendar_event_s**)todo)->event_legacy) != CAL_SUCCESS) { + free(*todo); + *todo = NULL; + + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_todo_get_priority(calendar_todo_h todo, calendar_todo_priority_e *priority) +{ + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(priority); + + *priority = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, + CAL_VALUE_INT_PRIORITY); + + return CALENDAR_ERROR_NONE; +} + +int calendar_todo_set_priority(calendar_todo_h todo, calendar_todo_priority_e priority) +{ + int ret = CALENDAR_ERROR_NONE; + + CALENDAR_NULL_ARG_CHECK(todo); + + ret = calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, + CAL_VALUE_INT_PRIORITY, priority); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + return CALENDAR_ERROR_NONE; +} + +int calendar_todo_get_status(calendar_todo_h todo, calendar_todo_status_e *status) +{ + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(status); + + *status = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, + CAL_VALUE_INT_TASK_STATUS); + + return CALENDAR_ERROR_NONE; +} + +int calendar_todo_set_status(calendar_todo_h todo, calendar_todo_status_e status) +{ + int ret = CALENDAR_ERROR_NONE; + + CALENDAR_NULL_ARG_CHECK(todo); + + ret = calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, + CAL_VALUE_INT_TASK_STATUS, status); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + return CALENDAR_ERROR_NONE; +} + +int calendar_todo_get_visibility(calendar_todo_h todo, calendar_visibility_e *visibility) +{ + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(visibility); + + *visibility = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, + CAL_VALUE_INT_SENSITIVITY); + + return CALENDAR_ERROR_NONE; +} + +int calendar_todo_set_visibility(calendar_todo_h todo, calendar_visibility_e visibility) +{ + int ret = CALENDAR_ERROR_NONE; + + CALENDAR_NULL_ARG_CHECK(todo); + + ret = calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, + CAL_VALUE_INT_SENSITIVITY, visibility); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + return CALENDAR_ERROR_NONE; } -int calendar_query_event_by_location(calendar_foreach_query_event_cb callback, int calendar_db_id, const char *location_to_find, void* user_data) +int calendar_todo_get_subject(calendar_todo_h todo, char **subject) { - CALENDAR_NULL_ARG_CHECK(callback); - CALENDAR_NULL_ARG_CHECK(location_to_find); - return _calendar_event_query(callback, calendar_db_id, CAL_VALUE_TXT_LOCATION, location_to_find, user_data); + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(subject); + + *subject = NULL; + *subject = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_TXT_SUMMARY)); + + return CALENDAR_ERROR_NONE; } -int calendar_query_event_by_period(calendar_foreach_query_event_cb callback, int calendar_db_id, struct tm start_time, struct tm end_time, void* user_data) +int calendar_todo_set_subject(calendar_todo_h todo, const char *subject) { - CALENDAR_NULL_ARG_CHECK(callback); - int ret_val = 0; - cal_iter* iter = NULL; - bool callback_return = true; - - int account_id = _calendar_get_account_db_id(calendar_db_id); - CONTACTS_INVALID_ARG_CHECK(account_id == -2); - - //fetch from DB - ret_val = calendar_svc_get_event_list_by_tm_period (account_id, calendar_db_id, &start_time, &end_time, &iter); + int ret = CALENDAR_ERROR_NONE; + CALENDAR_NULL_ARG_CHECK(todo); - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; + ret = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_TXT_SUMMARY, subject); + + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - - if (iter == NULL) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; - } else { - while (calendar_svc_iter_next(iter) == CAL_SUCCESS) - { - calendar_event_s cal_event_from_db = {0,}; - if(calendar_svc_iter_get_info(iter, (cal_struct**)&cal_event_from_db.event_legacy) != CAL_SUCCESS) { - calendar_svc_iter_remove(&iter); - return CALENDAR_ERROR_NONE; // consider this as no data - } - - if(cal_event_from_db.event_legacy == NULL) { - calendar_svc_iter_remove(&iter); - break; - } - - //execute callback - callback_return = callback((calendar_event_h)&cal_event_from_db, user_data); - calendar_svc_struct_free((cal_struct**)&cal_event_from_db.event_legacy); - if(callback_return == false) { - break; - } - } - calendar_svc_iter_remove(&iter); + return CALENDAR_ERROR_NONE; +} - return CALENDAR_ERROR_NONE; - } +int calendar_todo_get_categories(calendar_todo_h todo, char **categories) +{ + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(categories); + + *categories = NULL; + *categories = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_TXT_CATEGORIES)); return CALENDAR_ERROR_NONE; } -int calendar_set_db_changed_cb(calendar_db_changed_cb callback, void* user_data) +int calendar_todo_set_categories(calendar_todo_h todo, const char *categories) { - CALENDAR_NULL_ARG_CHECK(callback); - if(calendar_svc_subscribe_change(callback, user_data) == CAL_SUCCESS) { - return CALENDAR_ERROR_NONE; + int ret = CALENDAR_ERROR_NONE; + CALENDAR_NULL_ARG_CHECK(todo); + + ret = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_TXT_CATEGORIES, categories); + + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; + + return CALENDAR_ERROR_NONE; } -int calendar_unset_db_changed_cb(calendar_db_changed_cb callback) +int calendar_todo_get_description(calendar_todo_h todo, char **description) { - CALENDAR_NULL_ARG_CHECK(callback); - if(calendar_svc_unsubscribe_change(callback) == CAL_SUCCESS) { - return CALENDAR_ERROR_NONE; - } - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(description); + + *description = _calendar_safe_strdup( + calendar_svc_struct_get_str( + (cal_struct*)((calendar_event_s*)todo)->event_legacy, + CAL_VALUE_TXT_DESCRIPTION) + ); + + return CALENDAR_ERROR_NONE; } -int calendar_event_get_last_modified_time(calendar_event_h event, struct tm *reviedtime) +int calendar_todo_set_description(calendar_todo_h todo, const char *description) { - struct tm *tmp_date = NULL; + int ret = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(reviedtime); + CALENDAR_NULL_ARG_CHECK(todo); - tmp_date = calendar_svc_struct_get_tm((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_GMT_LAST_MODIFIED_TIME, CAL_TZ_FLAG_LOCAL); - - if (tmp_date == NULL) { - LOGE("[%s] CALENDAR_ERROR_NO_DATA(0x%08x)", __FUNCTION__, CALENDAR_ERROR_NO_DATA); - return CALENDAR_ERROR_NO_DATA; - } + ret = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_TXT_DESCRIPTION, description); - *reviedtime = *tmp_date; + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } return CALENDAR_ERROR_NONE; } -int calendar_event_get_visibility(calendar_event_h event, calendar_visibility_e *visibility) +int calendar_todo_get_location(calendar_todo_h todo, char **location) { - CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(visibility); + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(location); - *visibility = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_INT_SENSITIVITY); + *location = _calendar_safe_strdup( + calendar_svc_struct_get_str( + (cal_struct*)((calendar_event_s*)todo)->event_legacy, + CAL_VALUE_TXT_LOCATION) + ); return CALENDAR_ERROR_NONE; } -int calendar_event_set_visibility(calendar_event_h event, calendar_visibility_e visibility) +int calendar_todo_set_location(calendar_todo_h todo, const char *location) { - int ret_val = CALENDAR_ERROR_NONE; + int ret = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(todo); - ret_val = calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_INT_SENSITIVITY, visibility); - if (ret_val != CAL_SUCCESS) - { + ret = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, + CAL_VALUE_TXT_LOCATION, location); + + if (ret != CAL_SUCCESS) { LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } @@ -1151,81 +2849,37 @@ int calendar_event_set_visibility(calendar_event_h event, calendar_visibility_e return CALENDAR_ERROR_NONE; } -int calendar_query_event_by_time_last_modified(calendar_foreach_query_event_cb callback, int calendar_db_id, struct tm time, void *user_data) +int calendar_todo_get_last_modified_time(calendar_todo_h todo, long long int *modified_time) { - CALENDAR_NULL_ARG_CHECK(callback); - int ret_val = 0; - cal_iter* iter = NULL; - bool callback_return = true; - - int account_id = _calendar_get_account_db_id(calendar_db_id); - CONTACTS_INVALID_ARG_CHECK(account_id == -2); - - //fetch from DB - time_t timestamp = mktime(&time); - ret_val = calendar_svc_get_updated_event_list (account_id, timestamp, &iter); - - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; - } - - if (iter == NULL) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; - } else { - while (calendar_svc_iter_next(iter) == CAL_SUCCESS) - { - calendar_event_s cal_event_from_db = {0,}; - if(calendar_svc_iter_get_info(iter, (cal_struct**)&cal_event_from_db.event_legacy) != CAL_SUCCESS) { - calendar_svc_iter_remove(&iter); - return CALENDAR_ERROR_NONE; // consider this as no data - } - - if(cal_event_from_db.event_legacy == NULL) { - calendar_svc_iter_remove(&iter); - break; - } - - //execute callback - callback_return = callback((calendar_event_h)&cal_event_from_db, user_data); + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(modified_time); - calendar_svc_struct_free((cal_struct**)&cal_event_from_db.event_legacy); - if(callback_return == false) { - break; - } - } - calendar_svc_iter_remove(&iter); - return CALENDAR_ERROR_NONE; - } + *modified_time = calendar_svc_struct_get_lli((cal_struct*)((calendar_event_s*)todo)->event_legacy, + CALS_VALUE_LLI_LASTMOD); return CALENDAR_ERROR_NONE; } -int calendar_event_get_timezone(calendar_event_h event, char** timezone_name) +int calendar_todo_get_timezone(calendar_todo_h todo, char** timezone_name) { - CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(todo); CALENDAR_NULL_ARG_CHECK(timezone_name); -// *timezone_offset = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)event)->event_legacy, -// CAL_VALUE_INT_TIMEZONE); - *timezone_name = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)event)->event_legacy, - CAL_VALUE_TXT_TZ_NAME)); + *timezone_name = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, + CALS_VALUE_TXT_DTSTART_TZID)); return CALENDAR_ERROR_NONE; } -int calendar_event_set_timezone(calendar_event_h event, const char* timezone_name) +int calendar_todo_set_timezone(calendar_todo_h todo, const char* timezone_name) { - int ret_val = CALENDAR_ERROR_NONE; + int ret = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(todo); CALENDAR_NULL_ARG_CHECK(timezone_name); - ret_val = calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_INT_TIMEZONE, 0); - ret_val = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_TXT_TZ_NAME, timezone_name); - if (ret_val != CAL_SUCCESS) - { + ret = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, CALS_VALUE_TXT_DTSTART_TZID, timezone_name); + if (ret != CAL_SUCCESS) { LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } @@ -1233,1042 +2887,837 @@ int calendar_event_set_timezone(calendar_event_h event, const char* timezone_nam return CALENDAR_ERROR_NONE; } -typedef struct _calendar_time_zone_st _calendar_time_zone_s; -struct _calendar_time_zone_st -{ - char* city; - char* country; - char* gmt; - char* tz_path; -}; -const _calendar_time_zone_s _calendar_time_zone_array[] = -{ - {"Abidjan", "Ivory Coast", "GMT+0", "Africa/Abidjan"}, - {"Abu Dhabi", "United Arab Emirates", "GMT+4", "Asia/Dubai"}, - {"Accra", "Ghana", "GMT-10", "Africa/Accra"}, - {"Addis Ababa", "Ethiopia", "GMT+3", "Africa/Addis_Ababa"}, - {"Adelaide", "Australia", "GMT+9:30", "Australia/Adelaide"}, - {"Alaska", "United States of America", "GMT-9", "America/Nome"}, - {"Algiers", "Algeria", "GMT+1", "Africa/Algiers"}, - {"Almaty", "Kazakhstan", "GMT+6", "Asia/Almaty"}, - {"Ambon", "Indonesia", "GMT+1", "Asia/Jayapura"}, - {"Amman", "Jordan", "GMT+2", "Asia/Amman"}, - {"Amsterdam", "Netherlands", "GMT+1", "Europe/Amsterdam"}, - {"Anadyr", "Russia ", "GMT+12", "Asia/Anadyr"}, - {"Anchorage", "United States of America", "GMT-9", "America/Anchorage"}, - {"Ankara", "Turkey", "GMT+2", "Asia/Istanbul"}, - {"Antananarivo", "Madagascar", "GMT+3", "Indian/Antananarivo"}, - {"Ashgabat", "Turkmenistan", "GMT+5", "Asia/Ashgabat"}, - {"Asmera", "Eritrea", "GMT+3", "Africa/Asmara"/* not in zone.tab */ }, - {"Astana", "Kazakhstan", "GMT+6", "Asia/Almaty"/* not in zone.tab */ }, - {"Asuncion", "Paraguay", "GMT-4", "America/Asuncion"}, - {"Athens", "Greece", "GMT+2", "Europe/Athens"}, - {"Auckland", "New Zealand", "GMT+12", "Pacific/Auckland"}, - {"Austin", "United States of America", "GMT-6", "CST6CDT"}, - {"Azores", "Portugal", "GMT-1", "Atlantic/Azores"}, - {"Baghdad", "Iraq", "GMT+3", "Asia/Baghdad"}, - {"Baku", "Azerbaijan", "GMT+4", "Asia/Baku"}, - {"Baltimore", "United States of America", "GMT-5", "EST5EDT"}, - {"Bamako", "Mali", "GMT+0", "Africa/Bamako"}, - {"Bangkok", "Thailand", "GMT+7", "Asia/Bangkok"}, - {"Bangui", "Central African Republic", "GMT+1", "Africa/Bangui"}, - {"Barcelona", "Spain", "GMT+2", "Europe/Madrid"}, - {"Bari", "Italy", "GMT+1", "Europe/Rome"}, - {"Basse-Terre", "Guadeloupe", "GMT-4", "America/Guadeloupe"}, - {"Beijing", "China", "GMT+8", "Asia/Shanghai"}, - {"Beirut", "Lebanon", "GMT+2", "Asia/Beirut"}, - {"Belgrade", "Serbia", "GMT+1", "Europe/Belgrade"}, - {"Belize City", "Belize", "GMT-6", "America/Belize"}, - {"Berlin", "Germany", "GMT+1", "Europe/Berlin"}, - {"Bern", "Switzerland", "GMT+1", "Europe/Zurich"}, - {"Bishkek", "Kyrgyzstan", "GMT+6", "Asia/Bishkek"}, - {"Bissau", "Guinea Bissau", "GMT+0", "Africa/Bissau"}, - {"Bogota", "Colombia", "GMT-5", "America/Bogota"}, - {"Bologna", "Italy", "GMT+1", "Europe/Rome"}, - {"Boston", "United States of America", "GMT-5", "EST5EDT"}, - {"Brasilia", "Brazil", "GMT-3", "America/Sao_Paulo"}, - {"Bratislava", "Slovakia", "GMT+2", "Europe/Bratislava"}, - {"Bridgetown", "Barbados", "GMT-4", "America/Barbados"}, - {"Brisbane", "Australia", "GMT+10", "Australia/Brisbane"}, - {"Brussels", "Belgium", "GMT+1", "Europe/Brussels"}, - {"Bucharest", "Romania", "GMT+3", "Europe/Bucharest"}, - {"Budapest", "Hungary", "GMT+1", "Europe/Budapest"}, - {"Buenos Aires", "Argentina", "GMT-3", "America/Argentina/Buenos_Aires"}, - {"Cairo", "Egypt", "GMT+2", "Africa/Cairo"}, - {"Calgary", "Canada", "GMT-7", "MST7MDT"}, - {"Canary Islands", "Spain", "GMT+0", "Atlantic/Canary"}, - {"Canberra", "Australia", "GMT+10", "Australia/Canberra"}, - {"Canton", "China", "GMT+8", "Asia/Shanghai"}, - {"Cape Town", "Republic of South Africa", "GMT+2", "Africa/Johannesburg"}, - {"Caracas", "Venezuela", "GMT-4:30", "America/Caracas"}, - {"Cardiff", "Wales", "GMT+0", "Europe/London"}, - {"Casablanca", "Morocco", "GMT+0", "Africa/Casablanca"}, - {"Catanzaro", "Italy", "GMT+1", "Europe/Rome"}, - {"Cayenne", "French Guiana", "GMT-3", "America/Cayenne"}, - {"Charlotte", "United States of America", "GMT-5", "EST5EDT"}, - {"Charlotte Amalie", "United States Virgin Islands ", "GMT-5:30", "America/St_Thomas"}, - {"Chelyabinsk", "Russia ", "GMT+5", "Asia/Yekaterinburg"}, - {"Chennai", "India", "GMT+5:30", "Asia/Kolkata"}, - {"Chicago", "United States of America", "GMT-6", "America/Chicago"}, - {"Chisinau", "Moldova", "GMT+2", "Europe/Chisinau"}, - {"Chita", "Russia", "GMT+9", "Asia/Yakutsk"}, - {"Cleveland", "United States of America", "GMT-5", "EST5EDT"}, - {"Colombo", "Sri Lanka", "GMT+5:30", "Asia/Colombo"}, - {"Columbus", "United States of America", "GMT-5", "EST5EDT"}, - {"Conakry", "Guinea", "GMT+1", "Africa/Conakry"}, - {"Copenhagen", "Denmark", "GMT+1", "Europe/Copenhagen"}, - {"Cork", "Ireland", "GMT+0", "Europe/Dublin"}, - {"Crotone", "Italy", "GMT+1", "Europe/Rome"}, - {"Dakar", "Senegal", "GMT+0", "Africa/Dakar"}, - {"Dallas", "United States of America", "GMT-6", "CST6CDT"}, - {"Damascus", "Syria", "GMT+2", "Asia/Damascus"}, - {"Dar es Salaam", "Tanzania", "GMT+3", "Africa/Dar_es_Salaam"}, - {"Darwin", "Australia", "GMT+9:30", "Australia/Darwin"}, - {"Delhi", "India", "GMT+5:30", "Asia/Kolkata"}, - {"Denpasar", "Indonesia", "GMT+8", "Asia/Makassar"}, - {"Denver", "United States of America", "GMT-7", "America/Denver"}, - {"Detroit", "United States of America", "GMT-5", "America/Detroit"}, - {"Dhaka", "Bangladesh", "GMT+6", "Asia/Dhaka"}, - {"Diego Garcia", "United Kingdom", "GMT+5", "Indian/Chagos"/* not in zone.tab */ }, - {"Djibouti", "Djibouti", "GMT+3", "Africa/Djibouti"}, - {"Doha", "Qatar", "GMT+3", "Asia/Qatar"}, - {"Douala", "Cameroon", "GMT+1", "Africa/Douala"}, - {"Dubai", "United Arab Emirates", "GMT+4", "Asia/Dubai"}, - {"Dublin", "Ireland", "GMT+0", "Europe/Dublin"}, - {"Dushanbe", "Tajikistan", "GMT+5", "Asia/Dushanbe"}, - {"Easter Island", "Chile", "GMT-6", "Pacific/Easter"}, - {"Edinburgh", "Scotland", "GMT+0", "Europe/London"}, - {"El Paso", "United States of America", "GMT-7", "MST7MDT"}, - {"Florence", "Italy", "GMT+1", "Europe/Rome"}, - {"Fort-de-France", "Martinique", "GMT-4", "America/Martinique"}, - {"Freetown", "Sierra Leone", "GMT+0", "Africa/Freetown"}, - {"Gaborone", "Botswana", "GMT+2", "Africa/Gaborone"}, - {"Galapagos Islands", "Ecuador", "GMT-7", "Pacific/Galapagos"}, - {"Geneva", "Switzerland", "GMT+1", "Europe/Paris"}, - {"Genoa", "Italy", "GMT+1", "Europe/Rome"}, - {"Georgetown", "Guyana", "GMT-4", "America/Guyana"}, - {"Grytviken", "South Georgia", "GMT-2", "Atlantic/South_Georgia"}, - {"Guam", "United States of America", "GMT+10", "Pacific/Guam"}, - {"Guatemala City", "Guatemala", "GMT-6", "America/Guatemala"}, - {"Gustavia", "Saint Barthelemy", "GMT-4", "America/Antigua"}, - {"Halifax", "Canada", "GMT-4", "America/Halifax"}, - {"Hamburg", "Germany", "GMT+1", "Europe/Berlin"}, - {"Hanoi", "Vietnam", "GMT+7", "Asia/Ho_Chi_Minh"}, - {"Harare", "Zimbabwe", "GMT+2", "Africa/Harare"}, - {"Havana", "Cuba", "GMT-5", "America/Havana"}, - {"Hawaii", "United States of America", "GMT-10", "Pacific/Honolulu"}, - {"Helsinki", "Finland", "GMT+2", "Europe/Helsinki"}, - {"Hobart", "Australia", "GMT+10", "Australia/Hobart"}, - {"Hong Kong", "China", "GMT+8", "Asia/Hong_Kong"}, - {"Honolulu", "United States of America", "GMT-10", "Pacific/Honolulu"}, - {"Houston", "United States of America", "GMT-6", "CST6CDT"}, - {"Hovd", "Mongolia", "GMT+8", "Asia/Hovd"}, - {"Indianapolis", "United States of America", "GMT-5", "America/Indiana/Indianapolis"}, - {"Irkutsk", "Russia ", "GMT+8", "Asia/Irkutsk"}, - {"Islamabad", "Pakistan", "GMT+5", "Asia/Karachi"}, - {"Istanbul", "Turkey", "GMT+2", "Europe/Istanbul"}, - {"Izhevsk", "Russia ", "GMT+4", "Europe/Moscow"}, - {"Jakarta", "Indonesia", "GMT+7", "Asia/Jakarta"}, - {"Jeddah", "Saudi Arabia", "GMT+3", "Asia/Riyadh"}, - {"Jerusalem", "Israel", "GMT+2", "Asia/Jerusalem"}, - {"Johannesburg", "South Africa", "GMT+2", "Africa/Johannesburg"}, - {"Kabul", "Afghanistan", "GMT+4:30", "Asia/Kabul"}, - {"Kaliningrad", "Russia", "GMT+2", "Europe/Kaliningrad"}, - {"Kamchatka", "Russia ", "GMT+12", "Asia/Kamchatka"}, - {"Kampala", "Uganda", "GMT+3", "Africa/Kampala"}, - {"Karachi", "Pakistan", "GMT+5", "Asia/Karachi"}, - {"Kathmandu", "Nepal", "GMT+5:45", "Asia/Kathmandu"}, - {"Khabarovsk", "Russia ", "GMT+10", "Asia/Vladivostok"}, - {"Kharkiv", "Ukraine", "GMT+2", "Europe/Kiev"}, - {"Khartoum", "Sudan", "GMT+3", "Africa/Khartoum"}, - {"Kiev", "Ukraine", "GMT+2", "Europe/Kiev"}, - {"Kingston", "Canada", "GMT-5", "America/Toronto"}, /* not in zone.tab */ - {"Kingston", "Jamaica", "GMT-5", "America/Jamaica"}, - {"Kinshasa", "Democratic Republic of the Congo", "GMT+1", "Africa/Kinshasa"}, - {"Kolkata", "India", "GMT+5:30", "Asia/Kolkata"}, - {"Krasnoyarsk", "Russia ", "GMT+7", "Asia/Krasnoyarsk"}, - {"Kuala Lumpur", "Malaysia", "GMT+8", "Asia/Kuala_Lumpur"}, - {"Kuwait", "Kuwait", "GMT+3", "Asia/Kuwait"}, - {"Kyiv", "Ukraine", "GMT+2", "Europe/Kiev"/* not in zone.tab */ }, - {"Los Angeles", "United States of America", "GMT-7", "America/Los_Angeles"}, - {"La Paz", "Bolivia", "GMT-4", "America/La_Paz"}, - {"Lagos", "Nigeria", "GMT+1", "Africa/Lagos"}, - {"Las Vegas", "United States of America", "GMT-8", "PST8PDT"}, - {"Lima", "Peru", "GMT-5", "America/Lima"}, - {"Lisbon", "Portugal", "GMT+0", "Europe/Lisbon"}, - {"Ljubljana", "Slovakia", "GMT+1", "Europe/Ljubljana"}, - {"London", "United Kingdom", "GMT+0", "Europe/London"}, - {"Longhua", "China", "GMT+8", "Asia/Shanghai"}, - {"Louisville", "United States of America", "GMT-5", "America/Kentucky/Louisville"}, - {"Luanda", "Angola", "GMT+1", "Africa/Luanda"}, - {"Lubumbashi", "Democratic Republic of the Congo", "GMT+2", "Africa/Lubumbashi"}, - {"Lusaka", "Zambia", "GMT+2", "Africa/Lusaka"}, - {"Luxembourg", "Luxembourg", "GMT+1", "Europe/Luxembourg"}, - {"Lviv", "Ukraine", "GMT+2", "Europe/Kiev"}, - {"Macau", "China", "GMT+8", "Asia/Macau"}, - {"Madrid", "Spain", "GMT+2", "Europe/Madrid"}, - {"Magadan", "Russia ", "GMT+11", "Asia/Magadan"}, - {"Malabo", "Equaorial Guinea", "GMT+1", "Africa/Malabo"}, - {"Male", "Maldives", "GMT+5", "Indian/Maldives"}, - {"Managua", "Nicaragua", "GMT-6", "America/Managua"}, - {"Manama", "Bahrain", "GMT+3", "Asia/Bahrain"}, - {"Manila", "Philippines", "GMT+8", "Asia/Manila"}, - {"Maputo", "Mozambique", "GMT+2", "Africa/Maputo"}, - {"Marigot", "Saint Martin", "GMT-4", "America/Marigot"}, - {"Mazatlan", "Mexico", "GMT-7", "America/Mazatlan"}, - {"Mecca", "Saudi Arabia", "GMT+3", "Asia/Riyadh"}, - {"Melbourne", "Australia", "GMT+10", "Australia/Melbourne"}, - {"Memphis", "United States of America", "GMT-6", "CST6CDT"}, - {"Messina", "Italy", "GMT+1", "Europe/Rome"}, - {"Mexico City", "Mexico", "GMT-6", "America/Mexico_City"}, - {"Miami", "United States of America", "GMT-5", "EST5EDT"}, - {"Mid-Atlantic", "United States of America", "GMT-2", "America/New_York"/* not in zone.tab */ }, - {"Midway Atoll", "United States of America", "GMT-11", "Pacific/Midway"}, - {"Milan", "Italy", "GMT+1", "Europe/Rome"}, - {"Milwaukee", "United States of America", "GMT-6", "CST6CDT"}, - {"Minsk", "Belarus", "GMT+2", "Europe/Minsk"}, - {"Mogadishu", "Somalia", "GMT+2", "Africa/Mogadishu"}, - {"Monrovia", "Liberia", "GMT+0", "Africa/Monrovia"}, - {"Montevideo", "Uruguay", "GMT-3", "America/Montevideo"}, - {"Montreal", "Canada", "GMT-5", "America/Montreal"}, - {"Moscow", "Russia ", "GMT+3", "Europe/Moscow"}, - {"Mumbai", "India", "GMT+5:30", "Asia/Kolkata"}, - {"Munich", "Germany", "GMT+1", "Europe/Berlin"}, - {"Muscat", "Oman", "GMT+4", "Asia/Muscat"}, - {"Nairobi", "Kenya", "GMT+3", "Africa/Nairobi"}, - {"Naples", "Italy", "GMT+1", "Europe/Rome"}, - {"Naters", "Switzerland", "GMT+1", "Europe/Zurich"}, - {"Ndjamena", "Chad", "GMT+1", "Africa/Ndjamena"}, - {"New Delhi", "India", "GMT+5:30", "Asia/Kolkata"/* not in zone.tab */ }, - {"New York", "United States of America", "GMT-4", "America/New_York"}, - {"Newfoundland", "Canada", "GMT-3:30", "America/St_Johns"}, - {"Niamey", "Niger", "GMT+1", "Africa/Niamey"}, - {"Nouakchott", "Mauritania", "GMT+1", "Africa/Nouakchott"}, - {"Noumea", "New Caledonia", "GMT+11", "Pacific/Noumea"}, - {"Novokuznetsk", "Russia", "GMT+7", "Asia/Novokuznetsk"}, - {"Novosibirsk", "Russia", "GMT+6", "Asia/Novosibirsk"}, - {"Nuku'alofa", "Tonga", "GMT+13", "Pacific/Tongatapu"}, - {"Nuuk", "Greenland", "GMT-3", "America/Godthab"}, - {"Omsk", "Russia", "GMT+6", "Asia/Omsk"}, - {"Osaka", "Japan", "GMT+9", "Asia/Tokyo"}, - {"Ottawa", "Canada", "GMT-5", "EST5EDT"}, - {"Ouagadougou", "Burkina Faso", "GMT+0", "Africa/Ouagadougou"}, - {"Pago Pago", "Independent State of Samoa", "GMT-11", "Pacific/Pago_Pago"}, - {"Palermo", "Italy", "GMT+1", "Europe/Rome"}, - {"Panama City", "Panama", "GMT-6", "America/Panama"}, - {"Paramaribo", "Surinam", "GMT-3", "America/Paramaribo"}, - {"Paris", "France", "GMT+1", "Europe/Paris"}, - {"Perm", "Russia", "GMT+5", "Asia/Yekaterinburg"}, - {"Perth", "Australia", "GMT+8", "Australia/Perth"}, - {"Petropavlovsk-Kamchatskiy", "Russia ", "GMT+12", "Asia/Kamchatka"}, - {"Philadelphia", "United States of America", "GMT-5", "EST5EDT"}, - {"Phnom Penh ", "Cambodia", "GMT-5", "Asia/Phnom_Penh"}, - {"Phoenix", "United States of America", "GMT-7", "America/Phoenix"}, - {"Podgorica", "Montenegro", "GMT+1", "Europe/Podgorica"}, - {"Ponta Delgada", "Portugal", "GMT-1", "Atlantic/Azores"}, - {"Port Louis", "Mauritius", "GMT+4", "Indian/Mauritius"}, - {"Port-au-Prince", "Haiti", "GMT-5", "America/Port-au-Prince"}, - {"Portland", "United States of America", "GMT-8", "PST8PDT"}, - {"Prague", "Czech Republic", "GMT+1", "Europe/Prague"}, - {"Pyongyang", "North Korea", "GMT+9", "Asia/Pyongyang"}, - {"Quito", "Ecuador", "GMT-5", "America/Guayaquil"}, - {"Rabat", "Morocco", "GMT+0", "Africa/Casablanca"}, - {"Rangoon", "Burma", "GMT+6:30", "Asia/Rangoon"}, - {"Recife", "Brazil", "GMT-3", "America/Recife"}, - {"Regina", "Canada", "GMT-6", "America/Regina"}, - {"Reykjavik", "Iceland", "GMT+0", "Atlantic/Reykjavik"}, - {"Riga", "Latvia", "GMT+2", "Europe/Riga"}, - {"Rio de Janeiro", "Brazil", "GMT-2", "America/Sao_Paulo"}, - {"Riyadh", "Saudi Arabia", "GMT+3", "Asia/Riyadh"}, - {"Rome", "Italy", "GMT+1", "Europe/Rome"}, - {"Saint-Denis", "Reunion Island", "GMT+4", "Indian/Reunion"}, - {"Samara", "Russia ", "GMT+4", "Europe/Samara"}, - {"San Antonio", "United States of America", "GMT-6", "CST6CDT"}, - {"San Diego", "United States of America", "GMT-8", "PST8PDT"}, - {"San Francisco", "United States of America", "GMT-8", "America/Los_Angeles"}, - {"San Jose", "United States of America", "GMT-8", "PST8PDT"}, - {"San Jose", "Costa Rica", "GMT-6", "America/Costa_Rica"}, - {"San Juan", "Puerto Rico", "GMT-4", "America/Puerto_Rico"}, - {"San Marino", "Italy", "GMT+1", "Europe/San_Marino"}, - {"San Salvador", "El Salvador", "GMT-6", "America/El_Salvador"}, - {"Sanaa", "Yemen", "GMT+3", "Asia/Aden"/* not in zone.tab */ }, - {"Santiago", "Chile", "GMT-4", "America/Santiago"}, - {"Santo Domingo", "Dominican Republic", "GMT-4", "America/Santo_Domingo"}, - {"Sao Paulo", "Brazil", "GMT-2", "America/Sao_Paulo"}, - {"Seattle", "United States of America", "GMT-8", "PST8PDT"}, - {"Seoul", "Republic of Korea", "GMT+9", "Asia/Seoul"}, - {"Shanghai", "China", "GMT+8", "Asia/Shanghai"}, - {"Shenzhen", "China", "GMT+8", "Asia/Shanghai"}, - {"Singapore", "Republic of Singapore", "GMT+8", "Asia/Singapore"}, - {"Skopje", "Macedonia", "GMT+1", "Europe/Skopje"}, - {"Sofia ", "Bulgaria", "GMT+3", "Europe/Sofia"}, - {"St. John's", "Antigua and Barbuda", "GMT-4", "America/Antigua"}, - {"St. John's", "Canada", "GMT-3:30", "America/St_Johns"}, - {"St. Petersburg", "Russia", "GMT+3", "Europe/Moscow"}, - {"Stockholm", "Sweden", "GMT+2", "Europe/Stockholm"}, - {"Suva", "Fiji", "GMT+12", "Pacific/Fiji"}, - {"Sydney", "Australia", "GMT+11", "Australia/Sydney"}, - {"Tahiti", "French Polynesia", "GMT-10", "Pacific/Tahiti"}, - {"Taipei", "Taiwan", "GMT+8", "Asia/Taipei"}, - {"Tallinn", "Estonia", "GMT+2", "Europe/Tallinn"}, - {"Tarawa", "Kiribati", "GMT+12", "Pacific/Tarawa"}, - {"Tashkent", "Uzbekistan", "GMT+5", "Asia/Tashkent"}, - {"Tbilisi", "Georgia", "GMT+4", "Asia/Tbilisi"}, - {"Tegucigalpa", "Honduras", "GMT-6", "America/Tegucigalpa"}, - {"Tehran", "Iran", "GMT+3:30", "Asia/Tehran"}, - {"Thanh Pho Ho Chi Minh", "Vietnam", "GMT+7", "Asia/Ho_Chi_Minh"}, - {"The Settlement", "British Virgin Islands ", "GMT-4", "America/Tortola"}, - {"Tientsin", "China", "GMT+8", "Asia/Shanghai"/* not in zone.tab */ }, - {"Tijuana", "Mexico", "GMT-5", "America/Tijuana"}, - {"Tokyo", "Japan", "GMT+9", "Asia/Tokyo"}, - {"Toronto", "Canada", "GMT-4", "America/Toronto"}, - {"Trehet", "France", "GMT+1", "Europe/Paris"/* not in zone.tab */ }, - {"Tripoli", "Libya", "GMT+2", "Africa/Tripoli"}, - {"Tunis", "Tunisia", "GMT+2", "Africa/Tunis"}, - {"Turin", "Italy", "GMT+1", "Europe/Rome"}, - {"Ufa", "Bashkiriya", "GMT+5", "Asia/Yekaterinburg"}, - {"Ulan Bator", "Mongolia", "GMT+8", "Asia/Ulan_Bator"}, - {"Vaduz", "Liechtenstein", "GMT+1", "Europe/Vaduz"}, - {"Valletta", "Malta", "GMT+1", "Europe/Malta"}, - {"Vancouver", "Canada", "GMT-8", "America/Vancouver"}, - {"Verona", "Italy", "GMT+1", "Europe/Rome"}, - {"Victoria", "Seychelles", "GMT+4", "Australia/Melbourne"}, - {"Vienna", "Austria", "GMT+1", "Europe/Vienna"}, - {"Vilnius", "Lithuania", "GMT+3", "Europe/Vilnius"}, - {"Vladivostok", "Russia ", "GMT+10", "Asia/Vladivostok"}, - {"Volgograd", "Russia ", "GMT+4", "Europe/Volgograd"}, - {"Warsaw", "Poland", "GMT+2", "Europe/Warsaw"}, - {"Washington, D.C.", "United States of America", "GMT-5", "EST5EDT"}, - {"Wellington", "New Zealand", "GMT+12", "Pacific/Auckland"}, - {"Winnipeg", "Canada", "GMT-5", "America/Winnipeg"}, - {"Yakutsk", "Russia ", "GMT+9", "Asia/Yakutsk"}, - {"Yamoussoukro", "Ivory Coast", "GMT+0", "Africa/Abidjan"}, - {"Yaounde", "Cameroon", "GMT+1", "Africa/Douala"/* not in zone.tab */ }, - {"Yekaterinburg", "Russia ", "GMT+5", "Asia/Yekaterinburg"}, - {"Yerevan", "Armenia", "GMT+5", "Asia/Yerevan"}, - {"Yuzhno-Sakhalinsk", "Russia ", "GMT+11", "Asia/Sakhalin"}, - {"Zagreb", "Croatia", "GMT+1", "Europe/Zagreb"}, - {"Zurich", "Switzerland", "GMT+1", "Europe/Zurich"}, - {NULL, NULL, NULL, NULL} -}; - -#define _calendar_timezone_dumpfile_path "/opt/share/zoneinfo/" - -int calendar_foreach_timezone(calendar_foreach_timezone_cb callback, void* user_data) +int calendar_todo_get_start_time(calendar_todo_h todo, long long int *start_time) { - CALENDAR_NULL_ARG_CHECK(callback); - - int i = 0; - char temp_filepath[256]; // normal char definition - while(_calendar_time_zone_array[i].city != NULL) - { - calendar_foreach_timezone_s timezone; - timezone.timezone_name = _calendar_safe_strdup(_calendar_time_zone_array[i].tz_path); - timezone.city_name = _calendar_safe_strdup(_calendar_time_zone_array[i].city); - timezone.country_name = _calendar_safe_strdup(_calendar_time_zone_array[i].country); - timezone.time_offset = _calendar_safe_strdup(_calendar_time_zone_array[i].gmt); - // all structure members has proper string value. - snprintf(temp_filepath, sizeof(temp_filepath), "%s%s", - _calendar_timezone_dumpfile_path, _calendar_time_zone_array[i].tz_path); // proper snprintf - timezone.timezone_detail_filepath = _calendar_safe_strdup(temp_filepath); - - bool callback_return = callback(&timezone, user_data); - - _calendar_safe_free(timezone.timezone_name); - _calendar_safe_free(timezone.city_name); - _calendar_safe_free(timezone.country_name); - _calendar_safe_free(timezone.time_offset); - _calendar_safe_free(timezone.timezone_detail_filepath); - - if(callback_return == false) - break; - - i++; + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(start_time); + + cal_struct *cs; + long long int lli; + + cs = (cal_struct*)((calendar_event_s*)todo)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + + lli = calendar_svc_struct_get_lli(cs, CALS_VALUE_LLI_DTSTART_UTIME); + if (lli == CALS_TODO_NO_DUE_DATE) { + return CALENDAR_ERROR_NO_DATA; } + *start_time = lli; return CALENDAR_ERROR_NONE; } - -int calendar_event_get_from_vcalendar(const char *vcalendar_stream, calendar_event_h *event) +int calendar_todo_set_start_time(calendar_todo_h todo, long long int start_time) { - CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(vcalendar_stream); - *event = malloc(sizeof(calendar_event_s)); - if (*event == NULL) { - LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); - return CALENDAR_ERROR_OUT_OF_MEMORY; + int ret = CALENDAR_ERROR_NONE; + CALENDAR_NULL_ARG_CHECK(todo); + ret = calendar_svc_struct_set_lli((cal_struct*)((calendar_event_s*)todo)->event_legacy, CALS_VALUE_LLI_DTSTART_UTIME, + start_time); + if(ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - memset(*event, 0, sizeof(calendar_event_s)); - if(calendar_svc_util_convert_vcs_to_event(vcalendar_stream, 0, (cal_struct**)&(*(calendar_event_s**)event)->event_legacy) != CAL_SUCCESS) { - free(*event); - *event = NULL; + return CALENDAR_ERROR_NONE; +} - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); +int calendar_todo_get_due_time(calendar_todo_h todo, long long int *due_time) +{ + CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(due_time); + + cal_struct *cs; + long long int lli; + + cs = (cal_struct*)((calendar_event_s*)todo)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } + + lli = calendar_svc_struct_get_lli(cs, CALS_VALUE_LLI_DTEND_UTIME); + if (lli == CALS_TODO_NO_DUE_DATE) { + return CALENDAR_ERROR_NO_DATA; + } + *due_time = lli; return CALENDAR_ERROR_NONE; } -int calendar_event_get_vcalendar_from_event(calendar_event_h event, char **vcalendar_stream) +int calendar_todo_set_due_time(calendar_todo_h todo, long long int due_time) { - CALENDAR_NULL_ARG_CHECK(event); - CALENDAR_NULL_ARG_CHECK(vcalendar_stream); - if(calendar_svc_util_convert_event_to_vcs((cal_struct*)((calendar_event_s*)event)->event_legacy, - vcalendar_stream, NULL) != CAL_SUCCESS) { - + int ret = CALENDAR_ERROR_NONE; + CALENDAR_NULL_ARG_CHECK(todo); + ret = calendar_svc_struct_set_lli((cal_struct*)((calendar_event_s*)todo)->event_legacy, CALS_VALUE_LLI_DTEND_UTIME, + due_time); + if(ret != CAL_SUCCESS) { LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } + return CALENDAR_ERROR_NONE; } -int calendar_todo_create(calendar_todo_h *todo) +int calendar_todo_get_total_count_from_db(int calendar_book_db_id, int todo_priority, int todo_status, int *count) { - CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(count); - *todo = malloc(sizeof(calendar_event_s)); - if (*todo == NULL) - { - LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); - return CALENDAR_ERROR_OUT_OF_MEMORY; - } - (*(calendar_event_s**)todo)->event_legacy = (calendar_event_legacy_s*)calendar_svc_struct_new(CAL_STRUCT_TODO); + int ret; + cal_iter *iter = NULL; + *count = 0; - if ((*(calendar_event_s**)todo)->event_legacy == NULL) - { - free(*todo); - *todo = NULL; - LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); - return CALENDAR_ERROR_OUT_OF_MEMORY; + ret = calendar_svc_todo_get_iter(calendar_book_db_id, + todo_priority, todo_status, CALS_TODO_LIST_ORDER_END_DATE, &iter); + + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; } - calendar_svc_struct_set_int((cal_struct*)(*(calendar_event_s**)todo)->event_legacy, CAL_VALUE_INT_TIMEZONE, 100); // set default timezone + + if ((ret = _get_count_from_legacy_iter(__FUNCTION__, iter, count)) + != CALENDAR_ERROR_NONE) + return ret; return CALENDAR_ERROR_NONE; } -int calendar_todo_destroy(calendar_todo_h todo) + +int calendar_todo_get_total_count_by_duedate_range(int calendar_book_db_id, // TODO + long long int start_duedate_range, long long int end_duedate_range, + int todo_priority, int todo_status, int *count) { - int ret_val = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(count); - ret_val = calendar_svc_struct_free((cal_struct **)&((calendar_event_s*)todo)->event_legacy); - - if (ret_val != CAL_SUCCESS) - { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - ret_val = CALENDAR_ERROR_INVALID_PARAMETER; - } else { - free(todo); - ret_val = CALENDAR_ERROR_NONE; + int ret; + + ret = calendar_svc_todo_get_count_by_period(calendar_book_db_id, + start_duedate_range, end_duedate_range, + todo_priority, todo_status, count); + if (ret != CAL_SUCCESS) { + LOGE("Failed to get count by period"); + return CALENDAR_ERROR_DB_FAILED; } - return ret_val; + if (*count < 1) { + LOGD("No data"); +// return CALENDAR_ERROR_NO_DATA; check s1-7153 + } + return CALENDAR_ERROR_NONE; } -int calendar_todo_get_db_id(calendar_todo_h todo, int *db_id) +int calendar_todo_free_todo_array(calendar_todo_h *todo_array) { - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(db_id); + int i; + CALENDAR_NULL_ARG_CHECK(todo_array); - *db_id = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, (char*)CAL_VALUE_INT_INDEX); - if(*db_id < 0) { - *db_id = 0; - } + for (i = 0; todo_array[i]; i++) { + calendar_svc_struct_free(((cal_struct**)&((calendar_event_s*)(todo_array[i]))->event_legacy)); + } + free(todo_array); return CALENDAR_ERROR_NONE; } -int calendar_todo_get_calendar_db_id(calendar_todo_h todo, int *calendar_db_id) +int calendar_todo_free_modified_todo_array(pcalendar_modified_todo_s *modified_todo_array) { - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(calendar_db_id); + CALENDAR_NULL_ARG_CHECK(modified_todo_array); + + int i = 0; + pcalendar_modified_todo_s *p; + + p = modified_todo_array; + + if (p) { + while (p[i]) { + free(p[i]); + i++; + } + free(p); + } - *calendar_db_id = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, - (char*)CAL_VALUE_INT_CALENDAR_ID); - if(*calendar_db_id < 0) - *calendar_db_id = 0; return CALENDAR_ERROR_NONE; } -int calendar_todo_insert_to_db(calendar_todo_h todo, int calendar_db_id, int *todo_id) +int calendar_todo_search_todo_by_calendar_book(int calendar_book_db_id, + int todo_priority, int todo_status, calendar_todo_h **todo_array, int *length) { - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(todo_id); + CALENDAR_NULL_ARG_CHECK(todo_array); + CALENDAR_NULL_ARG_CHECK(length); - int ret_val = CALENDAR_ERROR_NONE; + int ret; + cal_iter *iter = NULL; + *todo_array = NULL; + *length = 0; - int account_db_id = _calendar_get_account_db_id(calendar_db_id); - CONTACTS_INVALID_ARG_CHECK(account_db_id == -2); + ret = calendar_svc_todo_get_iter(calendar_book_db_id, + todo_priority, todo_status, CALS_TODO_LIST_ORDER_END_DATE, &iter); - calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_INT_CALENDAR_ID, calendar_db_id); - calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_INT_ACCOUNT_ID, account_db_id); - - ret_val = calendar_svc_insert((cal_struct*)((calendar_event_s*)todo)->event_legacy); - if (ret_val < 0) - { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); return CALENDAR_ERROR_DB_FAILED; } - *todo_id = ret_val; + + if ((ret = _get_h_array_from_legacy_iter(__FUNCTION__, iter, todo_array, length)) + != CALENDAR_ERROR_NONE) + return ret; + return CALENDAR_ERROR_NONE; } -int calendar_todo_delete_from_db(int todo_id) +int calendar_todo_search_todo_by_duedate_range(int calendar_book_db_id, + long long int start_duedate_range, long long int end_duedate_range, + int todo_priority, int todo_status, calendar_todo_h **todo_array, int *length) { - if(todo_id <= 0) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; - } - - int ret_val = CALENDAR_ERROR_NONE; - - ret_val = calendar_svc_delete(CAL_STRUCT_TODO, todo_id); - - if (ret_val == CAL_SUCCESS) { - ret_val = CALENDAR_ERROR_NONE; - } - else { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - ret_val = CALENDAR_ERROR_DB_FAILED; - } + CALENDAR_NULL_ARG_CHECK(todo_array); + CALENDAR_NULL_ARG_CHECK(length); + + int ret; + cal_iter *iter = NULL; + *todo_array = NULL; + *length = 0; - return ret_val; + ret = calendar_svc_todo_get_list_by_period(calendar_book_db_id, + start_duedate_range, end_duedate_range, + todo_priority, todo_status, &iter); + + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALLENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + + if ((ret = _get_h_array_from_legacy_iter(__FUNCTION__, iter, todo_array, length)) + != CALENDAR_ERROR_NONE) + return ret; + + return CALENDAR_ERROR_NONE; } -int calendar_todo_update_to_db(calendar_todo_h todo) +int calendar_todo_search_todo_by_version(int calendar_book_db_id, int calendar_db_version, + pcalendar_modified_todo_s **modified_todo_array, int *length) { - int ret_val = CALENDAR_ERROR_NONE; + CALENDAR_NULL_ARG_CHECK(modified_todo_array); + CALENDAR_NULL_ARG_CHECK(length); - CALENDAR_NULL_ARG_CHECK(todo); - if((cal_struct*)((calendar_event_s*)todo)->event_legacy == NULL) { - LOGE("[%s] CALENDAR_ERROR_NO_DATA(0x%08x)", __FUNCTION__, CALENDAR_ERROR_NO_DATA); - return CALENDAR_ERROR_NO_DATA; + int i, ret; + int is_error = 0; + GList *l = NULL; + GList *cursor; + cal_iter *iter = NULL; + cal_struct *cs = NULL; + calendar_modified_todo_s *cmt; + pcalendar_modified_todo_s *p; + *length = 0; + + ret = calendar_svc_todo_get_changes(calendar_book_db_id, calendar_db_version, &iter); + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALLENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; } - ret_val = calendar_svc_update((cal_struct*)((calendar_event_s*)todo)->event_legacy); + /* get event_db_id and append to glist */ + while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { + if(calendar_svc_iter_get_info(iter, &cs) != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + is_error = 1; + break; + } - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; + cmt = calloc(1, sizeof(calendar_modified_todo_s)); + if (cmt == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + is_error = 1; + break; + } + + cmt->modified_status = calendar_svc_struct_get_int(cs, CALS_STRUCT_UPDATED_INT_TYPE); + cmt->todo_db_id = calendar_svc_struct_get_int(cs, CALS_STRUCT_UPDATED_INT_ID); + cmt->calendar_db_version = calendar_svc_struct_get_int(cs, + CALS_STRUCT_UPDATED_INT_VERSION); + cmt->calendar_book_db_id = calendar_svc_struct_get_int(cs, + CALS_STRUCT_UPDATED_INT_CALENDAR_ID); + + l = g_list_append(l, cmt); + calendar_svc_struct_free(&cs); + } + calendar_svc_iter_remove(&iter); + + if (is_error) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + g_list_free_full(l, free); + return CALENDAR_ERROR_OUT_OF_MEMORY; } + /* malloc array and fill data */ + *length = g_list_length(l); + + /* plus 1 to set end of array as checking id -1 */ + p = calloc(*length + 1, sizeof(pcalendar_modified_todo_s)); + if (p == NULL) { + g_list_free_full(l, free); + return CALENDAR_ERROR_OUT_OF_MEMORY; + } + + cursor = l; + for (i = 0; cursor; i++) { + p[i] = (pcalendar_modified_todo_s)(cursor->data); + cursor = g_list_next(cursor); + } + /* free list after allocation */ + g_list_free(l); + + /* fill NULL pointer to indicate end of array */ + p[i] = NULL; + + *modified_todo_array = p; return CALENDAR_ERROR_NONE; } -int calendar_todo_get_from_db(int todo_id, calendar_todo_h *todo) +int calendar_book_get_from_db(int calendar_db_id, calendar_book_h *calendar) { - CALENDAR_NULL_ARG_CHECK(todo); - *todo = malloc(sizeof(calendar_event_s)); - if (*todo == NULL) { + CALENDAR_INVALID_ARG_CHECK(calendar_db_id < 1); + CALENDAR_NULL_ARG_CHECK(calendar); + + *calendar = malloc(sizeof(calendar_event_s)); + if (*calendar == NULL) { LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); return CALENDAR_ERROR_OUT_OF_MEMORY; } - memset(*todo, 0, sizeof(calendar_event_s)); - if(calendar_svc_get(CAL_STRUCT_TODO, todo_id, NULL, (cal_struct**)&(*(calendar_event_s**)todo)->event_legacy) != CAL_SUCCESS) { - free(*todo); - *todo = NULL; + memset(*calendar, 0, sizeof(calendar_event_s)); + if(calendar_svc_get(CAL_STRUCT_CALENDAR, calendar_db_id, NULL, (cal_struct**)&(*(calendar_event_s**)calendar)->event_legacy) != CAL_SUCCESS) { + free(*calendar); + *calendar = NULL; + + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + return CALENDAR_ERROR_NONE; +} + +int calendar_book_create(calendar_book_h *calendar) +{ + CALENDAR_NULL_ARG_CHECK(calendar); - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; + *calendar = malloc(sizeof(calendar_event_s)); + if (*calendar == NULL) { + LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); + return CALENDAR_ERROR_OUT_OF_MEMORY; } + + memset(*calendar, 0, sizeof(calendar_event_s)); + (*(calendar_event_s**)calendar)->event_legacy = (calendar_event_legacy_s*)(calendar_svc_struct_new(CAL_STRUCT_CALENDAR)); return CALENDAR_ERROR_NONE; } -int calendar_todo_get_priority(calendar_todo_h todo, calendar_todo_priority_e *priority) +int calendar_book_insert_to_db(calendar_book_h calendar, int *calendar_db_id) { - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(priority); - - *priority = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_INT_PRIORITY); + CALENDAR_NULL_ARG_CHECK(calendar); + int index = -1; + index = calendar_svc_insert( + (cal_struct*)((calendar_event_s*)calendar)->event_legacy + ); + *calendar_db_id = index; return CALENDAR_ERROR_NONE; } -int calendar_todo_set_priority(calendar_todo_h todo, calendar_todo_priority_e priority) +int calendar_book_update_to_db(calendar_book_h calendar) { - int ret_val = CALENDAR_ERROR_NONE; + CALENDAR_NULL_ARG_CHECK(calendar); - CALENDAR_NULL_ARG_CHECK(todo); + int ret = CALENDAR_ERROR_NONE; - ret_val = calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_INT_PRIORITY, priority); - if (ret_val != CAL_SUCCESS) { + if((cal_struct*)((calendar_event_s*)calendar)->event_legacy == NULL) { LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } + ret = calendar_svc_update( + (cal_struct*)((calendar_event_s*)calendar)->event_legacy + ); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; + } + return CALENDAR_ERROR_NONE; } -int calendar_todo_get_status(calendar_todo_h todo, calendar_todo_status_e *status) +// TOREM +int calendar_book_set_is_default(calendar_book_h calendar, bool is_default) { - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(status); + CALENDAR_NULL_ARG_CHECK(calendar); +/* + is_default = calendar_svc_struct_get_int( + (cal_struct*)((calendar_event_s*)calendar)->event_legacy, + CAL_TABLE_INT_VISIBILITY); +*/ - int legacy_status = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_INT_TASK_STATUS); + return CALENDAR_ERROR_NONE; +} - switch(legacy_status) { - case CALS_TODO_STATUS_NEEDS_ACTION: - *status = CALENDAR_TODO_STATUS_NEEDS_ACTION; - break; - case CALS_TODO_STATUS_COMPLETED: - *status = CALENDAR_TODO_STATUS_COMPLETED; - break; - case CALS_TODO_STATUS_IN_PROCESS: - *status = CALENDAR_TODO_STATUS_IN_PROCESS; - break; - case CALS_TODO_STATUS_CANCELLED: - *status = CALENDAR_TODO_STATUS_CANCELED; - break; - default: - *status = CALENDAR_TODO_STATUS_NONE; - break; - } +int calendar_book_set_is_visible(calendar_book_h calendar, bool is_visible) +{ + CALENDAR_NULL_ARG_CHECK(calendar); + + is_visible = calendar_svc_struct_get_int( + (cal_struct*)((calendar_event_s*)calendar)->event_legacy, + CAL_TABLE_INT_VISIBILITY); return CALENDAR_ERROR_NONE; } -int calendar_todo_set_status(calendar_todo_h todo, calendar_todo_status_e status) +int calendar_book_destroy(calendar_book_h calendar) { - int ret_val = CALENDAR_ERROR_NONE; - - CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(calendar); + int ret = CALENDAR_ERROR_NONE; - int legacy_status = CALS_STATUS_NONE; - switch(status) { - case CALENDAR_TODO_STATUS_NEEDS_ACTION: - legacy_status = CALS_TODO_STATUS_NEEDS_ACTION; - break; - case CALENDAR_TODO_STATUS_COMPLETED: - legacy_status = CALS_TODO_STATUS_COMPLETED; - break; - case CALENDAR_TODO_STATUS_IN_PROCESS: - legacy_status = CALS_TODO_STATUS_IN_PROCESS; - break; - case CALENDAR_TODO_STATUS_CANCELED: - legacy_status = CALS_TODO_STATUS_CANCELLED; - break; - default: - legacy_status = CALENDAR_TODO_STATUS_NONE; - break; - } + ret = calendar_svc_struct_free((cal_struct **)&((calendar_event_s*)calendar)->event_legacy); - ret_val = calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_INT_TASK_STATUS, legacy_status); - if (ret_val != CAL_SUCCESS) { + if (ret != CAL_SUCCESS) { LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; + ret = CALENDAR_ERROR_INVALID_PARAMETER; + } else { + free(calendar); + ret = CALENDAR_ERROR_NONE; } - return CALENDAR_ERROR_NONE; + return ret; } -int calendar_todo_get_visibility(calendar_todo_h todo, calendar_visibility_e *visibility) +int calendar_book_get_db_id(calendar_book_h calendar, int *calendar_db_id) { - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(visibility); - - *visibility = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_INT_SENSITIVITY); + CALENDAR_NULL_ARG_CHECK(calendar); + CALENDAR_NULL_ARG_CHECK(calendar_db_id); + *calendar_db_id = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)calendar)->event_legacy, (char*)CAL_TABLE_INT_INDEX); + if(*calendar_db_id < 0) + *calendar_db_id = 0; return CALENDAR_ERROR_NONE; } -int calendar_todo_set_visibility(calendar_todo_h todo, calendar_visibility_e visibility) +int calendar_book_get_is_default(calendar_book_h calendar, bool *is_default) { - int ret_val = CALENDAR_ERROR_NONE; - - CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(calendar); + CALENDAR_NULL_ARG_CHECK(is_default); - ret_val = calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_INT_SENSITIVITY, visibility); - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; + if(calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)calendar)->event_legacy, CAL_TABLE_INT_INDEX) == 1) { + *is_default = true; + } + else { + *is_default = false; } - return CALENDAR_ERROR_NONE; } -int calendar_todo_get_subject(calendar_todo_h todo, char **subject) +int calendar_book_get_name(calendar_book_h calendar, char **calendar_name) { - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(subject); + CALENDAR_NULL_ARG_CHECK(calendar); + CALENDAR_NULL_ARG_CHECK(calendar_name); - *subject = NULL; - *subject = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_TXT_SUMMARY)); + *calendar_name = NULL; + *calendar_name = _calendar_safe_strdup( + calendar_svc_struct_get_str( + (cal_struct*)((calendar_event_s*)calendar)->event_legacy, + CAL_TABLE_TXT_NAME)); - return CALENDAR_ERROR_NONE; + return CALENDAR_ERROR_NONE; } -int calendar_todo_set_subject(calendar_todo_h todo, const char *subject) +int calendar_book_set_name(calendar_book_h calendar, const char *calnedar_name) { - int ret_val = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(todo); + int ret = CALENDAR_ERROR_NONE; + + CALENDAR_NULL_ARG_CHECK(calendar); - ret_val = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_TXT_SUMMARY, subject); + ret = calendar_svc_struct_set_str( + (cal_struct*)((calendar_event_s*)calendar)->event_legacy, + CAL_TABLE_TXT_NAME, calnedar_name); - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } return CALENDAR_ERROR_NONE; } -int calendar_todo_get_description(calendar_todo_h todo, char **description) +int calendar_book_get_is_visible(calendar_book_h calendar, bool *is_visible) { - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(description); + CALENDAR_NULL_ARG_CHECK(calendar); + CALENDAR_NULL_ARG_CHECK(is_visible); - *description = NULL; - *description = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_TXT_DESCRIPTION)); + *is_visible = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)calendar)->event_legacy, CAL_TABLE_INT_VISIBILITY) == 1 ? true : false; - return CALENDAR_ERROR_NONE; + return CALENDAR_ERROR_NONE; } -int calendar_todo_set_description(calendar_todo_h todo, const char *description) +int calendar_book_set_color(calendar_book_h calendar_book, unsigned char red, unsigned char green, unsigned char blue) { - int ret_val = CALENDAR_ERROR_NONE; - - CALENDAR_NULL_ARG_CHECK(todo); + CALENDAR_NULL_ARG_CHECK(calendar_book); - ret_val = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_TXT_DESCRIPTION, description); + int ret; + char buf[32] = {0, }; - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + snprintf(buf, sizeof(buf), "%d.%d.%d.%d", (int)red, (int)green, (int)blue, 0); + ret = calendar_svc_struct_set_str( + (cal_struct*)((calendar_event_s*)calendar_book)->event_legacy, + CAL_TABLE_TXT_COLOR, buf); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } - return CALENDAR_ERROR_NONE; } -int calendar_todo_get_location(calendar_todo_h todo, char **location) -{ - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(location); - - *location = NULL; - *location = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_TXT_LOCATION)); - - return CALENDAR_ERROR_NONE; -} - -int calendar_todo_set_location(calendar_todo_h todo, const char *location) -{ - int ret_val = CALENDAR_ERROR_NONE; - - CALENDAR_NULL_ARG_CHECK(todo); +int calendar_book_unset_color(calendar_book_h calendar_book) +{ + CALENDAR_NULL_ARG_CHECK(calendar_book); - ret_val = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_TXT_LOCATION, location); - - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + int ret; + ret = calendar_svc_struct_set_str( + (cal_struct*)((calendar_event_s*)calendar_book)->event_legacy, + CAL_TABLE_TXT_COLOR, ""); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } - - return CALENDAR_ERROR_NONE; + return CALENDAR_ERROR_NONE; } -int calendar_todo_get_last_modified_time(calendar_todo_h todo, struct tm *reviedtime) +int calendar_book_get_color(calendar_book_h calendar, unsigned char *red, unsigned char *green, unsigned char *blue) { - struct tm *tmp_date = NULL; - - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(reviedtime); + CALENDAR_NULL_ARG_CHECK(calendar); + CALENDAR_NULL_ARG_CHECK(red); + CALENDAR_NULL_ARG_CHECK(green); + CALENDAR_NULL_ARG_CHECK(blue); - tmp_date = calendar_svc_struct_get_tm((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_GMT_LAST_MODIFIED_TIME, CAL_TZ_FLAG_LOCAL); - - if (tmp_date == NULL) { - LOGE("[%s] CALENDAR_ERROR_NO_DATA(0x%08x)", __FUNCTION__, CALENDAR_ERROR_NO_DATA); - return CALENDAR_ERROR_NO_DATA; - } + char *color = NULL; - *reviedtime = *tmp_date; + color = calendar_svc_struct_get_str( + (cal_struct*)((calendar_event_s*)calendar)->event_legacy, CAL_TABLE_TXT_COLOR); + if (color == NULL || strlen(color) < 1) { + *red = *green = *blue = 0; + return CALENDAR_ERROR_NO_DATA; + } + _calendar_parse_color(color, red, green, blue); return CALENDAR_ERROR_NONE; } - -int calendar_todo_get_timezone(calendar_todo_h todo, char** timezone_name) + +int calendar_book_get_account_db_id(calendar_book_h calendar, int *account_db_id) { - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(timezone_name); + CALENDAR_NULL_ARG_CHECK(calendar); + CALENDAR_NULL_ARG_CHECK(account_db_id); -// *timezone_offset = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)event)->event_legacy, -// CAL_VALUE_INT_TIMEZONE); - *timezone_name = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_TXT_TZ_NAME)); + *account_db_id = calendar_svc_struct_get_int( + (cal_struct*)((calendar_event_s*)calendar)->event_legacy, + CAL_TABLE_INT_ACCOUNT_ID) == 1 ? true : false; return CALENDAR_ERROR_NONE; } - -int calendar_todo_set_timezone(calendar_todo_h todo, const char* timezone_name) -{ - int ret_val = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(timezone_name); +int calendar_book_set_account_db_id(calendar_book_h calendar, int account_db_id) +{ + int ret = CALENDAR_ERROR_NONE; - ret_val = calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_INT_TIMEZONE, 0); - ret_val = calendar_svc_struct_set_str((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_TXT_TZ_NAME, timezone_name); - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + CALENDAR_NULL_ARG_CHECK(calendar); + ret = calendar_svc_struct_set_int( + (cal_struct*)((calendar_event_s*)calendar)->event_legacy, + CAL_TABLE_INT_ACCOUNT_ID, account_db_id); + if (ret != CAL_SUCCESS) + { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } return CALENDAR_ERROR_NONE; } - -int calendar_todo_get_start_time(calendar_todo_h todo, struct tm *start_time) -{ - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(start_time); - - if(calendar_svc_struct_get_tm((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_GMT_START_DATE_TIME, CAL_TZ_FLAG_LOCAL) == NULL) { - LOGE("[%s] CALENDAR_ERROR_NO_DATA(0x%08x)", __FUNCTION__, CALENDAR_ERROR_NO_DATA); - return CALENDAR_ERROR_NO_DATA; - } - memcpy(start_time, calendar_svc_struct_get_tm((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_GMT_START_DATE_TIME, CAL_TZ_FLAG_LOCAL), sizeof(struct tm)); // proper memcpy - - return CALENDAR_ERROR_NONE; -} -int calendar_todo_set_start_time(calendar_todo_h todo, struct tm start_time) +int calendar_book_get_type(calendar_book_h calendar, int *calendar_type) { - int ret_val = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(todo); - ret_val = calendar_svc_struct_set_tm((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_GMT_START_DATE_TIME, - CAL_TZ_FLAG_LOCAL, &start_time); - if(ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - return CALENDAR_ERROR_INVALID_PARAMETER; - } - - return CALENDAR_ERROR_NONE; -} + CALENDAR_NULL_ARG_CHECK(calendar); + CALENDAR_NULL_ARG_CHECK(calendar_type); -int calendar_todo_get_due_time(calendar_todo_h todo, struct tm *due_time) -{ - CALENDAR_NULL_ARG_CHECK(todo); - CALENDAR_NULL_ARG_CHECK(due_time); - - if(calendar_svc_struct_get_tm((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_GMT_END_DATE_TIME, CAL_TZ_FLAG_LOCAL) == NULL) { - LOGE("[%s] CALENDAR_ERROR_NO_DATA(0x%08x)", __FUNCTION__, CALENDAR_ERROR_NO_DATA); - return CALENDAR_ERROR_NO_DATA; - } - memcpy(due_time, calendar_svc_struct_get_tm((cal_struct*)((calendar_event_s*)todo)->event_legacy, - CAL_VALUE_GMT_END_DATE_TIME, CAL_TZ_FLAG_LOCAL), sizeof(struct tm)); // proper memcpy - + *calendar_type = calendar_svc_struct_get_int( + (cal_struct*)((calendar_event_s*)calendar)->event_legacy, + CAL_TABLE_INT_STORE_TYPE); return CALENDAR_ERROR_NONE; } -int calendar_todo_set_due_time(calendar_todo_h todo, struct tm due_time) +int calendar_book_set_type(calendar_book_h calendar, int calendar_type) { - int ret_val = CALENDAR_ERROR_NONE; - CALENDAR_NULL_ARG_CHECK(todo); - ret_val = calendar_svc_struct_set_tm((cal_struct*)((calendar_event_s*)todo)->event_legacy, CAL_VALUE_GMT_END_DATE_TIME, - CAL_TZ_FLAG_LOCAL, &due_time); - if(ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + int ret = CALENDAR_ERROR_NONE; + + CALENDAR_NULL_ARG_CHECK(calendar); + ret = calendar_svc_struct_set_int( + (cal_struct*)((calendar_event_s*)calendar)->event_legacy, + CAL_TABLE_INT_STORE_TYPE, calendar_type); + if (ret != CAL_SUCCESS) + { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); return CALENDAR_ERROR_INVALID_PARAMETER; } - + return CALENDAR_ERROR_NONE; } -int calendar_foreach_todo_from_db(calendar_foreach_query_todo_cb callback, void *user_data) +int calendar_book_free_calendar_book_array(calendar_book_h *calendar_book_array) // TODO { - CALENDAR_NULL_ARG_CHECK(callback); + int i; + calendar_book_h c; - return _calendar_todo_foreach(callback, ALL_ACCOUNT_ID, ALL_CALENDAR_ID, user_data); -} + CALENDAR_NULL_ARG_CHECK(calendar_book_array); -int calendar_query_todo_by_calendar(calendar_foreach_query_todo_cb callback, int calendar_db_id, void *user_data) -{ - CALENDAR_NULL_ARG_CHECK(callback); - CONTACTS_INVALID_ARG_CHECK(calendar_db_id < 1); - int account_db_id = _calendar_get_account_db_id(calendar_db_id); - CONTACTS_INVALID_ARG_CHECK(account_db_id == -2); - - return _calendar_todo_foreach(callback, account_db_id, calendar_db_id, user_data); + c = calendar_book_array[0]; + for (i = 0; c ; c = calendar_book_array[++i] ) + calendar_book_destroy(c); + free(calendar_book_array); + + return CALENDAR_ERROR_NONE; } -int calendar_get_from_db(int calendar_db_id, calendar_h *calendar) -{ - CONTACTS_INVALID_ARG_CHECK(calendar_db_id < 1); - CALENDAR_NULL_ARG_CHECK(calendar); +//int calendar_foreach_calendar_book_from_db(calendar_foreach_query_calendar_book_cb callback, void *user_data) +//{ +// CALENDAR_NULL_ARG_CHECK(callback); +// +// int ret = CALENDAR_ERROR_NONE; +// cal_iter* iter = NULL; +// bool callback_return = true; +// +// //fetch from DB +// ret = calendar_svc_get_all(ALL_ACCOUNT_ID, ALL_CALENDAR_ID, CAL_STRUCT_CALENDAR, &iter); +// +// if (ret != CAL_SUCCESS) { +// LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); +// return CALENDAR_ERROR_DB_FAILED; +// } +// +// if (iter == NULL) { +// LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); +// return CALENDAR_ERROR_DB_FAILED; +// } else { +// while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { +// cal_struct *calendar_struct = NULL; +// if(calendar_svc_iter_get_info(iter, &calendar_struct) != CAL_SUCCESS) { +// calendar_svc_iter_remove(&iter); +// return CALENDAR_ERROR_NONE; // consider this as no data +// } +// +// if(calendar_struct == NULL) { +// calendar_svc_iter_remove(&iter); +// return CALENDAR_ERROR_NONE; // consider this as no data +// } +// +// calendar_query_calendar_book_s query_data; +// +// query_data.calendar_db_id = calendar_svc_struct_get_int(calendar_struct, CAL_TABLE_INT_INDEX); +// query_data.calendar_name = _calendar_safe_strdup(calendar_svc_struct_get_str(calendar_struct, CAL_TABLE_TXT_NAME)); +// query_data.calendar_is_default = query_data.calendar_db_id == 1 ? true : false; +// query_data.calendar_is_visible = calendar_svc_struct_get_int(calendar_struct, CAL_TABLE_INT_VISIBILITY) == 1 ? true : false; +// _calendar_parse_color(calendar_svc_struct_get_str(calendar_struct, CAL_TABLE_TXT_COLOR), +// &query_data.calendar_color_red, &query_data.calendar_color_green, &query_data.calendar_color_blue); +// query_data.account_db_id = calendar_svc_struct_get_int(calendar_struct, CAL_TABLE_INT_ACCOUNT_ID); +// +// //execute callback +// callback_return = callback(&query_data, user_data); +// +// _calendar_safe_free(query_data.calendar_name); +// +// calendar_svc_struct_free(&calendar_struct); +// +// if(callback_return == false) { +// break; +// } +// } +// calendar_svc_iter_remove(&iter); +// +// return CALENDAR_ERROR_NONE; +// } +// return CALENDAR_ERROR_NONE; +//} + +int calendar_book_get_all_calendar_book(calendar_book_h **calendar_book_array, int *length) +{ + CALENDAR_NULL_ARG_CHECK(calendar_book_array); + CALENDAR_NULL_ARG_CHECK(length); + + int ret = CALENDAR_ERROR_NONE; + cal_iter* iter = NULL; - *calendar = malloc(sizeof(calendar_event_s)); - if (*calendar == NULL) { - LOGE("[%s] CALENDAR_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, CALENDAR_ERROR_OUT_OF_MEMORY); - return CALENDAR_ERROR_OUT_OF_MEMORY; + //fetch from DB + ret = calendar_svc_get_all(ALL_ACCOUNT_ID, ALL_CALENDAR_ID, CAL_STRUCT_CALENDAR, &iter); + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; } - memset(*calendar, 0, sizeof(calendar_event_s)); - if(calendar_svc_get(CAL_STRUCT_CALENDAR, calendar_db_id, NULL, (cal_struct**)&(*(calendar_event_s**)calendar)->event_legacy) != CAL_SUCCESS) { - free(*calendar); - *calendar = NULL; + if ((ret = _get_h_array_from_legacy_iter(__FUNCTION__, iter, calendar_book_array, length)) + != CALENDAR_ERROR_NONE) + return ret; - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; - } return CALENDAR_ERROR_NONE; } -int calendar_destroy(calendar_h calendar) +int calendar_book_search_calendar_book_by_account(int account_db_id, calendar_book_h **calendar_book_array, int *length) { - CALENDAR_NULL_ARG_CHECK(calendar); - int ret_val = CALENDAR_ERROR_NONE; + CALENDAR_NULL_ARG_CHECK(calendar_book_array); + CALENDAR_NULL_ARG_CHECK(length); - ret_val = calendar_svc_struct_free((cal_struct **)&((calendar_event_s*)calendar)->event_legacy); - - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); - ret_val = CALENDAR_ERROR_INVALID_PARAMETER; - } else { - free(calendar); - ret_val = CALENDAR_ERROR_NONE; + int ret = CALENDAR_ERROR_NONE; + cal_iter* iter = NULL; + + //fetch from DB + ret = calendar_svc_get_all(account_db_id, ALL_CALENDAR_ID, CAL_STRUCT_CALENDAR, &iter); + if (CAL_SUCCESS != ret) { + LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_DB_FAILED); + return CALENDAR_ERROR_DB_FAILED; } - return ret_val; + if ((ret = _get_h_array_from_legacy_iter(__FUNCTION__, iter, calendar_book_array, length)) + != CALENDAR_ERROR_NONE) + return ret; + + return CALENDAR_ERROR_NONE; + } -int calendar_get_db_id(calendar_h calendar, int *calendar_db_id) +int calendar_event_get_is_recurrence(calendar_event_h event, bool *is_recurrence) { - CALENDAR_NULL_ARG_CHECK(calendar); - CALENDAR_NULL_ARG_CHECK(calendar_db_id); + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(is_recurrence); + + int is_recur; + + is_recur = calendar_svc_struct_get_int( + (cal_struct*)((calendar_event_s*)event)->event_legacy, + CALS_VALUE_INT_RRULE_ID); + *is_recurrence = is_recur > 0 ? 1 : 0; - *calendar_db_id = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)calendar)->event_legacy, (char*)CAL_TABLE_INT_INDEX); - if(*calendar_db_id < 0) - *calendar_db_id = 0; return CALENDAR_ERROR_NONE; + } -int calendar_get_is_default(calendar_h calendar, bool *is_default) +int calendar_event_get_all_day_recurrence_until_date(calendar_event_h event, + int *until_year, int *until_month, int *until_day) { - CALENDAR_NULL_ARG_CHECK(calendar); - CALENDAR_NULL_ARG_CHECK(is_default); + int y, m, d; - if(calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)calendar)->event_legacy, CAL_TABLE_INT_INDEX) == 1) { - *is_default = true; + CALENDAR_NULL_ARG_CHECK(event); + CALENDAR_NULL_ARG_CHECK(until_year); + CALENDAR_NULL_ARG_CHECK(until_month); + CALENDAR_NULL_ARG_CHECK(until_day); + + cal_struct *cs; + + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - else { - *is_default = false; + y = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_RRULE_UNTIL_YEAR); + m = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_RRULE_UNTIL_MONTH); + d = calendar_svc_struct_get_int(cs, CALS_VALUE_INT_RRULE_UNTIL_MDAY); + + if (y == 0 && m == 0 && d == 0) { + return CALENDAR_ERROR_NO_DATA; } + *until_year = y; + *until_month = m; + *until_day = d; + return CALENDAR_ERROR_NONE; } -int calendar_get_name(calendar_h calendar, char **calendar_name) +int calendar_event_set_all_day_recurrence_until_date(calendar_event_h event, + int until_year, int until_month, int until_day) { - CALENDAR_NULL_ARG_CHECK(calendar); - CALENDAR_NULL_ARG_CHECK(calendar_name); - - *calendar_name = NULL; - *calendar_name = _calendar_safe_strdup(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)calendar)->event_legacy, CAL_TABLE_TXT_NAME)); + CALENDAR_NULL_ARG_CHECK(event); - return CALENDAR_ERROR_NONE; -} + cal_struct *cs; -int calendar_get_is_visibile(calendar_h calendar, bool *is_visible) -{ - CALENDAR_NULL_ARG_CHECK(calendar); - CALENDAR_NULL_ARG_CHECK(is_visible); + cs = (cal_struct*)((calendar_event_s*)event)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } - *is_visible = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)calendar)->event_legacy, CAL_TABLE_INT_VISIBILITY) == 1 ? true : false; + calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_RANGE_TYPE, CALS_RANGE_UNTIL); + calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_UNTIL_TYPE, CALS_TIME_LOCALTIME); + calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_UNTIL_YEAR, until_year); + calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_UNTIL_MONTH, until_month); + calendar_svc_struct_set_int(cs, CALS_VALUE_INT_RRULE_UNTIL_MDAY, until_day); return CALENDAR_ERROR_NONE; } -int calendar_get_color(calendar_h calendar, unsigned char *red, unsigned char *green, unsigned char *blue) +int calendar_todo_unset_start_time(calendar_todo_h todo) { - CALENDAR_NULL_ARG_CHECK(calendar); - CALENDAR_NULL_ARG_CHECK(red); - CALENDAR_NULL_ARG_CHECK(green); - CALENDAR_NULL_ARG_CHECK(blue); + CALENDAR_NULL_ARG_CHECK(todo); - _calendar_parse_color(calendar_svc_struct_get_str((cal_struct*)((calendar_event_s*)calendar)->event_legacy, CAL_TABLE_TXT_COLOR), - red, green, blue); - return CALENDAR_ERROR_NONE; -} + int ret; + cal_struct *cs; -int calendar_get_account_db_id(calendar_h calendar, int *account_db_id) -{ - CALENDAR_NULL_ARG_CHECK(calendar); - CALENDAR_NULL_ARG_CHECK(account_db_id); + cs = (cal_struct*)((calendar_event_s*)todo)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } - *account_db_id = calendar_svc_struct_get_int((cal_struct*)((calendar_event_s*)calendar)->event_legacy, CAL_TABLE_INT_ACCOUNT_ID) == 1 ? true : false; + ret = calendar_svc_struct_set_lli(cs, + CALS_VALUE_LLI_DTSTART_UTIME, CALS_TODO_NO_DUE_DATE); + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } return CALENDAR_ERROR_NONE; } -int calendar_foreach_calendar_from_db(calendar_foreach_query_calendar_cb callback, void *user_data) +int calendar_todo_unset_due_time(calendar_todo_h todo) { - CALENDAR_NULL_ARG_CHECK(callback); - - int ret_val = CALENDAR_ERROR_NONE; - cal_iter* iter = NULL; - bool callback_return = true; + CALENDAR_NULL_ARG_CHECK(todo); - //fetch from DB - ret_val = calendar_svc_get_all(ALL_ACCOUNT_ID, ALL_CALENDAR_ID, CAL_STRUCT_CALENDAR, &iter); + int ret; + cal_struct *cs; - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; + cs = (cal_struct*)((calendar_event_s*)todo)->event_legacy; + if(cs == NULL) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; } - - if (iter == NULL) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; - } else { - while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { - cal_struct *calendar_struct = NULL; - if(calendar_svc_iter_get_info(iter, &calendar_struct) != CAL_SUCCESS) { - calendar_svc_iter_remove(&iter); - return CALENDAR_ERROR_NONE; // consider this as no data - } - - if(calendar_struct == NULL) { - calendar_svc_iter_remove(&iter); - return CALENDAR_ERROR_NONE; // consider this as no data - } - calendar_query_calendar_s query_data; - - query_data.calendar_db_id = calendar_svc_struct_get_int(calendar_struct, CAL_TABLE_INT_INDEX); - query_data.calendar_name = _calendar_safe_strdup(calendar_svc_struct_get_str(calendar_struct, CAL_TABLE_TXT_NAME)); - query_data.calendar_is_default = query_data.calendar_db_id == 1 ? true : false; - query_data.calendar_is_visible = calendar_svc_struct_get_int(calendar_struct, CAL_TABLE_INT_VISIBILITY) == 1 ? true : false; - _calendar_parse_color(calendar_svc_struct_get_str(calendar_struct, CAL_TABLE_TXT_COLOR), - &query_data.calendar_color_red, &query_data.calendar_color_green, &query_data.calendar_color_blue); - query_data.account_db_id = calendar_svc_struct_get_int(calendar_struct, CAL_TABLE_INT_ACCOUNT_ID); - - //execute callback - callback_return = callback(&query_data, user_data); - - _calendar_safe_free(query_data.calendar_name); - - calendar_svc_struct_free(&calendar_struct); - - if(callback_return == false) { - break; - } - } - calendar_svc_iter_remove(&iter); - - return CALENDAR_ERROR_NONE; - } - return CALENDAR_ERROR_NONE; + ret = calendar_svc_struct_set_lli(cs, + CALS_VALUE_LLI_DTEND_UTIME, CALS_TODO_NO_DUE_DATE); - + if (ret != CAL_SUCCESS) { + LOGE("[%s] CALENDAR_ERROR_INVALID_PARAMETER(0x%08x)", + __FUNCTION__, CALENDAR_ERROR_INVALID_PARAMETER); + return CALENDAR_ERROR_INVALID_PARAMETER; + } + return CALENDAR_ERROR_NONE; } + + diff --git a/src/calendar_private.c b/src/calendar_private.c index 239e2f2..d8ba7dc 100755 --- a/src/calendar_private.c +++ b/src/calendar_private.c @@ -11,18 +11,19 @@ * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License. + * limitations under the License. */ #include #include #include -#include -#include #include #include +#include "calendar_private.h" +#include "calendar.h" + #ifdef LOG_TAG #undef LOG_TAG #endif @@ -35,7 +36,7 @@ GList* _calendar_glist_next_until_not_deleted(GList* list) { if(list == NULL) return NULL; - + GList* glist = list; cal_value* value = glist->data; if(value == NULL) @@ -55,146 +56,210 @@ GList* _calendar_glist_next_until_not_deleted(GList* list) return glist; } -int _calendar_event_foreach(calendar_foreach_query_event_cb callback, int account_db_id, int calendar_db_id, void* user_data) -{ - int ret_val = CALENDAR_ERROR_NONE; - cal_iter* iter = NULL; - bool callback_return = true; - - //fetch from DB - ret_val = calendar_svc_get_all(account_db_id, calendar_db_id, CAL_STRUCT_SCHEDULE, &iter); - - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; - } - - if (iter == NULL) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; - } else { - while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { - calendar_event_s cal_event_from_db = {0,}; - if(calendar_svc_iter_get_info(iter, (cal_struct**)&cal_event_from_db.event_legacy) != CAL_SUCCESS) { - calendar_svc_iter_remove(&iter); - return CALENDAR_ERROR_NONE; // consider this as no data - } - - if(cal_event_from_db.event_legacy == NULL) { - calendar_svc_iter_remove(&iter); - return CALENDAR_ERROR_NONE; // consider this as no data - } - - //execute callback - callback_return = callback((calendar_event_h)&cal_event_from_db, user_data); - - calendar_svc_struct_free((cal_struct**)&cal_event_from_db.event_legacy); - - if(callback_return == false) { - break; - } - } - calendar_svc_iter_remove(&iter); - - return CALENDAR_ERROR_NONE; - } - return CALENDAR_ERROR_NONE; -} - -int _calendar_todo_foreach(calendar_foreach_query_todo_cb callback, int account_db_id, int calendar_db_id, void* user_data) -{ - int ret_val = CALENDAR_ERROR_NONE; - cal_iter* iter = NULL; - bool callback_return = true; - - //fetch from DB - ret_val = calendar_svc_get_all(account_db_id, calendar_db_id, CAL_STRUCT_TODO, &iter); - - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; - } - - if (iter == NULL) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; - } else { - while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { - calendar_event_s cal_event_from_db = {0,}; - if(calendar_svc_iter_get_info(iter, (cal_struct**)&cal_event_from_db.event_legacy) != CAL_SUCCESS) { - calendar_svc_iter_remove(&iter); - return CALENDAR_ERROR_NONE; // consider this as no data - } - - if(cal_event_from_db.event_legacy == NULL) { - calendar_svc_iter_remove(&iter); - return CALENDAR_ERROR_NONE; // consider this as no data - } - - //execute callback - callback_return = callback((calendar_todo_h)&cal_event_from_db, user_data); - - calendar_svc_struct_free((cal_struct**)&cal_event_from_db.event_legacy); - - if(callback_return == false) { - break; - } - } - calendar_svc_iter_remove(&iter); - - return CALENDAR_ERROR_NONE; - } - return CALENDAR_ERROR_NONE; -} - -int _calendar_event_query(calendar_foreach_query_event_cb callback, int calendar_db_id, char* option, const char* string_to_find, void* user_data) -{ - int ret_val = 0; - cal_iter* iter = NULL; - bool callback_return = true; - - int account_id = _calendar_get_account_db_id(calendar_db_id); - CONTACTS_INVALID_ARG_CHECK(account_id == -2); - - //fetch from DB - ret_val = calendar_svc_find_event_list(account_id, option, string_to_find, &iter); - - if (ret_val != CAL_SUCCESS) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; - } - - if (iter == NULL) { - LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); - return CALENDAR_ERROR_DB_FAILED; - } else { - while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { - calendar_event_s cal_event_from_db = {0,}; - if(calendar_svc_iter_get_info(iter, (cal_struct**)&cal_event_from_db.event_legacy) != CAL_SUCCESS) { - calendar_svc_iter_remove(&iter); - return CALENDAR_ERROR_NONE; // consider this as no data - } - - if(cal_event_from_db.event_legacy == NULL) { - calendar_svc_iter_remove(&iter); - return CALENDAR_ERROR_NONE; // consider this as no data - } - - //execute callback - callback_return = callback((calendar_event_h)&cal_event_from_db, user_data); - - calendar_svc_struct_free((cal_struct**)&cal_event_from_db.event_legacy); - if(callback_return == false) { - break; - } - } - calendar_svc_iter_remove(&iter); - - return CALENDAR_ERROR_NONE; - } - - return CALENDAR_ERROR_NONE; -} +//int _calendar_event_foreach(calendar_foreach_query_event_cb callback, int account_db_id, int calendar_db_id, void* user_data) +//{ +// int ret_val = CALENDAR_ERROR_NONE; +// cal_iter* iter = NULL; +// bool callback_return = true; +// +// //fetch from DB +// ret_val = calendar_svc_get_all(account_db_id, calendar_db_id, CAL_STRUCT_SCHEDULE, &iter); +// +// if (ret_val != CAL_SUCCESS) { +// LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); +// return CALENDAR_ERROR_DB_FAILED; +// } +// +// if (iter == NULL) { +// LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); +// return CALENDAR_ERROR_DB_FAILED; +// } else { +// while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { +// calendar_event_s cal_event_from_db = {0,}; +// if(calendar_svc_iter_get_info(iter, (cal_struct**)&cal_event_from_db.event_legacy) != CAL_SUCCESS) { +// calendar_svc_iter_remove(&iter); +// return CALENDAR_ERROR_NONE; // consider this as no data +// } +// +// if(cal_event_from_db.event_legacy == NULL) { +// calendar_svc_iter_remove(&iter); +// return CALENDAR_ERROR_NONE; // consider this as no data +// } +// +// //execute callback +// callback_return = callback((calendar_event_h)&cal_event_from_db, user_data); +// +// calendar_svc_struct_free((cal_struct**)&cal_event_from_db.event_legacy); +// +// if(callback_return == false) { +// break; +// } +// } +// calendar_svc_iter_remove(&iter); +// +// return CALENDAR_ERROR_NONE; +// } +// return CALENDAR_ERROR_NONE; +//} +// +//int _calendar_todo_foreach(calendar_foreach_query_todo_cb callback, int account_db_id, int calendar_db_id, void* user_data) +//{ +// int ret_val = CALENDAR_ERROR_NONE; +// cal_iter* iter = NULL; +// bool callback_return = true; +// +// //fetch from DB +// ret_val = calendar_svc_get_all(account_db_id, calendar_db_id, CAL_STRUCT_TODO, &iter); +// +// if (ret_val != CAL_SUCCESS) { +// LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); +// return CALENDAR_ERROR_DB_FAILED; +// } +// +// if (iter == NULL) { +// LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); +// return CALENDAR_ERROR_DB_FAILED; +// } else { +// while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { +// calendar_event_s cal_event_from_db = {0,}; +// if(calendar_svc_iter_get_info(iter, (cal_struct**)&cal_event_from_db.event_legacy) != CAL_SUCCESS) { +// calendar_svc_iter_remove(&iter); +// return CALENDAR_ERROR_NONE; // consider this as no data +// } +// +// if(cal_event_from_db.event_legacy == NULL) { +// calendar_svc_iter_remove(&iter); +// return CALENDAR_ERROR_NONE; // consider this as no data +// } +// +// //execute callback +// callback_return = callback((calendar_todo_h)&cal_event_from_db, user_data); +// +// calendar_svc_struct_free((cal_struct**)&cal_event_from_db.event_legacy); +// +// if(callback_return == false) { +// break; +// } +// } +// calendar_svc_iter_remove(&iter); +// +// return CALENDAR_ERROR_NONE; +// } +// return CALENDAR_ERROR_NONE; +//} +// +//int _calendar_calendar_query(calendar_foreach_query_calendar_book_cb callback, +// int account_db_id, int calendar_db_id, +// const char* string_to_find, void* user_data) +//{ +// int ret_val = 0; +// cal_iter* iter = NULL; +// bool callback_return = true; +// int search_field; +// +// search_field = CALS_SEARCH_FIELD_NONE; +// search_field |= CALS_SEARCH_FIELD_SUMMARY; +// search_field |= CALS_SEARCH_FIELD_DESCRIPTION; +// search_field |= CALS_SEARCH_FIELD_LOCATION; +// search_field |= CALS_SEARCH_FIELD_ATTENDEE; +// +// ret_val = calendar_svc_event_search(search_field, string_to_find, &iter); +// +// if (ret_val != CAL_SUCCESS) { +// LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); +// return CALENDAR_ERROR_DB_FAILED; +// } +// +// if (iter == NULL) { +// LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); +// return CALENDAR_ERROR_DB_FAILED; +// } else { +// while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { +// cal_struct *calendar_struct = NULL; +// if(calendar_svc_iter_get_info(iter, &calendar_struct) != CAL_SUCCESS) { +// calendar_svc_iter_remove(&iter); +// return CALENDAR_ERROR_NONE; // consider this as no data +// } +// +// if(calendar_struct == NULL) { +// calendar_svc_iter_remove(&iter); +// return CALENDAR_ERROR_NONE; // consider this as no data +// } +// +// calendar_query_calendar_book_s query_data; +// +// query_data.calendar_db_id = calendar_svc_struct_get_int(calendar_struct, CAL_TABLE_INT_INDEX); +// query_data.calendar_name = _calendar_safe_strdup(calendar_svc_struct_get_str(calendar_struct, CAL_TABLE_TXT_NAME)); +// query_data.calendar_is_default = query_data.calendar_db_id == 1 ? true : false; +// query_data.calendar_is_visible = calendar_svc_struct_get_int(calendar_struct, CAL_TABLE_INT_VISIBILITY) == 1 ? true : false; +// _calendar_parse_color(calendar_svc_struct_get_str(calendar_struct, CAL_TABLE_TXT_COLOR), +// &query_data.calendar_color_red, &query_data.calendar_color_green, &query_data.calendar_color_blue); +// query_data.account_db_id = calendar_svc_struct_get_int(calendar_struct, CAL_TABLE_INT_ACCOUNT_ID); +// +// //execute callback +// callback_return = callback(&query_data, user_data); +// +// _calendar_safe_free(query_data.calendar_name); +// +// calendar_svc_struct_free(&calendar_struct); +// +// if(callback_return == false) { +// break; +// } +// } +// calendar_svc_iter_remove(&iter); +// +// return CALENDAR_ERROR_NONE; +// } +// return CALENDAR_ERROR_NONE; +//} +// +//int _calendar_event_query(calendar_foreach_query_event_cb callback, int calendar_db_id, char* option, const char* string_to_find, void* user_data) +//{ +// int ret_val = 0; +// cal_iter* iter = NULL; +// bool callback_return = true; +// +// int account_id = _calendar_get_account_db_id(calendar_db_id); +// CALENDAR_INVALID_ARG_CHECK(account_id == -2); +// +// //fetch from DB +// ret_val = calendar_svc_find_event_list(account_id, option, string_to_find, &iter); +// +// if (ret_val != CAL_SUCCESS) { +// LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); +// return CALENDAR_ERROR_DB_FAILED; +// } +// +// if (iter == NULL) { +// LOGE("[%s] CALENDAR_ERROR_DB_FAILED(0x%08x)", __FUNCTION__, CALENDAR_ERROR_DB_FAILED); +// return CALENDAR_ERROR_DB_FAILED; +// } +// +// while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { +// calendar_event_s cal_event_from_db = {0,}; +// if(calendar_svc_iter_get_info(iter, (cal_struct**)&cal_event_from_db.event_legacy) != CAL_SUCCESS) { +// calendar_svc_iter_remove(&iter); +// return CALENDAR_ERROR_NONE; // consider this as no data +// } +// +// if(cal_event_from_db.event_legacy == NULL) { +// calendar_svc_iter_remove(&iter); +// return CALENDAR_ERROR_NONE; // consider this as no data +// } +// +// //execute callback +// callback_return = callback((calendar_event_h)&cal_event_from_db, user_data); +// +// calendar_svc_struct_free((cal_struct**)&cal_event_from_db.event_legacy); +// if(callback_return == false) { +// break; +// } +// } +// calendar_svc_iter_remove(&iter); +// +// return CALENDAR_ERROR_NONE; +//} int _calendar_get_account_db_id(int calendar_db_id) { @@ -223,7 +288,7 @@ void _calendar_parse_color(char* color_string, unsigned char* red, unsigned char *red = 0; *green = 0; *blue = 0; - + if(color_string == NULL) { return; } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100755 index 0000000..8536081 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,55 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +SET(fw_name "capi-social-calendar") +SET(fw_test "${fw_name}-test") + +INCLUDE(FindPkgConfig) +pkg_check_modules(${fw_test} REQUIRED glib-2.0 capi-social-calendar calendar-service) +FOREACH(flag ${${fw_test}_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall") +INCLUDE_DIRECTORIES(../include) + +#ADD_EXECUTABLE("social-calendar" calendar_test.c) +#TARGET_LINK_LIBRARIES("social-calendar" ${fw_name} ${${fw_test}_LDFLAGS}) + +aux_source_directory(. sources) +FOREACH(src ${sources}) + GET_FILENAME_COMPONENT(src_name ${src} NAME_WE) + MESSAGE("${src_name}") + ADD_EXECUTABLE(${src_name} ${src}) + TARGET_LINK_LIBRARIES(${src_name} ${fw_name} ${${fw_test}_LDFLAGS} ${fw_name}) +ENDFOREACH() + +IF(UNIX) + +ADD_CUSTOM_TARGET (distclean @echo cleaning for source distribution) +ADD_CUSTOM_COMMAND( + DEPENDS clean + COMMENT "distribution clean" + COMMAND find + ARGS . + -not -name config.cmake -and \( + -name tester.c -or + -name Testing -or + -name CMakeFiles -or + -name cmake.depends -or + -name cmake.check_depends -or + -name CMakeCache.txt -or + -name cmake.check_cache -or + -name *.cmake -or + -name Makefile -or + -name core -or + -name core.* -or + -name gmon.out -or + -name install_manifest.txt -or + -name *.pc -or + -name *~ \) + | grep -v TC | xargs rm -rf + TARGET distclean + VERBATIM +) + +ENDIF(UNIX) + diff --git a/test/calendar_test.c b/test/calendar_test.c new file mode 100755 index 0000000..aae2235 --- /dev/null +++ b/test/calendar_test.c @@ -0,0 +1,464 @@ +/* + * Copyright (c) 2011 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +static char* calendar_error_e_2_string(int error) +{ + switch(error) + { + case CALENDAR_ERROR_OUT_OF_MEMORY: return "CALENDAR_ERROR_OUT_OF_MEMORY"; + case CALENDAR_ERROR_ITERATOR_END: return "CALENDAR_ERROR_ITERATOR_END"; + case CALENDAR_ERROR_INVALID_PARAMETER: return "CALENDAR_ERROR_INVALID_PARAMETER"; + case CALENDAR_ERROR_DB_FAILED: return "CALENDAR_ERROR_DB_FAILED"; + case CALENDAR_ERROR_NONE: return "CALENDAR_ERROR_NONE"; + case CALENDAR_ERROR_NO_DATA: return "CALENDAR_ERROR_NO_DATA"; + } + return "UNKNOWN-CALENDAR-ERROR"; +} + +void print_detail_event(calendar_event_h event) +{ + char *subject = NULL; + char *name = NULL; + char *description = NULL; + calendar_attendee_iterator_h iterator = NULL; + calendar_attendee_h attendee = NULL; + + printf("\t # ---------------------------------- #\n"); + calendar_event_get_subject(event, &subject); + printf("\t # subject : %s\n", subject); + if(subject != NULL) + free(subject); + calendar_event_get_description(event, &description); + printf("\t # description : %s\n", description); + if(description != NULL) + free(description); + bool is_all_day_event = false; + calendar_event_get_is_all_day_event(event, &is_all_day_event); + if(is_all_day_event == true) { + struct tm start_time; + calendar_event_get_start_time(event, &start_time); + printf("# %d-%d-%d, all day\n", start_time.tm_year + 1900, start_time.tm_mon + 1, start_time.tm_mday); + } else { + struct tm start_time; + struct tm end_time; + calendar_event_get_start_time(event, &start_time); + calendar_event_get_end_time(event, &end_time); + printf("\t # start %d-%d-%d %d:%d:%d\n", start_time.tm_year + 1900, start_time.tm_mon + 1, start_time.tm_mday, + start_time.tm_hour, start_time.tm_min, start_time.tm_sec); + printf("\t # end %d-%d-%d %d:%d:%d\n", end_time.tm_year + 1900, end_time.tm_mon + 1, end_time.tm_mday, + end_time.tm_hour, end_time.tm_min, end_time.tm_sec); + } + + calendar_event_get_attendee_iterator(event, &iterator); + if(iterator == NULL) { + return; + } + while(calendar_attendee_iterator_has_next(iterator)) { + calendar_attendee_iterator_next(&iterator, &attendee); + calendar_attendee_get_name(attendee, &name); + printf("\t # attendee : %s\n", name); + if(name != NULL) + free(name); + } +} + +void print_detail_timezone_event(calendar_event_h event) +{ + char* timezone_name = NULL; + calendar_event_get_timezone(event, &timezone_name); + printf("\t\t timezone_name = %s\n", timezone_name); + if(timezone_name != NULL) + free(timezone_name); +} + +bool get_all_event_callback(calendar_event_h event, void *user_data) +{ + printf("\t #get_all_event_callback()\n"); +// print_detail_event(event); + print_detail_timezone_event(event); + printf("\t #get_all_event_callback() end\n"); + return true; +} + +#include +void test_insert() +{ + calendar_event_h event = NULL; + calendar_attendee_h attendee1 = NULL; + calendar_attendee_h attendee2 = NULL; + + int id = 0; + struct tm tm_now = {0,}; + int ret = 0; + + ret = calendar_event_create(&event); + printf("\tcalendar_event_create() ret = %d\n", ret); + + ret = calendar_event_set_subject(event, "test subject"); + printf("\tcalendar_event_set_subject() ret = %d\n", ret); + + ret = calendar_event_set_description(event, "test description"); + printf("\tcalendar_event_set_description() ret = %d\n", ret); + + ret = calendar_event_set_location(event, "Suwon"); + printf("\tcalendar_event_set_location() ret = %d\n", ret); + + tm_now.tm_year = 112; // 2011 + tm_now.tm_mon = 0; // Aug + tm_now.tm_mday = 26; // 27th + tm_now.tm_hour = 10; // 10am + ret = calendar_event_set_start_time(event, tm_now); + printf("\tcalendar_event_set_start_time() ret = %d\n", ret); + tm_now.tm_hour = 12; // 12am + ret = calendar_event_set_end_time(event, tm_now); + printf("\tcalendar_event_set_end_time() ret = %d\n", ret); +// ret = calendar_event_set_is_all_day_event(event, true); +// printf("\tcalendar_event_set_is_all_day_event() ret = %d\n", ret); + + ret = calendar_event_set_timezone(event, "Asia/Shanghai"); + printf("\tcalendar_set_timezone() ret = %d\n", ret); + + + ret = calendar_event_add_attendee(event, &attendee1); + printf("\tcalendar_event_add_attendee() ret = %d\n", ret); + ret = calendar_attendee_set_name(attendee1, "sora lee"); + printf("\tcalendar_attendee_set_name() ret = %d\n", ret); + ret = calendar_attendee_set_email(attendee1, "sl@sl.com"); + printf("\tcalendar_attendee_set_email() ret = %d\n", ret); +// ret = calendar_event_add_attendee(event, attendee1); +// printf("\tcalendar_event_add_attendee() ret = %d\n", ret); + + + ret = calendar_event_add_attendee(event, &attendee2); + printf("\tcalendar_event_add_attendee() ret = %d\n", ret); + ret = calendar_attendee_set_name(attendee2, "dohyun yoon"); + printf("\tcalendar_attendee_set_name() ret = %d\n", ret); + ret = calendar_attendee_set_email(attendee2, "dy@dy.com"); + printf("\tcalendar_attendee_set_email() ret = %d\n", ret); +// ret = calendar_event_add_attendee(event, attendee2); +// printf("\tcalendar_event_add_attendee() ret = %d\n", ret); + + calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_INT_CALENDAR_ID, 2); + calendar_svc_struct_set_int((cal_struct*)((calendar_event_s*)event)->event_legacy, CAL_VALUE_INT_ACCOUNT_ID, 1); + ret = calendar_event_insert_to_db(event, 1, &id); + printf("\tcalendar_event_insert_to_db() ret = %d, id = %d\n", ret, id); + + ret = calendar_event_destroy(event); + printf("\tcalendar_event_destroy() ret = %d\n", ret); +} + +int g_recurrence_event_id = 0; + +void test_insert2() +{ + calendar_event_h event = NULL; + calendar_attendee_h attendee1 = NULL; + calendar_attendee_h attendee2 = NULL; + + int id = 0; + struct tm tm_start = {0}; + struct tm tm_end = {0}; + struct tm tm_recurrence = {0}; + int ret = 0; + + ret = calendar_event_create(&event); + printf("\tcalendar_event_create() ret = %d\n", ret); + + ret = calendar_event_set_subject(event, "Hospital"); + printf("\tcalendar_event_set_subject() ret = %d\n", ret); + + ret = calendar_event_set_description(event, "I have to"); + printf("\tcalendar_event_set_description() ret = %d\n", ret); + + ret = calendar_event_set_location(event, "Seoul"); + printf("\tcalendar_event_set_location() ret = %d\n", ret); + + tm_start.tm_year = 112; // 2011 + tm_start.tm_mon = 0; // may + tm_start.tm_mday = 23; // 23th + tm_start.tm_hour = 10; // 10am + + tm_end.tm_year = 112; // 2011 + tm_end.tm_mon = 0; // may + tm_end.tm_mday = 23; // 23th + tm_end.tm_hour = 11; // 11am + ret = calendar_event_set_start_time(event, tm_start); + printf("\tcalendar_event_set_start_time() ret = %d\n", ret); + ret = calendar_event_set_end_time(event, tm_end); + printf("\tcalendar_event_set_end_time() ret = %d\n", ret); + + memcpy(&tm_recurrence, &tm_end, sizeof(tm_recurrence)); // proper memcpy + tm_recurrence.tm_mon = 9; // Oct + ret = calendar_event_set_recurrence_until_date(event, tm_recurrence); + printf("\tcalendar_event_set_recurrence_until_date() ret = %d\n", ret); + ret = calendar_event_set_recurrence_frequency(event, CALENDAR_RECURRENCE_WEEKLY); + printf("\tcalendar_event_set_recurrence_frequency() ret = %d\n", ret); + ret = calendar_event_set_recurrence_week_flag(event, CALENDAR_WEEK_FLAG_MON | CALENDAR_WEEK_FLAG_WED); + printf("\tcalendar_event_set_recurrence_week_flag() ret = %d\n", ret); + int week_flag = 0; + ret = calendar_event_get_recurrence_week_flag(event, &week_flag); + printf("\tcalendar_event_set_recurrence_week_flag() ret = %d, week_flag=%d\n", ret, week_flag); + + ret = calendar_event_add_attendee(event, &attendee1); + printf("\tcalendar_event_add_attendee() ret = %d\n", ret); + ret = calendar_attendee_set_name(attendee1, "Andrew Lim"); + printf("\tcalendar_attendee_set_name() ret = %d\n", ret); + ret = calendar_attendee_set_email(attendee1, "al@al.com"); + printf("\tcalendar_attendee_set_email() ret = %d\n", ret); +// ret = calendar_event_add_attendee(event, attendee1); +// printf("\tcalendar_event_add_attendee() ret = %d\n", ret); + + + ret = calendar_event_add_attendee(event, &attendee2); + printf("\tcalendar_event_add_attendee() ret = %d\n", ret); + ret = calendar_attendee_set_name(attendee2, "Big joe"); + printf("\tcalendar_attendee_set_name() ret = %d\n", ret); + ret = calendar_attendee_set_email(attendee2, "bj@bj.com"); + printf("\tcalendar_attendee_set_email() ret = %d\n", ret); +// ret = calendar_event_add_attendee(event, attendee2); +// printf("\tcalendar_event_add_attendee() ret = %d\n", ret); + + print_detail_event(event); + + ret = calendar_event_insert_to_db(event, 1, &id); + printf("\tcalendar_event_insert_to_db() ret = %d, id = %d\n", ret, id); + g_recurrence_event_id = id; + +// ret = calendar_event_delete_from_db(id); +// printf("\tcalendar_event_delete_from_db() ret = %d, id = %d\n", ret, id); + +// ret = calendar_event_set_subject(event, "G. Hospital"); +// printf("\tcalendar_event_set_subject() ret = %d\n", ret); + +// ret = calendar_event_update_to_db(event); +// printf("\tcalendar_event_update_to_db() ret = %d, id = %d\n", ret, id); + + ret = calendar_event_destroy(event); + printf("\tcalendar_event_destroy() ret = %d\n", ret); +} + +bool delete_all_event_callback(calendar_event_h event, void *user_data) +{ + int id = -1; + int ret = 0; + ret = calendar_event_get_db_id(event, &id); + printf("\tcalendar_event_get_db_id() ret = %d\n", ret); + ret = calendar_event_delete_from_db(id); + printf("\tcalendar_event_delete_from_db() ret = %d\n", ret); + return true; +} + +void test_delete_all() +{ + printf("-------- test_delete_all ------------\n"); + calendar_foreach_event_from_db(delete_all_event_callback, NULL); + printf("-------- test_delete_all END --------\n"); +} + +void subscribing(void* data) +{ + +} + +void vcalendar_test() +{ + calendar_event_h event = NULL; + calendar_attendee_h attendee1 = NULL; + calendar_attendee_h attendee2 = NULL; + char* vcalendar_stream = NULL; + + struct tm tm_now = {0,}; + int ret = 0; + + ret = calendar_event_create(&event); + + ret = calendar_event_set_subject(event, "test subject"); + + ret = calendar_event_set_description(event, "test description"); + + ret = calendar_event_set_location(event, "Suwon"); + + tm_now.tm_year = 111; // 2011 + tm_now.tm_mon = 7; // Aug + tm_now.tm_mday = 26; // 27th + tm_now.tm_hour = 10; // 10am + ret = calendar_event_set_start_time(event, tm_now); + tm_now.tm_hour = 12; // 12am + ret = calendar_event_set_end_time(event, tm_now); + + ret = calendar_event_set_timezone(event, "Asia/Shanghai"); + + + ret = calendar_event_add_attendee(event, &attendee1); + ret = calendar_attendee_set_name(attendee1, "sora lee"); + ret = calendar_attendee_set_email(attendee1, "sl@sl.com"); + + + ret = calendar_event_add_attendee(event, &attendee2); + ret = calendar_attendee_set_name(attendee2, "dohyun yoon"); + ret = calendar_attendee_set_email(attendee2, "dy@dy.com"); + + ret = calendar_event_get_vcalendar_from_event(event, &vcalendar_stream); + printf("calendar_event_get_vcalendar_from_event, ret = %d\n", ret); + printf("vcalendar_stream = %s\n", vcalendar_stream); + calendar_event_destroy(event); + + ret = calendar_event_get_from_vcalendar(vcalendar_stream, &event); + printf("calendar_event_get_from_vcalendar, ret = %d\n", ret); + char* subject = NULL; + ret = calendar_event_get_subject(event, &subject); + printf("calendar_event_get_subject, ret = %d, subject = %s\n", ret, subject); + free(subject); + + free(vcalendar_stream); + calendar_event_destroy(event); +} +/* +void print_recurrence_event_date() +{ + int ret = 0; + calendar_event_h event = NULL; + ret = calendar_event_get_from_db(g_recurrence_event_id, &event); + printf("calendar_event_get_from_db, ret = %d\n", ret); + struct tm start = {0}; + struct tm end = {0}; + struct tm next_start = {0}; + struct tm next_end = {0}; + calendar_event_get_start_time(event, &start); + calendar_event_get_end_time(event, &end); + printf("%.4d-%.2d-%.2d %.2d:%.2d:%.2d ~ %.4d-%.2d-%.2d %.2d:%.2d:%.2d\n", + start.tm_year + 1900, start.tm_mon + 1, start.tm_mday + 1, start.tm_hour, start.tm_min, start.tm_sec, + end.tm_year + 1900, end.tm_mon + 1, end.tm_mday + 1, end.tm_hour, end.tm_min, end.tm_sec + ); + while(calendar_event_get_next_recurrence_time(event, start, end, &next_start, &next_end) == CALENDAR_ERROR_NONE) { + memcpy(&start, &next_start, sizeof(struct tm)); + memcpy(&end, &next_end, sizeof(struct tm)); + + printf("%.4d-%.2d-%.2d %.2d:%.2d:%.2d ~ %.4d-%.2d-%.2d %.2d:%.2d:%.2d\n", + start.tm_year + 1900, start.tm_mon + 1, start.tm_mday + 1, start.tm_hour, start.tm_min, start.tm_sec, + end.tm_year + 1900, end.tm_mon + 1, end.tm_mday + 1, end.tm_hour, end.tm_min, end.tm_sec + ); + + } +} +*/ + +int main(int argc, char *argv[]) +{ + printf("test 20110711 1\n"); + +// vcalendar_test(); +#if 0 + int ret = 0; + ret = calendar_connect(); + printf("calendar_connect() ret = %d\n", ret); + + cal_iter* iter = NULL; + ret = calendar_svc_get_all(ALL_ACCOUNT_ID, 0, CAL_STRUCT_CALENDAR, &iter); + printf("calendar_svc_get_all() ret = %d\n", ret); + if (iter == NULL) { + printf("iter == NULL\n"); + } else { + while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { + cal_struct *calendar = NULL; + if(calendar_svc_iter_get_info(iter, &calendar) != CAL_SUCCESS) { + calendar_svc_iter_remove(&iter); + printf("calendar_svc_iter_get_info(iter, (cal_struct**)&calendar) != CAL_SUCCESS\n"); + } + + int index = calendar_svc_struct_get_int(calendar, CAL_TABLE_INT_INDEX); + int account_id = calendar_svc_struct_get_int(calendar, CAL_TABLE_INT_ACCOUNT_ID); + char* calendar_id = calendar_svc_struct_get_str(calendar, CAL_TABLE_TXT_CALENDAR_ID); + char* calendar_name = calendar_svc_struct_get_str(calendar, CAL_TABLE_TXT_NAME); + int visibility = calendar_svc_struct_get_int(calendar, CAL_TABLE_INT_VISIBILITY); + printf("index = %d, account_id = %d, calendar_id = %s, calendar_name = %s, visibility = %d\n", index, account_id, calendar_id, calendar_name, visibility); + + calendar_svc_struct_free(&calendar); + } + calendar_svc_iter_remove(&iter); + } + + printf("-------------------------------------\n"); + iter = NULL; + ret = calendar_svc_get_all(LOCAL_ACCOUNT_ID, DEFAULT_CALENDAR_ID, CAL_STRUCT_CALENDAR, &iter); + printf("calendar_svc_get_all() ret = %d\n", ret); + if (iter == NULL) { + printf("iter == NULL\n"); + } else { + while (calendar_svc_iter_next(iter) == CAL_SUCCESS) { + cal_struct *calendar = NULL; + if(calendar_svc_iter_get_info(iter, &calendar) != CAL_SUCCESS) { + calendar_svc_iter_remove(&iter); + printf("calendar_svc_iter_get_info(iter, (cal_struct**)&calendar) != CAL_SUCCESS\n"); + } + + int index = calendar_svc_struct_get_int(calendar, CAL_TABLE_INT_INDEX); + int account_id = calendar_svc_struct_get_int(calendar, CAL_TABLE_INT_ACCOUNT_ID); + char* calendar_id = calendar_svc_struct_get_str(calendar, CAL_TABLE_TXT_CALENDAR_ID); + char* calendar_name = calendar_svc_struct_get_str(calendar, CAL_TABLE_TXT_NAME); + int visibility = calendar_svc_struct_get_int(calendar, CAL_TABLE_INT_VISIBILITY); + printf("index = %d, account_id = %d, calendar_id = %s, calendar_name = %s, visibility = %d\n", index, account_id, calendar_id, calendar_name, visibility); + + calendar_svc_struct_free(&calendar); + } + calendar_svc_iter_remove(&iter); + } + + ret = calendar_disconnect(); + printf("calendar_disconnect() ret = %d\n", ret); +#endif + + +#if 1 + int ret = 0; + ret = calendar_connect(); + printf("calendar_connect() ret = %d\n", ret); + + + test_delete_all(); +// calendar_event_api_test(); + + test_insert(); + test_insert2(); +// print_recurrence_event_date(g_recurrence_event_id); + + printf("-------- calendar_foreach_event_from_db ------------\n"); + ret = calendar_foreach_event_from_db(get_all_event_callback, NULL); + printf("-------- calendar_foreach_event_from_db END --------\n"); + +// printf("------------- find description -------------\n"); +// ret = calendar_query_event_by_description(get_all_event_callback, "test", NULL); +// printf("------------- find description END ---------\n"); +// printf("\tcalendar_foreach_calendar_event_from_db() ret = %d\n", ret); + +// printf("-------- calendar_foreach_timezone ------------\n"); +// ret = calendar_foreach_timezone(get_all_timezone_cb, NULL); +// printf("-------- calendar_foreach_timezone END --------\n"); + + ret = calendar_disconnect(); + printf("calendar_disconnect() ret = %d\n", ret); +#endif + calendar_error_e_2_string(0); + return 0; +} + -- 2.7.4