diff options
Diffstat (limited to 'account/src/email-account.c')
-rwxr-xr-x | account/src/email-account.c | 1328 |
1 files changed, 1328 insertions, 0 deletions
diff --git a/account/src/email-account.c b/account/src/email-account.c new file mode 100755 index 0000000..f70751d --- /dev/null +++ b/account/src/email-account.c @@ -0,0 +1,1328 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.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.tizenopensource.org/license + * + * 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. + */ + +#ifndef UG_MODULE_API +#define UG_MODULE_API __attribute__ ((visibility("default"))) +#endif + +#include <Ecore_X.h> +#include "email-account.h" +#include "email-account-folder.h" + +#include <unicode/uloc.h> +#include <unicode/ucal.h> +#include <unicode/udat.h> +#include <unicode/udatpg.h> +#include <unicode/ustring.h> + +/* appcore */ +static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h service, void *priv); +static void on_start(ui_gadget_h ug, service_h service, void *priv); +static void on_pause(ui_gadget_h ug, service_h service, void *priv); +static void on_resume(ui_gadget_h ug, service_h service, void *priv); +static void on_destroy(ui_gadget_h ug, service_h services, void *priv); +static void on_message(ui_gadget_h ug, service_h msg, service_h service, void *priv); +static void on_event(ui_gadget_h ug, enum ug_event event, service_h service, void *priv); +static void on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h service, void *priv); + +static void _win_profile_changed_cb(void *data, Evas_Object *obj, void *event); + +/* view logic */ +static Evas_Object *create_frameview(EmailAccountUGD *ugd); + +static void layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv); +static void result_cb(ui_gadget_h ug, service_h service, void *priv); +static void destroy_cb(ui_gadget_h ug, void *priv); +static ui_gadget_h create_ug(char *ug_name, service_h service, void *data); + +/* genlist cb */ +static void _gl_del(void *data, Evas_Object *obj); +static char *_gl_label_get_for_4text(void *data, Evas_Object *obj, const char *part); +static char *_gl_label_get_for_all_emails(void *data, Evas_Object *obj, const char *part); +static Evas_Object *_gl_icon_get_for_all_emails(void *data, Evas_Object *obj, const char *part); +static char *_gl_label_get_for_add_account(void *data, Evas_Object *obj, const char *part); +static Evas_Object *_gl_icon_get_for_add_account(void *data, Evas_Object *obj, const char *part); +static Evas_Object *_gl_icon_get(void *data, Evas_Object *obj, const char *part); +static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part); +static void _open_all_emails(void *data, Evas_Object *obj, void *event_info); + +static void _get_icu_formatter(void); +static void _close_icu_formatter(void); +static void _get_date_text_with_formatter(time_t time, char *formatted_str); + +/* other cb */ +static void _add_account_cb(void *data, Evas_Object *obj, void *event_info); + +//static int _emf_account_init(EmailAccountUGD *ug_data); +//static void _gl_con(void *data, Evas_Object *obj, void *event_info); +//static void _gl_exp_req(void *data, Evas_Object *obj, void *event_info); +//static void _gl_con_req(void *data, Evas_Object *obj, void *event_info); +//static void _gl_exp(void *data, Evas_Object *obj, void *event_info); +//static char *_gl_label_get(void *data, Evas_Object *obj, const char *part); +//static char *_gl_group_text_get(void *data, Evas_Object *obj, const char *part); +//static void _launch_composer_cb(void *data, Evas_Object *obj, void *event_info); +//static Elm_Genlist_Item_Class itc_group; + +EmailAccountUGD *g_account_ugd; + +static Elm_Genlist_Item_Class itc_item; +static Elm_Genlist_Item_Class itc_item_for_add_accounts; +static Elm_Genlist_Item_Class itc_item_for_all_emails; + +bool g_isRotate = false; + +static UDateTimePatternGenerator *icu_pg = NULL; +static UDateFormat *icu_formatter = NULL; +static enum appcore_time_format icu_timeformat; + +/*static Elm_Object_Item *current_it = NULL;*/ + +static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h service, void *priv) +{ + debug_log(""); + EmailAccountUGD *ug_data; + char *argv[2] = { 0, }; + + if (!ug || !priv) + return NULL; + + ug_data = priv; + ug_data->ug = ug; + g_account_ugd = ug_data; + + ug_data->win = ug_get_window(); + if (!(ug_data->win)) + return NULL; + + email_engine_initialize(); + /*ret = _emf_account_init(ug_data);*/ + + int w, h; + ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h); + debug_log("WINDOW W[%d] H[%d]", w, h); + ug_data->main_w = w; + ug_data->main_h = h; + + // parsing bundle data + service_get_extra_data(service, EMAIL_BUNDLE_KEY_ACCOUNT_ID, &(argv[0])); + service_get_extra_data(service, EMAIL_BUNDLE_KEY_MAILBOX, &(argv[1])); + + if (argv[0]) + { + ug_data->account_id = atoi(argv[0]); + g_free(argv[0]); + } + if (argv[1]) + { + ug_data->folder_id = atoi(argv[1]); + g_free(argv[1]); + } + debug_log("account_id:%d, folder_id: %d", ug_data->account_id, ug_data->folder_id); + + _get_icu_formatter(); + + if (mode == UG_MODE_FULLVIEW) // folder view + { + /* DBUS */ + _dbus_receiver_setup(ug_data); + + ug_data->ug_mode = ACC_UG_FOLDER_VIEW; + ug_data->folder_mode = ACC_FOLDER_NONE; + ug_data->base = create_fullview(ug_data); + } + else // account view + { + ug_data->ug_mode = ACC_UG_ACCOUNT_VIEW; + ug_data->folder_mode = ACC_FOLDER_NONE; + ug_data->base = create_frameview(ug_data); + } + + evas_object_smart_callback_add(ug_data->win, "profile,changed", _win_profile_changed_cb, ug_data); + + return ug_data->base; +} + +static void on_start(ui_gadget_h ug, service_h service, void *priv) +{ + debug_log(""); +} + +static void on_pause(ui_gadget_h ug, service_h service, void *priv) +{ + debug_log(""); +} + +static void on_resume(ui_gadget_h ug, service_h service, void *priv) +{ + debug_log(""); + EmailAccountUGD *ug_data; + + if (!ug || !priv) + return; + + ug_data = priv; + + /*_refresh_account_list(ug_data);*/ +} + +static void on_destroy(ui_gadget_h ug, service_h service, void *priv) +{ + debug_log(""); + EmailAccountUGD *ug_data; + + if (!ug || !priv) + return; + + ug_data = priv; + + if (ug_data->ug_composer) { + ug_destroy(ug_data->ug_composer); + } + + if (ug_data->ug_setting) { + ug_destroy(ug_data->ug_setting); + } + + if (ug_data->ug_mode == ACC_UG_FOLDER_VIEW) // folder view + { + /* DBUS */ + _remove_dbus_receiver(ug_data); + + int ret = e_dbus_shutdown(); + debug_log("ret: %d", ret); + } + + _destroy_view(ug_data); + + email_engine_finalize(); + + _close_icu_formatter(); + + if (ug_data->ly) { + evas_object_del(ug_data->ly); + ug_data->ly = NULL; + ug_data->base = NULL; + } +} + +static void on_message(ui_gadget_h ug, service_h msg, service_h service, void *priv) +{ + debug_log(""); +} + +static void on_event(ui_gadget_h ug, enum ug_event event, service_h service, void *priv) +{ + debug_log(""); + + switch (event) { + case UG_EVENT_LOW_MEMORY: + break; + case UG_EVENT_LOW_BATTERY: + break; + case UG_EVENT_LANG_CHANGE: + /*bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE);*/ + break; + case UG_EVENT_ROTATE_PORTRAIT: + debug_log("UG_EVENT_ROTATE_PORTRAIT"); + g_isRotate = false; + break; + case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN: + debug_log("UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN"); + g_isRotate = false; + break; + case UG_EVENT_ROTATE_LANDSCAPE: + debug_log("UG_EVENT_ROTATE_LANDSCAPE"); + g_isRotate = true; + break; + case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN: + debug_log("UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN"); + g_isRotate = true; + break; + case UG_EVENT_REGION_CHANGE: + break; + default: + break; + } +} + +static void on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h service, void *priv) +{ + debug_log(""); + + if (!ug) + return; + + switch (event) { + case UG_KEY_EVENT_END: + ug_destroy_me(ug); + break; + + default: + break; + } +} + +UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops) +{ + debug_log(""); + EmailAccountUGD *ug_data; + + if (!ops) + return -1; + + ug_data = calloc(1, sizeof(EmailAccountUGD)); + if (!ug_data) + return -1; + + ops->create = on_create; + ops->start = on_start; + ops->pause = on_pause; + ops->resume = on_resume; + ops->destroy = on_destroy; + ops->message = on_message; + ops->event = on_event; + ops->key_event = on_key_event; + ops->priv = ug_data; + ops->opt = UG_OPT_INDICATOR_ENABLE; + + return 0; +} + +UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops) +{ + debug_log(""); + EmailAccountUGD *ug_data; + + if (!ops) + return; + + ug_data = ops->priv; + if (ug_data) + free(ug_data); +} + +static Evas_Object *create_frameview(EmailAccountUGD * ug_data) +{ + debug_log(""); + + ug_data->evas = evas_object_evas_get(ug_data->win); + + ug_data->bg = elm_bg_add(ug_data->win); + evas_object_size_hint_weight_set(ug_data->bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(ug_data->win, ug_data->bg); + evas_object_show(ug_data->bg); + + ug_data->ly = elm_layout_add(ug_data->win); + if (ug_data->ly == NULL) { + debug_log("ug_data->ly == NULL"); + return NULL; + } + elm_layout_theme_set(ug_data->ly, "layout", "application", "noindicator"); + //evas_object_size_hint_weight_set(ug_data->ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + //elm_win_resize_object_add(ug_data->win, ug_data->ly); + evas_object_show(ug_data->ly); + + elm_object_part_content_set(ug_data->ly, "elm.swallow.bg", ug_data->bg); + + /* contents */ + _create_account_view(ug_data); + elm_object_part_content_set(ug_data->ly, "elm.swallow.content", ug_data->gl); + + return ug_data->ly; +} + +static void _win_profile_changed_cb(void *data, Evas_Object *obj, void *event) +{ + debug_log(""); + if (!data) { + debug_log("data is NULL"); + return; + } + + EmailAccountUGD *ug_data = (EmailAccountUGD *)data; + + const char *profile = elm_config_profile_get(); + if (!g_strcmp0(profile, "desktop")) + elm_layout_theme_set(ug_data->ly, "layout", "application", "noindicator"); + else + elm_layout_theme_set(ug_data->ly, "layout", "application", "default"); + + evas_object_size_hint_weight_set(ug_data->ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(ug_data->win, ug_data->ly); + evas_object_show(ug_data->ly); +} + +void _create_account_view(EmailAccountUGD *ug_data) +{ + debug_log(""); + Evas_Object *gl; + + _destroy_view(ug_data); + + /* accounts list */ + if (ug_data->gl) { + gl = ug_data->gl; + } else { + gl = elm_genlist_add(ug_data->ly); + elm_genlist_tree_effect_enabled_set(gl, 1); + elm_genlist_block_count_set(gl, 36); + ug_data->gl = gl; + } + + email_account_t *account_list = NULL; + int account_count = 0; + int err = 0; + int i = 0; + int j = 0; + + ug_data->all_unread_count = 0; + ug_data->all_read_count = 0; + + err = email_engine_get_account_list(&account_count, &account_list); + + if (err == 0) { + debug_critical("fail to get account list - err(%d)", err); + if (ug_data->gl) { + evas_object_del(ug_data->gl); + ug_data->gl = NULL; + } + ug_data->gl = _add_emtpy_list(ug_data); + return; + } + + if (account_list == NULL || account_count == 0) { + debug_critical("account info is @niL"); + if (ug_data->gl) { + evas_object_del(ug_data->gl); + ug_data->gl = NULL; + } + ug_data->gl = _add_emtpy_list(ug_data); + return; + } + ug_data->n_account_list = account_count; + + /* If user make 2 more accounts, we will show `All emails` */ + if (account_count > 1) { + itc_item_for_all_emails.item_style = "2text.1icon"; + itc_item_for_all_emails.func.text_get = _gl_label_get_for_all_emails; + itc_item_for_all_emails.func.content_get = _gl_icon_get_for_all_emails; + itc_item_for_all_emails.func.state_get = _gl_state_get; + itc_item_for_all_emails.func.del = _gl_del; + + elm_genlist_item_append(gl, &itc_item_for_all_emails, ug_data, NULL, + ELM_GENLIST_ITEM_NONE, _open_all_emails, NULL); + + /*itc_group.item_style = "grouptitle"; + itc_group.func.text_get = _gl_group_text_get; + itc_group.func.content_get = NULL; + itc_group.func.state_get = NULL; + itc_group.func.del = NULL; + + Elm_Object_Item *git = elm_genlist_item_append(gl, &itc_group, NULL, + NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);*/ + } + + itc_item.item_style = "4text.1icon.3"; + itc_item.func.text_get = _gl_label_get_for_4text; + itc_item.func.content_get = _gl_icon_get; + itc_item.func.state_get = _gl_state_get; + itc_item.func.del = _gl_del; + + email_account_list *alist = (email_account_list *) + calloc(account_count, sizeof(email_account_list)); + + for (i = 0; i < account_count; i++) { + alist[i].ug_data = ug_data; + alist[i].account_info = &account_list[i]; + + int err = 0; + int mailbox_list_count = 0; + email_mailbox_t *mailbox_list = NULL; + + err = email_get_mailbox_list_ex(account_list[i].account_id, -1, 1, + &mailbox_list, &mailbox_list_count); + if (err != EMAIL_ERROR_NONE) { + debug_critical("email_get_mailbox_list return error"); + continue; + } + + alist[i].mailbox_list = mailbox_list; + alist[i].n_mailbox_list = mailbox_list_count; + + if (mailbox_list_count > 0) { + for (j = 0; j < mailbox_list_count; j++) { + alist[i].read_count += mailbox_list[j].total_mail_count_on_local; + alist[i].unread_count += mailbox_list[j].unread_count; + } + + ug_data->all_read_count += alist[i].read_count; + ug_data->all_unread_count += alist[i].unread_count; + } + +// _make_folder_tree(alist + i, ug_data); + } + + ug_data->alist = alist; + + for (i = 0; i < account_count; i++) { + elm_genlist_item_append(gl, &itc_item, &alist[i], NULL, + ELM_GENLIST_ITEM_NONE, _open_mail_list, &alist[i]); + } +/* + evas_object_smart_callback_add(gl, "expand,request", _gl_exp_req, gl); + evas_object_smart_callback_add(gl, "contract,request", _gl_con_req, gl); + evas_object_smart_callback_add(gl, "expanded", _gl_exp, ug_data); + evas_object_smart_callback_add(gl, "contracted", _gl_con, gl); +*/ + + /* If user make 2 more accounts, we will show `Add account` */ + itc_item_for_add_accounts.item_style = "2text.1icon"; + itc_item_for_add_accounts.func.text_get = _gl_label_get_for_add_account; + itc_item_for_add_accounts.func.content_get = _gl_icon_get_for_add_account; + itc_item_for_add_accounts.func.state_get = _gl_state_get; + itc_item_for_add_accounts.func.del = _gl_del; + + elm_genlist_item_append(gl, &itc_item_for_add_accounts, ug_data, NULL, + ELM_GENLIST_ITEM_NONE, _add_account_cb, ug_data); + + return; +} + +void _destroy_view(EmailAccountUGD *ug_data) +{ + debug_log(""); + + RETURN_IF_FAIL(ug_data != NULL); + + int i = 0; + int err = 0; + email_account_list *alist = ug_data->alist; + + if (ug_data->conformant) { + evas_object_del(ug_data->conformant); + ug_data->conformant = NULL; + } + if(ug_data->popup) { + evas_object_del(ug_data->popup); + ug_data->popup = NULL; + } + + if (alist) { + + if(ug_data->ug_mode == ACC_UG_ACCOUNT_VIEW + || (ug_data->ug_mode == ACC_UG_FOLDER_VIEW && ug_data->account_id == 0)) + { + debug_log("account view: count_of_account_list: %d", ug_data->n_account_list); + err = email_engine_free_account_list(&(alist[0].account_info), ug_data->n_account_list); + if (err == 0) { + debug_critical("fail to free account - err(%d)", err); + } + + for (i = 0; i < ug_data->n_account_list; i++) { + err = email_free_mailbox(&(alist[i].mailbox_list), alist[i].n_mailbox_list); + if (err != EMAIL_ERROR_NONE) { + debug_critical("fail to free mailbox list - err(%d)", err); + } + + alist[i].mailbox_list = NULL; + alist[i].n_mailbox_list = 0; + alist[i].account_info = NULL; + + g_node_destroy(alist[i].folder_root); + alist[i].folder_root = NULL; + } + + g_free(alist); + alist = NULL; + ug_data->alist = NULL; + } + else // One account folder view. + { + debug_log("folder view: count_of_account_list: %d, account_id: %d", ug_data->n_account_list, ug_data->account_id); + if(ug_data->account_id > 0) + { + err = email_engine_free_account_list(&(alist->account_info), 1); + if (err == 0) { + debug_critical("fail to free account - err(%d)", err); + } + + err = email_free_mailbox(&(alist->mailbox_list), alist->n_mailbox_list); + if (err != EMAIL_ERROR_NONE) { + debug_critical("fail to free mailbox list - err(%d)", err); + } + + alist->mailbox_list = NULL; + alist->n_mailbox_list = 0; + alist->account_info = NULL; + + g_node_destroy(alist->folder_root); + alist->folder_root = NULL; + + debug_log("folder view"); + + g_free(alist); + alist = NULL; + ug_data->alist = NULL; + } + } + debug_log("folder view"); + } +} + +static char *_gl_label_get_for_4text(void *data, Evas_Object *obj, const char *part) +{ + email_account_list *alist = (email_account_list *) data; + char tmp[MAX_STR_LEN] = { 0, }; /*account_name has no limitation on size*/ + + if (alist == NULL) { + debug_log("alist is NULL !!"); + goto FINISH; + } + + if (!strcmp(part, "elm.text.1")) { + if (alist->account_info->account_name != NULL) { + debug_log("account_name: %s", alist->account_info->account_name); + snprintf(tmp, sizeof(tmp), "%s", alist->account_info->account_name); + return g_strdup(tmp); + } + } else if (!strcmp(part, "elm.text.2")) { + char buf[MAX_STR_LEN] = { 0, }; + email_mailbox_t *mailbox = NULL; + email_get_mailbox_by_mailbox_type(alist->account_info->account_id, EMAIL_MAILBOX_TYPE_INBOX, &mailbox); + if (mailbox) { + debug_log("alias: %s, last_sync_time: %d", mailbox->alias, mailbox->last_sync_time); + time_t req_time = time(NULL); //mailbox->last_sync_time; + _get_date_text_with_formatter(req_time, buf); + } + return g_strdup(buf); + } else if (!strcmp(part, "elm.text.3")) { + if (alist->account_info->user_email_address != NULL) { + debug_log("user_email_addr: %s", alist->account_info->user_email_address); + return g_strdup(alist->account_info->user_email_address); + } + } else if (!strcmp(part, "elm.text.4")) { + int total_cnt = alist->unread_count; + if (total_cnt >= 0) { + debug_log("total_cnt: %d, unread_count: %d, read_count: %d", total_cnt, alist->unread_count, alist->read_count); + snprintf(tmp, sizeof(tmp), "%d", total_cnt); + return g_strdup(tmp); + } + } else { + debug_log("part is invalid"); + } + +FINISH: + snprintf(tmp, sizeof(tmp), _("IDS_EMAIL_BODY_NO_TEXT")); + return g_strdup(tmp); +} + +static char *_gl_label_get_for_all_emails(void *data, Evas_Object *obj, const char *part) +{ + debug_log(""); + EmailAccountUGD *ug_data = (EmailAccountUGD *) data; + char tmp[MAX_STR_LEN] = { 0, }; + + if (!strcmp(part, "elm.text.1")) { + snprintf(tmp, sizeof(tmp), "%s", _("IDS_EMAIL_BODY_ALL_EMAILS")); + return g_strdup(tmp); + } else if (!strcmp(part, "elm.text.2")) { + snprintf(tmp, sizeof(tmp), "[%d/%d]", ug_data->all_unread_count, ug_data->all_read_count); + return g_strdup(tmp); + } else { + debug_log("part is invalid"); + } + + snprintf(tmp, sizeof(tmp), _("IDS_EMAIL_BODY_NO_TEXT")); + return g_strdup(tmp); +} + +static Evas_Object *_gl_icon_get_for_all_emails(void *data, Evas_Object *obj, const char *part) +{ + debug_log(""); + if (!data) { + debug_log("data is NULL"); + return NULL; + } +// EmailAccountUGD *ug_data = (EmailAccountUGD *) data; + + if (!strcmp(part, "elm.icon")) + { + Evas_Object *icon = elm_icon_add(obj); + elm_icon_file_set(icon, ACCOUNT_ICON_ALLACCOUNT, NULL); + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + return icon; + } + else + { + debug_log("part is invalid"); + } + + return NULL; +} + +static char *_gl_label_get_for_add_account(void *data, Evas_Object *obj, const char *part) +{ + debug_log(""); +// EmailAccountUGD *ug_data = (EmailAccountUGD *) data; + char tmp[MAX_STR_LEN] = { 0, }; + + if (!strcmp(part, "elm.text.1")) { + snprintf(tmp, sizeof(tmp), "%s", _("IDS_EMAIL_POP_ADD_ACCOUNTS")); + return g_strdup(tmp); + }else if (!strcmp(part, "elm.text.2")) { + memset(tmp, 0, sizeof(char) * MAX_STR_LEN); + return g_strdup(tmp); + } else { + debug_log("part is invalid"); + } + + snprintf(tmp, sizeof(tmp), _("IDS_EMAIL_BODY_NO_TEXT")); + return g_strdup(tmp); +} + +static Evas_Object *_gl_icon_get_for_add_account(void *data, Evas_Object *obj, const char *part) +{ + debug_log(""); + if (!data) { + debug_log("data is NULL"); + return NULL; + } +// EmailAccountUGD *ug_data = (EmailAccountUGD *) data; + + if (!strcmp(part, "elm.icon")) + { + Evas_Object *icon = elm_icon_add(obj); + elm_icon_file_set(icon, ACCOUNT_ICON_ADDACCOUNT, NULL); + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + return icon; + } + else + { + debug_log("part is invalid"); + } + + return NULL; +} + +static Evas_Object *_gl_icon_get(void *data, Evas_Object *obj, const char *part) +{ + debug_log(""); + if (!data) { + debug_log("data is NULL"); + return NULL; + } + + email_account_list *alist = (email_account_list *) data; +#if 0 //check box + Evas_Object *check= NULL; + + if (elm_genlist_decorate_mode_get(obj)) { + if (!strcmp(part, "elm.edit.icon.1")) { + check = elm_check_add(obj); + //elm_check_state_pointer_set(check, &alist->checked); + evas_object_smart_callback_add(check, "changed", _edit_item_check_changed_cb, data); + return check; + } + } +#endif + + if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1") ) + { + Evas_Object *icon = elm_icon_add(obj); + + // setting/include/email-setting.h + typedef enum { + HOTMAIL = 1, + GMAIL, + YAHOOMAIL, + AOL, + OTHERS + } AccountInfo; + + account_user_data_t *user_data = (account_user_data_t *)alist->account_info->user_data; + debug_log("is_preset_account:%d", user_data->is_preset_account); + + switch (user_data->is_preset_account) { + case GMAIL: + elm_icon_file_set(icon, ACCOUNT_ICON_GMAIL, NULL); + break; + case HOTMAIL: + elm_icon_file_set(icon, ACCOUNT_ICON_HOTMAIL, NULL); + break; + case YAHOOMAIL: + elm_icon_file_set(icon, ACCOUNT_ICON_YAHOO, NULL); + break; + case AOL: + elm_icon_file_set(icon, ACCOUNT_ICON_AOL, NULL); + break; + case OTHERS: + default: + elm_icon_file_set(icon, ACCOUNT_ICON_OTHERS, NULL); + break; + } + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + return icon; + } + else if (!strcmp(part, "elm.swallow.colorbar")) + { + account_user_data_t *user_data = (account_user_data_t *)alist->account_info->user_data; + unsigned int val = user_data->index_color; + int r = (val & 0xff000000) >> 24; + int g = (val & 0x00ff0000) >> 16; + int b = (val & 0x0000ff00) >> 8; + int a = val & 0x000000ff; + + Evas_Object *color_bar = evas_object_rectangle_add(evas_object_evas_get(obj)); + evas_object_size_hint_fill_set(color_bar, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_color_set(color_bar, r, g, b, a); + + return color_bar; + } + else + { + debug_log("part is invalid"); + } + + return NULL; +} + +static void _gl_del(void *data, Evas_Object *obj) +{ + debug_log(""); +} + +static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part) +{ + debug_log(""); + return EINA_FALSE; +} + +void _open_mail_list(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + if (data == NULL) { + debug_log("data is NULL"); + return; + } + + email_account_list *alist = (email_account_list *)data; + Elm_Object_Item *item = (Elm_Object_Item *)event_info; + elm_genlist_item_selected_set(item, 0); + + Evas_Coord x, y = 0; + evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y); + debug_log("X = %d, Y = %d", x, y); + +/* + int main_w = alist->ug_data->main_w; + int main_h = alist->ug_data->main_h; + debug_log("g_isRotate = %d", g_isRotate); + + if (g_isRotate == false) { + debug_log("Potrait Mode"); + if (x > main_w-80 && x < main_w) { + return; + } + } else { + debug_log("Landscape Mode"); + if (x > main_h-80 && x < main_h) { + return; + } + } +*/ + if (alist->ug_data->block_item_click) + return; + + int account_id = alist->account_info->account_id; + debug_log("account_id: %d", account_id); + + elm_genlist_item_update(item); + + service_h service; + if (SERVICE_ERROR_NONE != service_create(&service)) + { + debug_log("creating service handle failed"); + return; + } + + char id[NUM_STR_LEN] = {0,}; + snprintf(id, sizeof(id), "%d", account_id); + + char is_null[NUM_STR_LEN] = {0,}; + snprintf(is_null, sizeof(is_null), "%d", true); + + service_add_extra_data(service, EMAIL_BUNDLE_KEY_ACCOUNT_ID, id); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_IS_NULL, is_null); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_USER_EMAIL, alist->account_info->user_email_address); + ug_send_result(alist->ug_data->ug, service); + + alist->ug_data->block_item_click = 1; + + service_destroy(service); +} + +static void _open_all_emails(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + + email_mailbox_type_e mailbox_type = EMAIL_MAILBOX_TYPE_INBOX; + Elm_Object_Item *item = (Elm_Object_Item *)event_info; + const void *item_data = elm_object_item_data_get((const Elm_Object_Item *)item); + RETURN_IF_FAIL(item_data != NULL); + EmailAccountUGD *ug_data = (EmailAccountUGD *) item_data; + + elm_genlist_item_selected_set(item, 0); + + if (ug_data->block_item_click) + return; + elm_genlist_item_update(item); + + service_h service; + if (SERVICE_ERROR_NONE != service_create(&service)) + { + debug_log("creating service handle failed"); + return; + } + + char id[NUM_STR_LEN] = {0,}; + snprintf(id, sizeof(id), "%d", 0); + + char is_null[NUM_STR_LEN] = {0,}; + snprintf(is_null, sizeof(is_null), "%d", true); + + char ch_boxtype[NUM_STR_LEN] = {0,}; + snprintf(ch_boxtype, sizeof(ch_boxtype), "%d", mailbox_type); + + service_add_extra_data(service, EMAIL_BUNDLE_KEY_ACCOUNT_ID, id); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_IS_NULL, is_null); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_MAILBOX_TYPE, ch_boxtype); + ug_send_result(ug_data->ug, service); + + ug_data->block_item_click = 1; + + service_destroy(service); +} + +static void _add_account_cb(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + EmailAccountUGD *ug_data = (EmailAccountUGD *)data; + Elm_Object_Item *item = (Elm_Object_Item *)event_info; + + elm_genlist_item_selected_set(item, 0); + + service_h service; + if (SERVICE_ERROR_NONE != service_create(&service)) + { + debug_log("creating service handle failed"); + return; + } + + service_add_extra_data(service, EMAIL_BUNDLE_KEY_VIEW_TYPE, EMAIL_BUNDLE_VAL_VIEW_SELECT_ACCOUNT); + ug_data->ug_setting = create_ug(UG_NAME_EMAIL_SETTING, service, ug_data); + service_destroy(service); +} + +static void layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) +{ + debug_log(""); + Evas_Object *base, *win; + + if (!ug || !priv) + return; + + base = ug_get_layout(ug); + if (!base) + return; + + win = ug_get_window(); + + switch (mode) { + case UG_MODE_FULLVIEW: + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, base); + evas_object_show(base); + break; + + default: + break; + } +} + +static void result_cb(ui_gadget_h ug, service_h service, void *priv) +{ + debug_log(""); + + if (!ug || !priv) + return; + + EmailAccountUGD *ug_data = (EmailAccountUGD *) priv; + + if (ug == ug_data->ug_setting) { + ug_data->ug_setting = NULL; + + char *val = NULL; + service_get_extra_data(service, EMAIL_BUNDLE_KEY_REFRESH_ACCOUNT, &val); + if (STR_VALID(val)) { + if (g_strcmp0(val, EMAIL_BUNDLE_KEY_REFRESH_ACCOUNT) == 0) { + ug_destroy(ug); + ug_destroy_me(ug_data->ug); + g_free(val); + return; + } + } + } + +FINISH: + ug_destroy(ug); +} + +static void destroy_cb(ui_gadget_h ug, void *priv) +{ + debug_log(""); + + if (!ug || !priv) + return; + + ug_destroy(ug); + + EmailAccountUGD *ug_data = (EmailAccountUGD *) priv; + + if (ug == ug_data->ug_setting) { + ug_data->ug_setting = NULL; + } else if (ug == ug_data->ug_composer) { + ug_data->ug_composer = NULL; + } +} + +static ui_gadget_h create_ug(char *ug_name, service_h service, void *data) +{ + debug_log(""); + ui_gadget_h ug; + struct ug_cbs cbs = { 0, }; + EmailAccountUGD *ug_data = (EmailAccountUGD *) data; + + cbs.layout_cb = layout_cb; + cbs.result_cb = result_cb; + cbs.destroy_cb = destroy_cb; + cbs.priv = ug_data; + + ug = ug_create(ug_data->ug, ug_name, UG_MODE_FULLVIEW, service, &cbs); + + return ug; +} + +Evas_Object *_add_emtpy_list(void *data) +{ + debug_log(""); + EmailAccountUGD *ug_data = (EmailAccountUGD *) data; + + Evas_Object *list = elm_list_add(ug_data->win); + elm_list_mode_set(list, ELM_LIST_COMPRESS); + + elm_list_item_append(list, dgettext("sys_string", "IDS_COM_POP_EMPTY"), NULL, NULL, NULL, ug_data); + elm_list_go(list); + + return list; +} + +static void _get_icu_formatter(void) +{ + debug_log(""); + UErrorCode status = U_ZERO_ERROR; + char *icu_locale = NULL; + + uloc_setDefault(getenv("LC_TIME"), &status); + if (U_FAILURE(status)) { + debug_critical("uloc_setDefault() failed: %s\n", u_errorName(status)); + return; + } + + icu_locale = (char *)uloc_getDefault(); + debug_log("uloc_getDefault: %s", icu_locale); + appcore_get_timeformat(&icu_timeformat); + + status = U_ZERO_ERROR; + icu_pg = udatpg_open(icu_locale, &status); + if (!icu_pg) { + debug_log("udatpg_open() failed: %s", u_errorName(status)); + return; + } + + char *skeleton = NULL; + if (icu_timeformat == APPCORE_TIME_FORMAT_12) { + skeleton = "EEEMMMddhmma"; + } else { + skeleton = "EEEMMMddHmm"; + } + + UChar bestPattern[64] = { 0, }; + UChar customSkeleton[64] = { 0, }; + int32_t bestPatternCapacity; + int32_t bestPatternLength; + int skeletonLength = strlen(skeleton); + + u_uastrncpy(customSkeleton, skeleton, skeletonLength); + + status = U_ZERO_ERROR; + bestPatternCapacity = (int32_t) (sizeof(bestPattern) / sizeof(bestPattern[0])); + bestPatternLength = udatpg_getBestPattern(icu_pg, customSkeleton, u_strlen(customSkeleton), bestPattern, bestPatternCapacity, &status); + + status = U_ZERO_ERROR; + icu_formatter = udat_open(UDAT_IGNORE, UDAT_IGNORE, icu_locale, NULL, -1, bestPattern, -1, &status); +} + +static void _close_icu_formatter(void) +{ + debug_log(""); + + if (icu_pg) { + udatpg_close(icu_pg); + icu_pg = NULL; + } + + if (icu_formatter) { + udat_close(icu_formatter); + icu_formatter = NULL; + } +} + +static void _get_date_text_with_formatter(time_t time, char *formatted_str) +{ + debug_log(""); + UErrorCode status = U_ZERO_ERROR; + UDate date = 0; + UChar formatted[64] = { 0, }; + int32_t formattedCapacity; + int32_t formattedLength; + + formattedCapacity = (int32_t) (sizeof(formatted) / sizeof(formatted[0])); + time_t msg_time = time; + date = (UDate)msg_time * 1000; + + formattedLength = udat_format(icu_formatter, date, formatted, formattedCapacity, NULL, &status); + u_austrncpy(formatted_str, formatted, 127); + debug_log("time_t: %d", time); + debug_log("formatted time: %s", formatted_str); +} + +#if 0 +static int _emf_account_init(EmailAccountUGD *ug_data) +{ + debug_log(""); + int r; + + /* Get Email Account List Info */ + ug_data->account_list = NULL; + r = email_engine_get_account_list(&ug_data->account_count, &ug_data->account_list); + return r; +} +#endif +#if 0 +static char *_gl_label_get(void *data, Evas_Object *obj, const char *part) +{ + email_account_list *alist = (email_account_list *) data; + char tmp[MAX_STR_LEN] = { 0, }; /*account_name has no limitation on size*/ + + if (alist == NULL) { + debug_log("alist is NULL !!"); + goto FINISH; + } + + if (!strcmp(part, "elm.text.1")) { + if (alist->account_info->account_name != NULL) { + debug_log("account_name: %s", alist->account_info->account_name); + snprintf(tmp, sizeof(tmp), "%s [%d/%d]", + alist->account_info->account_name, alist->unread_count, alist->read_count); + return g_strdup(tmp); + } + } else if (!strcmp(part, "elm.text.2")) { + if (alist->account_info->user_email_address != NULL) { + debug_log("user_email_addr: %s", alist->account_info->user_email_address); + return g_strdup(alist->account_info->user_email_address); + } + } else { + debug_log("part is invalid"); + } + +FINISH: + snprintf(tmp, sizeof(tmp), _("IDS_EMAIL_BODY_NO_TEXT")); + return g_strdup(tmp); +} +#endif + +/*static char *_gl_group_text_get(void *data, Evas_Object *obj, const char *part) +{ + debug_log(""); + if (!strcmp(part, "elm.text")) { + return strdup(dgettext("sys_string", "IDS_COM_BODY_ACCOUNTS")); + } + return NULL; +}*/ + +#if 0 +static void _gl_con(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + Elm_Object_Item *it = event_info; + + elm_genlist_item_selected_set(it, 0); + elm_genlist_item_subitems_clear(it); +} + +static void _gl_exp_req(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + Elm_Object_Item *it = event_info; + elm_genlist_item_expanded_set(it, 1); + elm_genlist_item_selected_set(it, EINA_FALSE); + + /*current_it = it;*/ +} + +static void _gl_con_req(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + Elm_Object_Item *it = event_info; + elm_genlist_item_expanded_set(it, 0); + + /*current_it = it;*/ +} + +static void _gl_exp(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + + Elm_Object_Item *it = event_info; + /*elm_genlist_item_selected_set(it, 0);*/ + Evas_Object *gl = elm_object_item_widget_get(it); + + itc_subtree.item_style = "1text.1/expandable_n_depth"; + itc_subtree.func.text_get = _gl_label_get_for_subitem; + itc_subtree.func.content_get = _gl_icon_get; + itc_subtree.func.state_get = _gl_state_get; + itc_subtree.func.del = _gl_del; +// itc_subtree.decorate_all_item_style = "edit_default2"; + itc_subtree.decorate_all_item_style = NULL; + + itc_subtree2.item_style = "1text.2/expandable_n_depth"; + itc_subtree2.func.text_get = _gl_label_get_for_subitem; + itc_subtree2.func.content_get = _gl_icon_get; + itc_subtree2.func.state_get = _gl_state_get; + itc_subtree2.func.del = _gl_del; +// itc_subtree2.decorate_all_item_style = "edit_default2"; + itc_subtree2.decorate_all_item_style = NULL; + + int i = 0; + int depth = elm_genlist_item_expanded_depth_get(it); + Elm_Object_Item *sub_it = NULL; + + debug_log("depth: %d", depth); + + if (depth == 0) { + const void *item_data = elm_object_item_data_get((const Elm_Object_Item *)it); + if (item_data == NULL) { + debug_log("item data is NULL"); + return; + } + email_account_list *alist = (email_account_list *) item_data; + + int n_children = g_node_n_children(alist->folder_root); + debug_log("n_children of root: %d", n_children); + + for (i = 0; i < n_children; i++) { + GNode *child = g_node_nth_child(alist->folder_root, i); + if (g_node_n_children(child) > 0) { + sub_it = elm_genlist_item_append(gl, &itc_subtree, child, it, + ELM_GENLIST_ITEM_TREE, _gl_exp_sel, alist); + } else { + elm_genlist_item_append(gl, &itc_subtree2, child, it, + ELM_GENLIST_ITEM_NONE, _gl_sel, alist); + } + } + } + else if (depth > 0) { + const void *item_data = elm_object_item_data_get((const Elm_Object_Item *)it); + if (item_data == NULL) { + debug_log("item data is NULL"); + return; + } + GNode *sub_root = (GNode *)item_data; + + int n_children = g_node_n_children(sub_root); + debug_log("n_children of sub_root depth[%d]: %d", depth, n_children); + + Elm_Object_Item *parent_it =it; + for (i = 0; i < depth; i++) + parent_it = elm_genlist_item_parent_get(parent_it); + + const void *parent_item_data = elm_object_item_data_get((const Elm_Object_Item *)parent_it); + if (parent_item_data == NULL) { + debug_log("parent item data is NULL"); + return; + } + email_account_list *alist = (email_account_list *) parent_item_data; + + for (i = 0; i < n_children; i++) { + GNode *child = g_node_nth_child(sub_root, i); + if (g_node_n_children(child) > 0) { + sub_it = elm_genlist_item_append(gl, &itc_subtree, child, it, + ELM_GENLIST_ITEM_TREE, _gl_exp_sel, alist); + } else { + elm_genlist_item_append(gl, &itc_subtree2, child, it, + ELM_GENLIST_ITEM_NONE, _gl_sel, alist); + } + } + } +} +#endif +/*static void _launch_composer_cb(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + EmailAccountUGD *ug_data = (EmailAccountUGD *)data; + int composer_type = RUN_COMPOSER_NEW; + int account_id = 0; + email_engine_get_default_account(&account_id); + + debug_log("composer type: %d", composer_type); + debug_log("account id: %d", account_id); + + if (account_id <= 0) { + return; + } + + char type[14] = { 0, }; + char id[14] = { 0, }; + snprintf(type, sizeof(type), "%d", composer_type); + snprintf(id, sizeof(id), "%d", account_id); + + service_h service; + if (SERVICE_ERROR_NONE != service_create(&service)) + { + debug_log("creating service handle failed"); + return; + } + + service_add_extra_data(service, EMAIL_BUNDLE_KEY_RUN_TYPE, type); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_ACCOUNT_ID, id); + ug_data->ug_composer = create_ug(UG_NAME_EMAIL_COMPOSER, service, ug_data); + + service_destroy(service); +}*/ +/* EOF */ |