add adding account to account-svc
authorSan Cho <san.cho@samsung.com>
Tue, 2 Apr 2013 05:22:21 +0000 (14:22 +0900)
committerSan Cho <san.cho@samsung.com>
Tue, 2 Apr 2013 11:32:29 +0000 (20:32 +0900)
Change-Id: Ib2bf1ab4c1a67a9256caf76ae8a1df13e95f016f

main/org.tizen.email.xml
packaging/org.tizen.email.spec
setting/CMakeLists.txt
setting/include/email-setting-utils.h
setting/src/email-setting-utils.c
setting/src/email-view-manual-setup.c
setting/src/email-view-sync-schedule.c

index 1db18f0..1fb4902 100755 (executable)
                </application-service>
        </ui-application>
        <account>
-               <account-provider appid="email-setting-efl" providerid="http://www.tizen.org/" multiple-accounts-support="true">
+               <account-provider appid="org.tizen.email" providerid="http://www.tizen.org/" multiple-accounts-support="true">
                                <icon section="account">/usr/share/icons/default/small/org.tizen.email.png</icon>
                                <icon section="account-small">/usr/share/icons/default/small/org.tizen.email.png</icon>
                                <label xml:lang="nl-nl">Email</label>
index d950356..59fee2a 100755 (executable)
@@ -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
 
index 4eaede7..0b3ad7d 100755 (executable)
@@ -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}")
index e1d0268..315e8fe 100755 (executable)
@@ -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);
index 5d78fa3..c01a160 100755 (executable)
@@ -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 */
index c1f80db..79d00c3 100755 (executable)
@@ -17,6 +17,8 @@
 #include "email-setting.h"
 #include "email-setting-account-set.h"
 #include "email-setting-utils.h"
+#include <account.h>
+#include <account-types.h>
 
 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;
 }
 
index 9c3131f..4c8d6c6 100755 (executable)
@@ -22,6 +22,8 @@
 #include <unicode/udat.h>
 #include <unicode/udatpg.h>
 #include <unicode/ustring.h>
+#include <account.h>
+#include <account-types.h>
 
 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");
        }
 }