summaryrefslogtreecommitdiff
path: root/account/src/email-account.c
diff options
context:
space:
mode:
Diffstat (limited to 'account/src/email-account.c')
-rwxr-xr-xaccount/src/email-account.c1328
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 */