From b8c32a1dab6d22533eea010e0b479d29a63805ee Mon Sep 17 00:00:00 2001 From: San Cho Date: Tue, 2 Apr 2013 14:22:21 +0900 Subject: [PATCH] add adding account to account-svc Change-Id: Ib2bf1ab4c1a67a9256caf76ae8a1df13e95f016f --- main/org.tizen.email.xml | 2 +- packaging/org.tizen.email.spec | 1 + setting/CMakeLists.txt | 3 +- setting/include/email-setting-utils.h | 2 + setting/src/email-setting-utils.c | 112 +++++++++++++++++++++++++++++++++ setting/src/email-view-manual-setup.c | 63 +++++++++++++------ setting/src/email-view-sync-schedule.c | 34 +++++++--- 7 files changed, 186 insertions(+), 31 deletions(-) diff --git a/main/org.tizen.email.xml b/main/org.tizen.email.xml index 1db18f0..1fb4902 100755 --- a/main/org.tizen.email.xml +++ b/main/org.tizen.email.xml @@ -135,7 +135,7 @@ - + /usr/share/icons/default/small/org.tizen.email.png /usr/share/icons/default/small/org.tizen.email.png diff --git a/packaging/org.tizen.email.spec b/packaging/org.tizen.email.spec index d950356..59fee2a 100755 --- a/packaging/org.tizen.email.spec +++ b/packaging/org.tizen.email.spec @@ -40,6 +40,7 @@ BuildRequires: pkgconfig(capi-media-image-util) BuildRequires: pkgconfig(capi-content-media-content) BuildRequires: pkgconfig(libexif) BuildRequires: pkgconfig(libxml-2.0) +BuildRequires: pkgconfig(accounts-svc) Requires: email-service Requires: libug-worldclock-efl diff --git a/setting/CMakeLists.txt b/setting/CMakeLists.txt index 4eaede7..0b3ad7d 100755 --- a/setting/CMakeLists.txt +++ b/setting/CMakeLists.txt @@ -31,7 +31,8 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/common/include) INCLUDE(FindPkgConfig) pkg_check_modules(pkgs-setting REQUIRED ecore glib-2.0 gobject-2.0 elementary utilX vconf - appcore-efl email-service ui-gadget-1 bundle dlog edbus capi-appfw-application status libxml-2.0 contacts-service2) + appcore-efl email-service ui-gadget-1 bundle dlog edbus capi-appfw-application + status libxml-2.0 contacts-service2 accounts-svc) FOREACH(flag ${pkgs-setting_CFLAGS}) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") diff --git a/setting/include/email-setting-utils.h b/setting/include/email-setting-utils.h index e1d0268..315e8fe 100755 --- a/setting/include/email-setting-utils.h +++ b/setting/include/email-setting-utils.h @@ -55,6 +55,8 @@ Evas_Object *setting_get_list_notify(struct viewdata *vd, char *header, char *btn2_lb, popup_cb resp_cb2, Evas_Object *content); Evas_Object *setting_get_small_notify(struct viewdata *vd, char *label); Evas_Object *setting_add_inner_layout(struct viewdata *vd); +int setting_add_account_to_account_svc(email_account_t *account); +int setting_delete_account_from_account_svc(int account_svc_id); gboolean setting_get_validation(char *email_addr); gboolean setting_new_acct_init(struct viewdata *vd); diff --git a/setting/src/email-setting-utils.c b/setting/src/email-setting-utils.c index 5d78fa3..c01a160 100755 --- a/setting/src/email-setting-utils.c +++ b/setting/src/email-setting-utils.c @@ -23,6 +23,8 @@ #include "email-view-sync-schedule.h" #include "email-view-sync-setup.h" #include "stdarg.h" +#include "account.h" +#include "account-types.h" Evas_Object *setting_get_notify(struct viewdata *vd, char *header, @@ -982,4 +984,114 @@ void setting_free_sp_desc(EmailSettingUGD *ugd) ugd->sp_list = NULL; } } + +char *setting_get_sp_name(EmailSettingUGD *ugd, int index) +{ + debug_log(""); + + if (!ugd || index < 0) { + debug_log("invalid parameter!"); + return NULL; + } + + if (index == 0) { + return g_strdup(EMAIL_SETTING_STRING_OTHERS); + } + + int i = 0; + for (i = 0; i < ugd->sp_list_len; i++) { + if (ugd->sp_list[i].index == index) { + if (g_str_has_prefix(ugd->sp_list[i].name_str_id, "IDS_EMAIL")) + return g_strdup(_(ugd->sp_list[i].name_str_id)); + else + return g_strdup(dgettext("sys_string", ugd->sp_list[i].name_str_id)); + } + } + + debug_log("index is not found"); + return NULL; +} + +int setting_add_account_to_account_svc(email_account_t *account) +{ + debug_log(""); + int ret = ACCOUNT_ERROR_NONE; + int account_svc_id = -1; + account_h account_handle = NULL; + + retvm_if(account == NULL, -1, "invalid parameter!"); + + ret = account_connect(); + retvm_if(ret != ACCOUNT_ERROR_NONE, -1, "account_connect failed: %d", ret); + + ret = account_create(&account_handle); + if (ret != ACCOUNT_ERROR_NONE) { + debug_error("account_create failed: %d", ret); + goto CATCH; + } + + ret = account_set_user_name(account_handle, account->incoming_server_user_name); + warn_if(ret != ACCOUNT_ERROR_NONE, "account_set_user_name failed: %d", ret); + + ret = account_set_domain_name(account_handle, account->account_name); + warn_if(ret != ACCOUNT_ERROR_NONE, "account_set_domain_name failed: %d", ret); + + ret = account_set_email_address(account_handle, account->user_email_address); + warn_if(ret != ACCOUNT_ERROR_NONE, "account_set_email_address failed: %d", ret); + + ret = account_set_source(account_handle, "SLP EMAIL"); + warn_if(ret != ACCOUNT_ERROR_NONE, "account_set_source failed: %d", ret); + + ret = account_set_package_name(account_handle, "email-setting-efl"); + warn_if(ret != ACCOUNT_ERROR_NONE, "account_set_package_name failed: %d", ret); + + ret = account_set_capability(account_handle , ACCOUNT_SUPPORTS_CAPABILITY_EMAIL , ACCOUNT_CAPABILITY_ENABLED); + warn_if(ret != ACCOUNT_ERROR_NONE, "account_set_capability failed: %d", ret); + + ret = account_set_sync_support(account_handle, ACCOUNT_SYNC_STATUS_IDLE); + warn_if(ret != ACCOUNT_ERROR_NONE, "account_set_sync_support failed: %d", ret); + + if (account->logo_icon_path) { + ret = account_set_icon_path(account_handle, account->logo_icon_path); + warn_if(ret != ACCOUNT_ERROR_NONE, "account_set_icon_path failed: %d", ret); + } + + ret = account_insert_to_db(account_handle, &account_svc_id); + if (ret != ACCOUNT_ERROR_NONE) { + debug_error("account_insert_to_db failed: %d", ret); + goto CATCH; + } + + account->account_svc_id = account_svc_id; + +CATCH: + if (account_handle) + account_destroy(account_handle); + account_disconnect(); + + return ret; +} + +int setting_delete_account_from_account_svc(int account_svc_id) +{ + debug_log(""); + int ret = ACCOUNT_ERROR_NONE; + + retvm_if(account_svc_id <= 0, -1, "invalid parameter!"); + + ret = account_connect(); + retvm_if(ret != ACCOUNT_ERROR_NONE, -1, "account_connect failed: %d", ret); + + ret = account_delete_from_db_by_id(account_svc_id); + if(ret != ACCOUNT_ERROR_NONE) { + debug_error("account_delete_from_db_by_id failed: %d", ret); + goto CATCH; + } + +CATCH: + account_disconnect(); + + return ret; +} + /* EOF */ diff --git a/setting/src/email-view-manual-setup.c b/setting/src/email-view-manual-setup.c index c1f80db..79d00c3 100755 --- a/setting/src/email-view-manual-setup.c +++ b/setting/src/email-view-manual-setup.c @@ -17,6 +17,8 @@ #include "email-setting.h" #include "email-setting-account-set.h" #include "email-setting-utils.h" +#include +#include static int _create(struct viewdata *vd); static int _update(struct viewdata *vd); @@ -199,6 +201,7 @@ void setting_manual_validation_failed_cb(EmailSettingUGD *ugd, gboolean canceled } int account_id; + int error_code; err_msg = setting_get_service_fail_type(ugd->err_code); account_id = ugd->account_id; @@ -213,6 +216,9 @@ void setting_manual_validation_failed_cb(EmailSettingUGD *ugd, gboolean canceled ugd->popup_validate = NULL; } + error_code = setting_delete_account_from_account_svc(ugd->new_account->account_svc_id); + debug_log("setting_delete_account_from_account_svc: %d", error_code); + if (canceled) { snprintf(fail_msg, sizeof(fail_msg), "%s", EMAIL_SETTING_STRING_ACCOUNT_CREATION_CANCELLED); @@ -667,38 +673,57 @@ static int _create_account(void *data) EmailSettingUGD *ugd = vd->ugd; int error_code = 0; - if (email_engine_add_account_with_validation(p->account, &account_id, - &(p->handle), &error_code)) { - debug_log("Account added to Email Service DB"); - vd->ugd->start_account_validation = 1; - vd->ugd->manual_setup = 1; - ugd->handle = p->handle; - _validate_account(vd, account_id); - } else { - debug_log("Fail to make account"); + // add to account_svc + error_code = setting_add_account_to_account_svc(ugd->new_account); + if (error_code == ACCOUNT_ERROR_NONE) { + if (email_engine_add_account_with_validation(p->account, &account_id, + &(p->handle), &error_code)) { + debug_log("Account added to Email Service DB"); + vd->ugd->start_account_validation = 1; + vd->ugd->manual_setup = 1; + ugd->handle = p->handle; + _validate_account(vd, account_id); + } else { + debug_log("Fail to make account"); - if (ugd->popup_one) { - evas_object_del(ugd->popup_one); - ugd->popup_one = NULL; - } - if (ugd->popup_validate) { - evas_object_del(ugd->popup_validate); - ugd->popup_validate = NULL; - } + if (ugd->popup_one) { + evas_object_del(ugd->popup_one); + ugd->popup_one = NULL; + } + if (ugd->popup_validate) { + evas_object_del(ugd->popup_validate); + ugd->popup_validate = NULL; + } - if (error_code == EMAIL_ERROR_ALREADY_EXISTS) + if (error_code == EMAIL_ERROR_ALREADY_EXISTS) + ugd->popup_one = setting_get_notify(vd, + EMAIL_SETTING_STRING_WARNING, + EMAIL_SETTING_STRING_ALREADY_EXIST, 1, + EMAIL_SETTING_STRING_OK, + _popup_ok_cb, NULL, NULL); + else + ugd->popup_one = setting_get_notify(vd, + EMAIL_SETTING_STRING_WARNING, + EMAIL_SETTING_STRING_UNABLE_TO_ADD_ACCOUNT, 1, + EMAIL_SETTING_STRING_OK, + _popup_ok_cb, NULL, NULL); + } + } else { + if (error_code == ACCOUNT_ERROR_DUPLICATED) { ugd->popup_one = setting_get_notify(vd, EMAIL_SETTING_STRING_WARNING, EMAIL_SETTING_STRING_ALREADY_EXIST, 1, EMAIL_SETTING_STRING_OK, _popup_ok_cb, NULL, NULL); - else + } else { ugd->popup_one = setting_get_notify(vd, EMAIL_SETTING_STRING_WARNING, EMAIL_SETTING_STRING_UNABLE_TO_ADD_ACCOUNT, 1, EMAIL_SETTING_STRING_OK, _popup_ok_cb, NULL, NULL); + } } + return TRUE; } diff --git a/setting/src/email-view-sync-schedule.c b/setting/src/email-view-sync-schedule.c index 9c3131f..4c8d6c6 100755 --- a/setting/src/email-view-sync-schedule.c +++ b/setting/src/email-view-sync-schedule.c @@ -22,6 +22,8 @@ #include #include #include +#include +#include static email_account_t *account_data = NULL; static struct viewdata *g_vd = NULL; @@ -854,6 +856,8 @@ static void _popup_delete_ok_cb(void *data, Evas_Object *obj, void *event_info) struct viewdata *vd = (struct viewdata *)data; struct priv_data *p = vd->priv; EmailSettingUGD *ugd = vd->ugd; + int account_id = vd->ugd->account_id; + int account_svc_id = account_data->account_svc_id; if (ugd->popup_one) { evas_object_del(ugd->popup_one); @@ -864,18 +868,28 @@ static void _popup_delete_ok_cb(void *data, Evas_Object *obj, void *event_info) ugd->popup_validate = NULL; } - int account_id = vd->ugd->account_id; - int ret = email_engine_delete_account(account_id); - - if (ret) { - p->account_deleted = TRUE; - ugd->del_timer = ecore_timer_add(0.5, _after_delete_cb, vd); - debug_log("delete success"); + // delete account from account_svc + int ret = setting_delete_account_from_account_svc(account_svc_id); + if (ret == ACCOUNT_ERROR_NONE) { + // delete account from email_svc + ret = email_engine_delete_account(account_id); + if (ret) { + p->account_deleted = TRUE; + ugd->del_timer = ecore_timer_add(0.5, _after_delete_cb, vd); + debug_log("delete success"); + } else { + ugd->popup_one = setting_get_notify(vd, EMAIL_SETTING_STRING_WARNING, + EMAIL_SETTING_STRING_UNABLE_DELETE, 1, + EMAIL_SETTING_STRING_OK, + _popup_cancel_cb, NULL, NULL); + debug_log("delete failed"); + } } else { + debug_error("setting_delete_account_from_account_svc failed: %d", ret); ugd->popup_one = setting_get_notify(vd, EMAIL_SETTING_STRING_WARNING, - EMAIL_SETTING_STRING_UNABLE_DELETE, 1, - EMAIL_SETTING_STRING_OK, - _popup_cancel_cb, NULL, NULL); + EMAIL_SETTING_STRING_UNABLE_DELETE, 1, + EMAIL_SETTING_STRING_OK, + _popup_cancel_cb, NULL, NULL); debug_log("delete failed"); } } -- 2.7.4