summaryrefslogtreecommitdiff
path: root/main/email.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/email.c')
-rwxr-xr-xmain/email.c1106
1 files changed, 1106 insertions, 0 deletions
diff --git a/main/email.c b/main/email.c
new file mode 100755
index 0000000..b7ac5dc
--- /dev/null
+++ b/main/email.c
@@ -0,0 +1,1106 @@
+/*
+ * 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.
+ */
+
+#include <stdio.h>
+#include <appcore-efl.h>
+#undef _
+#include <ui-gadget-module.h>
+#include <Ecore_X.h>
+#include <utilX.h>
+#include <vconf.h>
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <aul.h>
+#include <E_DBus.h>
+#include <email-api.h>
+
+#include "email.h"
+#include "email-debug.h"
+#include "email-utils.h"
+#include "email-common-types.h"
+#include "email-engine.h"
+
+#define URI_SCHEME_MAILTO "mailto:"
+#define URI_SCHEME_FILE "file://"
+#define URI_SCHEME_HTTP "http://"
+
+typedef struct appdata appdata;
+struct appdata {
+ int root_w;
+ int root_h;
+ int root_x;
+ int root_y;
+
+ Evas *evas;
+ Evas_Object *win_main;
+
+ int account_id;
+ char *account_name;
+
+ ui_gadget_h mailbox_ug;
+ ui_gadget_h setting_ug;
+ ui_gadget_h composer_ug;
+ ui_gadget_h viewer_ug;
+};
+
+gboolean _b_setting_opened = false;
+extern ui_gadget_h _g_mailbox_ug;
+
+static bool app_create(void *data);
+static int app_terminate(void *data);
+static int app_pause(void *data);
+static int app_resume(void *data);
+static int app_reset(service_h b, void *data);
+static int app_low_memory(void *data);
+static int app_low_battery(void *data);
+static int app_lang_changed(void *data);
+static int app_region_changed(void *data);
+
+static Evas_Object *create_win(const char *name);
+static void win_del(void *data, Evas_Object *obj, void *event);
+static void launch_email_ug(service_h b, struct appdata *ad);
+static int check_app_svc_operation(service_h b, struct appdata *ad, gint account_id);
+static int check_aul_mime_operation(service_h b, struct appdata *ad);
+static int check_aul_launch_operation(service_h b, struct appdata *ad);
+static void block_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void popup_response_cb(void *data, Evas_Object *obj, void *event_info);
+static void layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv);
+static void result_cb(ui_gadget_h ug, service_h result, void *priv);
+static void destroy_cb(ui_gadget_h ug, void *priv);
+static void aul_destroy_cb(ui_gadget_h ug, void *priv);
+ui_gadget_h create_ug(char *ug_name, service_h bd, void *data);
+static int _email_main_rotation_cb(app_device_orientation_e m, void *data);
+
+
+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) {
+ debug_log("ug_get_layout returns NULL");
+ 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);
+ ug_disable_effect(ug);
+ evas_object_show(base);
+ break;
+ default:
+ break;
+ }
+}
+
+static void result_cb(ui_gadget_h ug, service_h result, void *priv)
+{
+ debug_log("");
+
+ if (!ug || !priv)
+ return;
+
+ ug_destroy(ug);
+}
+
+static void destroy_cb(ui_gadget_h ug, void *priv)
+{
+ debug_log("");
+
+ if (!ug || !priv)
+ return;
+
+ struct appdata *ad = (struct appdata *)priv;
+
+ if (_b_setting_opened == true && ug == ad->setting_ug) {
+ _b_setting_opened = false;
+
+ int ret;
+ ug_destroy(ad->setting_ug);
+ ad->setting_ug = NULL;
+
+ /*relaunch setting when account deleted immediately*/
+ if (!email_engine_get_default_account(&ad->account_id)) {
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ return;
+ }
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_VIEW_TYPE, EMAIL_BUNDLE_VAL_VIEW_FIRST_SETUP);
+ debug_log("service_add_extra_data: %d", ret);
+
+ if (NULL != (ad->setting_ug = create_ug(UG_NAME_EMAIL_SETTING, service, ad))) {
+ _b_setting_opened = true;
+ }
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+ return;
+ }
+
+ if (ad->mailbox_ug) {
+ debug_log("Mailbox is already running");
+ return;
+ }
+
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ return;
+ }
+
+ char initial[4] = { 0, };
+ snprintf(initial, sizeof(initial), "%d", 0);
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_INITIAL_RUN, initial);
+ debug_log("service_add_extra_data: %d", ret);
+
+ ad->mailbox_ug = create_ug(UG_NAME_EMAIL_MAILBOX, service, ad);
+ _g_mailbox_ug = ad->mailbox_ug;
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+
+ return;
+ }
+
+ if (ug == ad->mailbox_ug) {
+ if (!email_engine_get_default_account(&ad->account_id)) {
+ ug_destroy(ad->mailbox_ug);
+ ad->mailbox_ug = NULL;
+
+ if (ad->setting_ug) {
+ debug_log("Setting is already running");
+ return;
+ }
+
+ int ret;
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ return;
+ }
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_VIEW_TYPE, EMAIL_BUNDLE_VAL_VIEW_FIRST_SETUP);
+ debug_log("service_add_extra_data: %d", ret);
+
+ if (NULL != (ad->setting_ug = create_ug(UG_NAME_EMAIL_SETTING, service, ad))) {
+ _b_setting_opened = true;
+ }
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+
+ return;
+ }
+ }
+
+ if (ug == ad->composer_ug) {
+ debug_log("destroy composer_ug");
+ ug_destroy(ad->composer_ug);
+ ad->composer_ug = NULL;
+ }
+
+ if (ug == ad->viewer_ug) {
+ debug_log("destroy viewer_ug");
+ ug_destroy(ad->viewer_ug);
+ ad->viewer_ug = NULL;
+ }
+
+ elm_exit();
+ return;
+}
+
+static void aul_destroy_cb(ui_gadget_h ug, void *priv)
+{
+ debug_log("");
+
+ if (!ug || !priv)
+ return;
+
+ elm_exit();
+}
+
+ui_gadget_h create_ug(char *ug_name, service_h bd, void *data)
+{
+ debug_log("");
+ ui_gadget_h ug;
+ struct ug_cbs cbs = { 0, };
+
+ cbs.layout_cb = layout_cb;
+ cbs.result_cb = result_cb;
+ cbs.destroy_cb = destroy_cb;
+ cbs.priv = data;
+
+ ug = ug_create(NULL, ug_name, UG_MODE_FULLVIEW, bd, &cbs);
+
+ return ug;
+}
+
+static int _email_main_rotation_cb(app_device_orientation_e m, void *data)
+{
+ debug_log("");
+ struct appdata *ad = data;
+
+ if (ad == NULL || ad->win_main == NULL) {
+ return -1;
+ }
+ debug_log("%d", m);
+
+ switch (m) {
+ case APP_DEVICE_ORIENTATION_0:
+ ug_send_event(UG_EVENT_ROTATE_PORTRAIT);
+ break;
+
+ case APP_DEVICE_ORIENTATION_180:
+ ug_send_event(UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN);
+ break;
+
+ case APP_DEVICE_ORIENTATION_270:
+ ug_send_event(UG_EVENT_ROTATE_LANDSCAPE);
+ break;
+
+ case APP_DEVICE_ORIENTATION_90:
+ ug_send_event(UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN);
+ break;
+
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+static bool app_create(void *data)
+{
+ debug_log("");
+
+ struct appdata *ad = data;
+ Evas_Object *win;
+
+ elm_config_preferred_engine_set("opengl_x11"); //"software_x11"
+
+ /* create window */
+ win = create_win(PACKAGE);
+ if (win == NULL) {
+ debug_log("create_win returns NULL");
+ return false;
+ }
+ ad->win_main = win;
+
+ UG_INIT_EFL(ad->win_main, UG_OPT_INDICATOR_ENABLE);
+
+ /* icu */
+ email_open_icu_pattern_generator();
+
+ return true;
+}
+
+static int app_terminate(void *data)
+{
+ debug_log("");
+
+ set_app_terminated();
+
+ email_engine_finalize_force();
+
+ int ret = e_dbus_shutdown();
+ debug_log("ret: %d", ret);
+
+ return 0;
+}
+
+static int app_pause(void *data)
+{
+ debug_log("");
+
+ set_app_paused();
+ ug_pause();
+
+ return 0;
+}
+
+static int app_resume(void *data)
+{
+ debug_log("");
+
+ reset_app_paused();
+ ug_resume();
+
+ email_clear_all_notification_bar();
+
+ return 0;
+}
+
+static int app_reset(service_h b, void *data)
+{
+ debug_log("");
+ struct appdata *ad = data;
+
+ if (ad->win_main)
+ elm_win_activate(ad->win_main);
+
+ /* init email common module */
+ if (email_engine_initialize() == FALSE) {
+ debug_log("Failed to initialize email engine");
+ evas_object_show(ad->win_main);
+
+ Evas_Object *popup = elm_popup_add(ad->win_main);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_popup_timeout_set(popup, 2.0);
+ elm_object_part_text_set(popup, "title,text", dgettext("sys_string", "IDS_COM_POP_WARNING"));
+ elm_object_text_set(popup, _("IDS_EMAIL_POP_FAILED_TO_START_EMAIL_APPLICATION"));
+ evas_object_smart_callback_add(popup, "block,clicked", popup_block_clicked_cb, NULL);
+ evas_object_smart_callback_add(popup, "timeout", popup_response_cb, NULL);
+ evas_object_show(popup);
+ return -1;
+ }
+
+ if (ad->setting_ug) {
+ debug_log("destroy setting_ug");
+ ug_destroy(ad->setting_ug);
+ ad->setting_ug = NULL;
+ }
+
+ email_clear_all_notification_bar();
+
+ launch_email_ug(b, ad);
+
+ evas_object_show(ad->win_main);
+
+ return 0;
+}
+
+static int app_low_memory(void *data)
+{
+ debug_log("");
+ ug_send_event(UG_EVENT_LOW_MEMORY);
+ return 0;
+}
+
+static int app_low_battery(void *data)
+{
+ debug_log("");
+ ug_send_event(UG_EVENT_LOW_BATTERY);
+ return 0;
+}
+
+static int app_lang_changed(void *data)
+{
+ debug_log("");
+ ug_send_event(UG_EVENT_LANG_CHANGE);
+ return 0;
+}
+
+static int app_region_changed(void *data)
+{
+ debug_log("");
+ ug_send_event(UG_EVENT_REGION_CHANGE);
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ debug_log("");
+
+ if (!g_thread_supported()) {
+ g_thread_init(NULL);
+ }
+ g_type_init();
+
+ app_event_callback_s ops;
+ memset(&ops, 0x0, sizeof(app_event_callback_s));
+
+ ops.create = (app_create_cb)app_create;
+ ops.terminate = (app_terminate_cb)app_terminate;
+ ops.pause = (app_pause_cb)app_pause;
+ ops.resume = (app_resume_cb)app_resume;
+ ops.service = (app_service_cb)app_reset;
+ ops.low_memory = (app_low_memory_cb)app_low_memory;
+ ops.low_battery = (app_low_battery_cb)app_low_battery;
+ ops.device_orientation = (app_device_orientation_cb)_email_main_rotation_cb;
+ ops.language_changed = (app_language_changed_cb)app_lang_changed;
+ ops.region_format_changed = (app_region_format_changed_cb)app_region_changed;
+
+ ecore_init();
+ ecore_thread_max_set(1); /* spawn 1 thread for getting mail list in mailbox */
+
+ struct appdata ad;
+ memset(&ad, 0x0, sizeof(struct appdata));
+
+ return app_efl_main(&argc, &argv, &ops, &ad);
+}
+
+static Evas_Object *create_win(const char *name)
+{
+ debug_log("");
+ Evas_Object *eo;
+ int w, h;
+
+ eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+ if (eo) {
+ elm_win_title_set(eo, name);
+ evas_object_smart_callback_add(eo, "delete,request", win_del, NULL);
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+ evas_object_resize(eo, w, h);
+ }
+
+ return eo;
+}
+
+static void win_del(void *data, Evas_Object *obj, void *event)
+{
+ debug_log("");
+ elm_exit();
+}
+
+static void launch_email_ug(service_h b, struct appdata *ad)
+{
+ debug_log("");
+
+ if (b == NULL || ad == NULL) {
+ debug_log("bundle data is NULL");
+ return;
+ }
+
+ gint acct_id = 0;
+
+ /* 0. run email in no default account */
+ if (!email_engine_get_default_account(&acct_id)) {
+ debug_log("Initial Access");
+
+ if (ad->setting_ug) {
+ debug_log("Setting is already running");
+ return;
+ }
+
+ int ret;
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ return;
+ }
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_VIEW_TYPE, EMAIL_BUNDLE_VAL_VIEW_FIRST_SETUP);
+ debug_log("service_add_extra_data: %d", ret);
+
+ ad->setting_ug = create_ug(UG_NAME_EMAIL_SETTING, service, ad);
+
+ if (NULL != ad->setting_ug) {
+ _b_setting_opened = true;
+ }
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+ }
+
+ /* 1. run email ug from app service */
+ if (check_app_svc_operation(b, ad, acct_id)) {
+ return;
+ }
+
+ /* 2. run email ug from mime type parsing */
+ if (check_aul_mime_operation(b, ad)) {
+ return;
+ }
+
+ /* 3. run email ug from run type */
+ if (check_aul_launch_operation(b, ad)) {
+ return;
+ }
+
+ /* 4. run email in normal case (from menuscreen) */
+ if (email_engine_get_default_account(&acct_id)) {
+ debug_log("run email in normal case");
+ if (ad->mailbox_ug) {
+ debug_log("Mailbox is already running");
+ return;
+ }
+
+ int ret;
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ return;
+ }
+
+ char initial[4] = { 0, };
+ snprintf(initial, sizeof(initial), "%d", 1);
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_INITIAL_RUN, initial);
+ debug_log("service_add_extra_data: %d", ret);
+
+ ad->mailbox_ug = create_ug(UG_NAME_EMAIL_MAILBOX, service, ad);
+ _g_mailbox_ug = ad->mailbox_ug;
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+ }
+}
+
+static int check_app_svc_operation(service_h b, struct appdata *ad, gint account_id)
+{
+ debug_log("");
+
+ char *uri = NULL;
+ char *mime = NULL;
+ char *to = NULL;
+ char *cc = NULL;
+ char *bcc = NULL;
+ char *subject = NULL;
+ char *body = NULL;
+ char *operation = NULL;
+ char rtype[10] = { 0, };
+
+ service_get_operation(b, &operation);
+ debug_log("operation = %s", operation);
+
+ if (!operation) {
+ return FALSE;
+ } else {
+ if (g_strcmp0(operation, SERVICE_OPERATION_SEND) != 0 &&
+ g_strcmp0(operation, SERVICE_OPERATION_SEND_TEXT) != 0) {
+ return FALSE;
+ }
+
+ if (email_engine_get_default_account(&account_id) == FALSE) {
+ Evas_Object *popup = elm_popup_add(ad->win_main);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_popup_timeout_set(popup, 2.0);
+ elm_object_part_text_set(popup, "title,text", dgettext("sys_string", "IDS_COM_POP_WARNING"));
+ elm_object_text_set(popup, _("IDS_EMAIL_POP_THERE_IS_NO_ACCOUNT_CREATE_A_NEW_ACCOUNT_FIRST"));
+ evas_object_smart_callback_add(popup, "block,clicked", block_clicked_cb, NULL);
+ evas_object_show(popup);
+ return FALSE;
+ }
+
+ int ret;
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ return FALSE;
+ }
+
+ snprintf(rtype, sizeof(rtype), "%d", RUN_COMPOSER_EXTERNAL);
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_RUN_TYPE, rtype);
+ debug_log("service_add_extra_data: %d", ret);
+
+ if (g_strcmp0(operation, SERVICE_OPERATION_SEND) == 0) {
+ service_get_uri(b, &uri);
+ if (uri) {
+ debug_log("uri: %s", uri);
+
+ if (g_str_has_prefix(uri, URI_SCHEME_MAILTO)) {
+ gchar **vector;
+ vector = g_strsplit_set(uri, "?", -1);
+ if (vector != NULL) {
+ char *mailto_uri = g_strdup(vector[0]);
+ g_strfreev(vector);
+
+ if (mailto_uri && (strlen(mailto_uri) - strlen(URI_SCHEME_MAILTO)) > 0) {
+ to = g_strndup(mailto_uri + strlen(URI_SCHEME_MAILTO),
+ strlen(mailto_uri) - strlen(URI_SCHEME_MAILTO));
+ }
+
+ g_free(mailto_uri);
+ }
+ } else if (g_str_has_prefix(uri, URI_SCHEME_FILE)) {
+ char *file_uri = g_strndup(uri + strlen(URI_SCHEME_FILE),
+ strlen(uri) - strlen(URI_SCHEME_FILE));
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_ATTACHMENT, file_uri);
+ debug_log("service_add_extra_data: %d", ret);
+ } else if (g_str_has_prefix(uri, URI_SCHEME_HTTP)) {
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_BODY, uri);
+ debug_log("service_add_extra_data: %d", ret);
+ } else if (g_str_has_prefix(uri, "/")) {
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_ATTACHMENT, uri);
+ debug_log("service_add_extra_data: %d", ret);
+ }
+ }
+
+ service_get_mime(b, &mime);
+ if (mime)
+ debug_log("mime: %s", mime);
+ }
+
+ if (!to)
+ service_get_extra_data(b, SERVICE_DATA_TO, &to);
+ if (to) {
+ debug_log("to address = %s", to);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_TO, to);
+ debug_log("service_add_extra_data: %d", ret);
+ }
+
+ service_get_extra_data(b, SERVICE_DATA_CC, &cc);
+
+ if (cc) {
+ debug_log("cc address = %s", cc);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_CC, cc);
+ debug_log("service_add_extra_data: %d", ret);
+ }
+
+ service_get_extra_data(b, SERVICE_DATA_BCC, &bcc);
+
+ if (bcc) {
+ debug_log("bcc address = %s", bcc);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_BCC, bcc);
+ debug_log("service_add_extra_data: %d", ret);
+ }
+
+ service_get_extra_data(b, SERVICE_DATA_SUBJECT, &subject);
+
+ if (subject) {
+ debug_log("subject = %s", subject);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_SUBJECT, subject);
+ debug_log("service_add_extra_data: %d", ret);
+ }
+
+ service_get_extra_data(b, SERVICE_DATA_TEXT, &body);
+
+ if (body) {
+ debug_log("body = %s", body);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_BODY, body);
+ debug_log("service_add_extra_data: %d", ret);
+ }
+
+ ad->composer_ug = create_ug(UG_NAME_EMAIL_COMPOSER, service, ad);
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+
+ if (to)
+ g_free(to);
+ if (cc)
+ g_free(cc);
+ if (bcc)
+ g_free(bcc);
+ if (subject)
+ g_free(subject);
+ if (body)
+ g_free(body);
+
+ return TRUE;
+ }
+}
+
+static int check_aul_mime_operation(service_h b, struct appdata *ad)
+{
+ debug_log("");
+ char *aul_content = NULL;
+ char *aul_mime_type = NULL;
+ char rtype[10] = { 0, };
+
+ int ret = service_get_extra_data(b, AUL_K_MIME_TYPE, &aul_mime_type); //"__AUL_MIME_TYPE__"
+ debug_log("service_get_extra_data: %d", ret);
+ ret = service_get_extra_data(b, AUL_K_MIME_CONTENT, &aul_content); //"__AUL_MIME_CONTENT__"
+ debug_log("service_get_extra_data: %d", ret);
+
+ debug_log("mime_type:%s, content:%s", aul_mime_type, aul_content);
+ if (aul_mime_type != NULL && aul_content != NULL) {
+ if (strcmp(aul_mime_type, "email.uri") == 0) {
+ debug_log("AUL CONTENT OPEN, launch composer");
+ struct ug_cbs cbs = { 0, };
+
+ cbs.layout_cb = layout_cb;
+ cbs.result_cb = result_cb;
+ cbs.destroy_cb = aul_destroy_cb;
+ cbs.priv = ad;
+
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ goto FINISH_MIME_LAUNCH;
+ }
+
+ snprintf(rtype, sizeof(rtype), "%d", RUN_COMPOSER_EXTERNAL);
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_RUN_TYPE, rtype);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_TO, aul_content);
+ debug_log("service_add_extra_data: %d", ret);
+
+ ad->composer_ug = ug_create(NULL, UG_NAME_EMAIL_COMPOSER, UG_MODE_FULLVIEW, service, &cbs);
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+ } else {
+ debug_log("Not supported mime type : %s", aul_mime_type);
+ }
+
+FINISH_MIME_LAUNCH:
+ g_free(aul_content);
+ g_free(aul_mime_type);
+ return TRUE;
+ } else {
+ if (aul_content)
+ g_free(aul_content);
+ if (aul_mime_type)
+ g_free(aul_mime_type);
+ return FALSE;
+ }
+}
+
+static int check_aul_launch_operation(service_h b, struct appdata *ad)
+{
+ debug_log("");
+
+ char *runtype = NULL;
+ char *account_id = NULL;
+ char *mail_id = NULL;
+ char *mailbox_id = NULL;
+ char *thread_id = NULL;
+ char *to = NULL;
+ char *cc = NULL;
+ char *bcc = NULL;
+ char *subject = NULL;
+ char *body = NULL;
+ char *attachment = NULL;
+
+ int ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_RUN_TYPE, &runtype);
+ debug_log("service_get_extra_data: %d", ret);
+
+ debug_log("runtype:%s", runtype);
+ if (runtype != NULL) {
+ if (atoi(runtype) == RUN_COMPOSER_EDIT) {
+ debug_log("RUN_COMPOSER_EDIT");
+ if (ad->composer_ug) {
+ debug_log("Composer is already running");
+ goto FINISH_AUL_LAUNCH;
+ }
+
+ ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_MAILBOX, &mailbox_id);
+ debug_log("service_get_extra_data: %d", ret);
+ ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_MAIL_ID, &mail_id);
+ debug_log("service_get_extra_data: %d", ret);
+
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ goto ERROR_AUL_LAUNCH;
+ }
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_RUN_TYPE, runtype);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_MAILBOX, mailbox_id);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_MAIL_ID, mail_id);
+ debug_log("service_add_extra_data: %d", ret);
+
+ ad->composer_ug = create_ug(UG_NAME_EMAIL_COMPOSER, service, ad);
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+
+ goto FINISH_AUL_LAUNCH;
+ }
+
+ else if (atoi(runtype) == RUN_COMPOSER_NEW) {
+ debug_log("RUN_COMPOSER_NEW");
+ if (ad->composer_ug) {
+ debug_log("Composer is already running");
+ goto FINISH_AUL_LAUNCH;
+ }
+
+ int acc_id;
+ email_engine_get_default_account(&acc_id);
+
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ goto ERROR_AUL_LAUNCH;
+ }
+
+ char s_composer_type[14] = { 0, };
+ char s_account_id[14] = { 0, };
+ snprintf(s_composer_type, sizeof(s_composer_type), "%d", RUN_COMPOSER_NEW);
+ snprintf(s_account_id, sizeof(s_account_id), "%d", acc_id);
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_RUN_TYPE, s_composer_type);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_ACCOUNT_ID, s_account_id);
+ debug_log("service_add_extra_data: %d", ret);
+
+ ad->composer_ug = create_ug(UG_NAME_EMAIL_COMPOSER, service, ad);
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+
+ goto FINISH_AUL_LAUNCH;
+ }
+
+ else if (atoi(runtype) == RUN_COMPOSER_EXTERNAL) {
+ debug_log("RUN_COMPOSER_EXTERNAL");
+ if (ad->composer_ug) {
+ debug_log("Composer is already running");
+ goto FINISH_AUL_LAUNCH;
+ }
+
+ ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_TO, &to);
+ debug_log("service_get_extra_data: %d", ret);
+ ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_CC, &cc);
+ debug_log("service_get_extra_data: %d", ret);
+ ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_BCC, &bcc);
+ debug_log("service_get_extra_data: %d", ret);
+ ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_SUBJECT, &subject);
+ debug_log("service_get_extra_data: %d", ret);
+ ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_BODY, &body);
+ debug_log("service_get_extra_data: %d", ret);
+ ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_ATTACHMENT, &attachment);
+ debug_log("service_get_extra_data: %d", ret);
+
+ int acc_id;
+ email_engine_get_default_account(&acc_id);
+
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ goto ERROR_AUL_LAUNCH;
+ }
+
+ char s_composer_type[14] = { 0, };
+ char s_account_id[14] = { 0, };
+
+ snprintf(s_composer_type, sizeof(s_composer_type), "%d", RUN_COMPOSER_EXTERNAL);
+ snprintf(s_account_id, sizeof(s_account_id), "%d", acc_id);
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_RUN_TYPE, s_composer_type);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_ACCOUNT_ID, s_account_id);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_TO, to);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_CC, cc);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_BCC, bcc);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_SUBJECT, subject);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_BODY, body);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_ATTACHMENT, attachment);
+ debug_log("service_add_extra_data: %d", ret);
+
+ ad->composer_ug = create_ug(UG_NAME_EMAIL_COMPOSER, service, ad);
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+
+ goto FINISH_AUL_LAUNCH;
+ }
+
+ else if (atoi(runtype) == RUN_VIEWER) {
+ debug_log("RUN_VIEWER");
+ if (ad->viewer_ug) {
+ debug_log("Viewer is already running");
+ goto FINISH_AUL_LAUNCH;
+ }
+
+ char internal[10] = { 0, };
+
+ snprintf(internal, sizeof(internal), "%d", 0);
+
+ ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_ACCOUNT_ID, &account_id);
+ debug_log("service_get_extra_data: %d", ret);
+ ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_MAIL_ID, &mail_id);
+ debug_log("service_get_extra_data: %d", ret);
+ ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_MAILBOX, &mailbox_id);
+ debug_log("service_get_extra_data: %d", ret);
+
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ goto ERROR_AUL_LAUNCH;
+ }
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_ACCOUNT_ID, account_id);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_MAIL_ID, mail_id);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_MAILBOX, mailbox_id);
+ debug_log("service_add_extra_data: %d", ret);
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_INTERNAL, internal);
+ debug_log("service_add_extra_data: %d", ret);
+
+ ad->viewer_ug = create_ug(UG_NAME_EMAIL_VIEWER, service, ad);
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+
+ goto FINISH_AUL_LAUNCH;
+ }
+
+ else if (atoi(runtype) == RUN_MAILBOX_THREAD) {
+ debug_log("RUN_MAILBOX_THREAD");
+ if (ad->mailbox_ug) {
+ debug_log("Mailbox is already running");
+ goto FINISH_AUL_LAUNCH;
+ }
+
+ ret = service_get_extra_data(b, EMAIL_BUNDLE_KEY_THREAD_ID, &thread_id);
+ debug_log("service_get_extra_data: %d", ret);
+ debug_log("thread_id: [%d]", atoi(thread_id));
+
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ goto ERROR_AUL_LAUNCH;
+ }
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_THREAD_ID, thread_id);
+ debug_log("service_add_extra_data: %d", ret);
+
+ ad->mailbox_ug = create_ug(UG_NAME_EMAIL_MAILBOX, service, ad);
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+
+ goto FINISH_AUL_LAUNCH;
+ }
+
+ else if (atoi(runtype) == RUN_SETTING_ACCOUNT_ADD) {
+ debug_log("RUN_SETTING_ACCOUNT_ADD");
+
+ gint acct_id = 0;
+ if (email_engine_get_default_account(&acct_id)) {
+ debug_log("Default accont is exist");
+ goto ERROR_AUL_LAUNCH;
+ }
+
+ if (ad->setting_ug) {
+ debug_log("Setting is already running");
+ goto FINISH_AUL_LAUNCH;
+ }
+
+ service_h service = NULL;
+
+ ret = service_create(&service);
+ debug_log("service_create: %d", ret);
+ if (!service) {
+ debug_log("service create failed");
+ goto ERROR_AUL_LAUNCH;
+ }
+
+ ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_VIEW_TYPE, EMAIL_BUNDLE_VAL_VIEW_FIRST_SETUP);
+ debug_log("service_add_extra_data: %d", ret);
+
+ ad->setting_ug = create_ug(UG_NAME_EMAIL_SETTING, service, ad);
+
+ ret = service_destroy(service);
+ debug_log("service_destroy: %d", ret);
+
+ goto FINISH_AUL_LAUNCH;
+ }
+
+FINISH_AUL_LAUNCH:
+ g_free(runtype);
+ g_free(mailbox_id);
+ g_free(mail_id);
+ g_free(account_id);
+ g_free(thread_id);
+ g_free(to);
+ g_free(cc);
+ g_free(bcc);
+ g_free(subject);
+ g_free(body);
+ g_free(attachment);
+ return TRUE;
+
+ERROR_AUL_LAUNCH:
+ g_free(runtype);
+ g_free(mailbox_id);
+ g_free(mail_id);
+ g_free(account_id);
+ g_free(thread_id);
+ g_free(to);
+ g_free(cc);
+ g_free(bcc);
+ g_free(subject);
+ g_free(body);
+ g_free(attachment);
+ return FALSE;
+ }
+
+ return FALSE;
+}
+
+static void block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ evas_object_del(obj);
+}
+
+static void popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ debug_log("");
+
+ if (obj)
+ evas_object_del(obj);
+
+ elm_exit();
+}
+
+static void popup_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ debug_log("");
+ elm_exit();
+}
+
+/* EOF */