diff options
Diffstat (limited to 'mailbox/include/email-mailbox.h')
-rwxr-xr-x | mailbox/include/email-mailbox.h | 456 |
1 files changed, 456 insertions, 0 deletions
diff --git a/mailbox/include/email-mailbox.h b/mailbox/include/email-mailbox.h new file mode 100755 index 0000000..27dbe1a --- /dev/null +++ b/mailbox/include/email-mailbox.h @@ -0,0 +1,456 @@ +/* + * 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 __DEF_EMAIL_MAILBOX_H_ +#define __DEF_EMAIL_MAILBOX_H_ + +#include <Elementary.h> +#include <Ecore_IMF.h> +#include <vconf.h> +#include <libintl.h> +#include <appcore-efl.h> +#undef _ +#include <ui-gadget-module.h> +#include <Ecore_X.h> + +#include <glib.h> +#include <glib-object.h> +#include <glib/gprintf.h> + +#include "email-types.h" +#include "email-debug.h" +#include "email-common-types.h" +#include "email-engine.h" +#include "email-utils.h" +#include "email-locale.h" + +#include <unicode/uloc.h> +#include <unicode/ucal.h> +#include <unicode/udat.h> +#include <unicode/udatpg.h> +#include <unicode/ustring.h> + +#define MAILBOX_PACKAGE "email-mailbox" + +#define EDJ_PATH EDJDIR +#define GRP_MAIN "main" +#define GRP_MAIN_ALL_EMAILS "main_all_emails" +#define THEME_PATH EDJ_PATH"/email-mailbox-theme.edj" +#define EFFECT_EDJ_PATH EDJ_PATH"/email-effect-layout.edj" +#define _EDJ(o) elm_layout_edje_get(o) + +#define ICON_BLOCK IMGDIR"/M02_controlbar_icon_block.png" +#define ICON_MOVE IMGDIR"/M02_controlbar_icon_move.png" +#define ICON_DELETE_ALL IMGDIR"/M02_controlbar_icon_delete_all.png" +#define ICON_DELETE IMGDIR"/M02_controlbar_icon_delete.png" +#define ICON_MARKUNREAD IMGDIR"/M02_controlbar_icon_mark_as_unread.png" +#define ICON_CANCEL IMGDIR"/M02_controlbar_icon_cancel.png" +#define ICON_COMPOSE IMGDIR"/M02_controlbar_icon_compose.png" +#define ICON_UPDATE IMGDIR"/M02_controlbar_icon_update.png" +#define ICON_FOLDERS IMGDIR"/M02_email_icon_title_folders.png" +#define ICON_SORTBY IMGDIR"/M02_controlbar_icon_sort_by.png" +#define ICON_VIEWMODE IMGDIR"/M02_controlbar_icon_view_mode.png" +#define ICON_MORE IMGDIR"/M02_controlbar_icon_more.png" +#define ICON_EDIT IMGDIR"/M02_controlbar_icon_edit.png" +#define ICON_CLOSE IMGDIR"/M02_email_icon_title_down.png" +#define ICON_OPEN IMGDIR"/M02_email_icon_title_up.png" +#define ICON_TITLE_ALL_ACC IMGDIR"/M02_email_list_icon_allaccount.png" +#define ICON_INDEX_CLOSE IMGDIR"/M02_email_icon_index_close.png" + +#define CK_UNCHECKED 0 +#define CK_CHECKED 1 + +#define EMAIL_SLOT_UNIT 25 + +typedef struct EmailMailboxListAppData EmailMailboxListAppData; + +struct EmailMailboxListAppData { + Evas *evas; + Evas_Object *win_main; + Evas_Object *layout_main; /* layout widget based on EDJ */ +}; + +typedef struct ug_data EmailMailboxUGD; + +typedef struct { + EmailMailboxUGD *mailbox_ugd; + + gchar *from; + gchar *alias; + gchar *sender; + gchar *preview_body; + char *title; + char *recipient; + gint group_index; + gchar *timeordate; + gchar *group_title; + gchar *group_date; + gint mailbox_id; + int mailbox_type; + gboolean is_attachment; + gboolean is_seen; + gboolean is_sending_now; + gboolean is_body_download; + gint mail_id; + gint account_id; + int account_color; + gint thread_id; + gint thread_count; + gint chksel; + Evas_Object *check; + Evas_Object *flag_ic; + gint imp_sel; + Evas_Object *important; + gint idx; + gint priority; + gint reply_flag; + gint forward_flag; + gint followup_flag; + time_t absolute_time; + Elm_Object_Item *item; +} list_data; + +typedef enum { + EMAIL_MAILBOX_MODE_UNKOWN = -1, + EMAIL_MAILBOX_MODE_ALL, + EMAIL_MAILBOX_MODE_MAILBOX, + EMAIL_MAILBOX_MODE_MAX, +} EmailMailboxMode; + + +typedef enum { + VIEWBY_UNKNOWN = -1, + VIEWBY_DATE_RECENT, + VIEWBY_DATE_OLD, + VIEWBY_SENDER_ATOZ, + VIEWBY_SENDER_ZTOA, + VIEWBY_UNREAD, + VIEWBY_IMPORTANT, + VIEWBY_ATTACHMENT, + VIEWBY_PRIORITY, + VIEWBY_MAX, +} EmailMailboxViewby; + +typedef enum { + VIEWMODE_UNKNOWN = -1, + VIEWMODE_STANDARD, + VIEWMODE_CONVERSATION, + VIEWMODE_MAX, +} EmailMailboxViewmode; + +typedef enum { + SEARCHBY_UNKNOWN = -1, + SEARCHBY_ALL, + SEARCHBY_TITLE, + SEARCHBY_SENDER, + SEARCHBY_MAX, +} EmailMailboxSearchby; + +typedef enum { + EMAIL_GROUP_UNKNOWN = -1, + EMAIL_GROUP_TODAY, + EMAIL_GROUP_YESTERDAY, + EMAIL_GROUP_SUN, + EMAIL_GROUP_MON, + EMAIL_GROUP_TUE, + EMAIL_GROUP_WED, + EMAIL_GROUP_THU, + EMAIL_GROUP_LASTWEEK, + EMAIL_GROUP_TWOWEEKS_AGO, + EMAIL_GROUP_THREEWEEKS_AGO, + EMAIL_GROUP_EARLIER_THISMONTH, + EMAIL_GROUP_LASTMONTH, + EMAIL_GROUP_OLDER, + EMAIL_GROUP_UNREAD, + EMAIL_GROUP_READ, + EMAIL_GROUP_FAVORITES, + EMAIL_GROUP_ATTACHMENTS, + EMAIL_GROUP_OTHER, + EMAIL_GROUP_PRIORITY_HIGH, + EMAIL_GROUP_PRIORITY_NORMAL, + EMAIL_GROUP_PRIORITY_LOW, + EMAIL_GROUP_MAX, +} EmailMailboxGroup; + +typedef enum { + EMAIL_VIEW_UNKNOWN = -1, + EMAIL_VIEW_DATE, /* should display only seed mail */ + EMAIL_VIEW_RECIPIENT, /* should display recipient list */ + EMAIL_VIEW_UNREAD, /* should display only unread mail */ + EMAIL_VIEW_IMPORTANT, /* Disply only important mail */ + EMAIL_VIEW_EDIT, /* Delete / Block / MoveTo */ + EMAIL_VIEW_SEARCH, + EMAIL_VIEW_PRIORITY, + EMAIL_VIEW_ATTACHMENTS, + EMAIL_VIEW_MAX, +} EmailMailboxViewType; + +typedef struct _email_movefolder_list { + email_mailbox_t *mailbox_list; + EmailMailboxUGD *mailbox_ugd; +} email_movefolder_list; + +typedef struct _MailboxAdvSearchViewInfo { + Evas_Object *clicked_object; + Evas_Object *entry_title; + Evas_Object *entry_sender_address; + Evas_Object *entry_date_from; + Evas_Object *entry_date_to; + Evas_Object *search_title; + Evas_Object *search_sender_address; + Evas_Object *search_date_from; + Evas_Object *search_date_to; + char* str_title; + char* str_sender_address; + char* str_search_criteria; + time_t from_date; + time_t to_date; + char* str_from_date; + char* str_to_date; + EmailMailboxUGD *mailbox_ugd; +} MailboxAdvSearchViewInfo; + +typedef struct _noti_event { + int operation; + int data1; + int data2; + char* data3; + int data4; +} noti_event; + +struct ug_data { + Evas *evas; + Evas_Object *win_main; + Evas_Object *layout_main; + Evas_Object *panes; + Evas_Object *gen_list_index; + Evas_Object *effect_account_ly; + Evas_Object *effect_composer_ly; + + EmailMailboxViewType view_type; + EmailMailboxViewType previous_view; + Evas_Object *gl[EMAIL_VIEW_MAX]; + Evas_Object *ly; + Evas_Object *check; + Evas_Object *navi_bar; + Evas_Object *controlbar_seg; + Evas_Object *controlbar_btns; + Evas_Object *prev_controlbar; + Evas_Object *no_content; + Evas_Object *no_content_sender; + Elm_Theme *theme; + Elm_Object_Item *navibar_item[EMAIL_VIEW_MAX]; + Evas_Object *navi_title_ly; + Evas_Object *sp_icon; + Evas_Object *title_arrow; + Evas_Object *content_edit; + Evas_Object *searchbar_en; + Elm_Object_Item *load_more_button; + Elm_Object_Item *edit_button; + //Elm_Object_Item *edit_cancel_button; + Evas_Object *folder_button; + Evas_Object *update_button; + Evas_Object *sync_progress; + Elm_Object_Item *delete_all_button; + Evas_Object *ctxpopup; + Evas_Object *motion_popup; + GList *important_list; + Elm_Object_Item *date_tab; + Evas_Object *selectioninfo_layout; + Evas_Object *sub_layout[EMAIL_VIEW_MAX]; + Evas_Object *move_button; + Evas_Object *block_button; + Evas_Object *search_layout; + Evas_Object *searchbar_layout; + Evas_Object *searchbar_area; + Evas_Object *searchby_button; + Evas_Object *prev_search_layout; + Evas_Object *prev_searchbar_layout; + Evas_Object *prev_searchbar_en; + Evas_Object *prev_searchbar_area; + Evas_Object *prev_searchby_button; + Elm_Object_Item *git[EMAIL_VIEW_MAX][EMAIL_GROUP_MAX]; + app_device_orientation_e current_rotmode; + bool isRotate; + Evas_Object *viewer_ly; + Evas_Object *main_back_btn; + Evas_Object *viewby_popup; + Evas_Object *delete_popup; + Evas_Object *searchby_ctx_popup; + Evas_Object *account_dim; + GList *folder_list; + GList *selected_list; /* revised, used to move the mails selected in previous view */ + GList *delete_mail_list; + GList *noti_Q; + gboolean need_sync; + gint sort_type_index; + gint from_width; + gint account_id; + gint thread_id; + gint thread_mail_count; + gint total_count; + gint date_type; + gint chk_cnt; + gint unread_cnt; + EmailSortType sort_type; + gboolean refresh; + gboolean bhour; + gchar *search_text; + guint index; + char *address; + gchar *display_name; + guint add_item_id; + gint mailbox_id; + email_mailbox_type_e mailbox_type; + gchar *folder_alias; + gchar *user_email; + gint uid; + gint cur_container_type; + gint initial_run; + gint b_thread_list; + gint main_w; + gint main_h; + + EmailSearchType search_type; + email_movefolder_list *move_folder_list; /* revised, used to dealloc */ + gint move_folder_cnt; /* revised, used to dealloc */ + + MailboxAdvSearchViewInfo *adv_search_info; + gboolean b_advanced_search_view; + unsigned emf_handle; + EmailAccountInfo *account_info; + E_DBus_Connection *edbus_conn; + gchar *prev_group_title; + //email_sender_list *sender_list; + //gint sender_cnt; + EmailMailboxMode mode; + + /* index for mail list when mailbox receive email from emailservice */ + gint download_idx; + Elm_Object_Item *after_item; + Evas_Object *base; + ui_gadget_h ug; + struct ug_cbs cbs; + + ui_gadget_h ug_viewer; + ui_gadget_h ug_composer; + ui_gadget_h ug_account; + ui_gadget_h ug_setting; + ui_gadget_h ug_document; + int viewer_refresh; + int viewer_effect; + Evas_Object *temp_ly; + bool viewer_loading; + Evas_Object *split_nocontent; + GList *list_data[EMAIL_VIEW_MAX]; + int create_progress_part; + + Elm_Genlist_Item_Class itc1; + Elm_Genlist_Item_Class itc2; +}; + + +/* int account_id, email_folder_type_e folder_type */ +#define GET_MAILBOX_ID(account_id, folder_type) \ + ({\ + int _acct = account_id;\ + int _type = folder_type;\ + int _folder = 0;\ + email_mailbox_t *mbox = NULL;\ + int e = email_get_mailbox_by_mailbox_type(_acct, _type, &mbox);\ + if( e != EMAIL_ERROR_NONE || !mbox ) {\ + debug_warning("Error to get mailbox id acct(%d) type(%d) - err(%d) or mbox is NULL(%p)",\ + _acct, _type, e, mbox);\ + }\ + else _folder = mbox->mailbox_id;\ + if(mbox) email_free_mailbox(&mbox, 1);\ + _folder;\ + }) + +/* int mailbox_id */ +#define GET_MAILBOX_TYPE(mailbox_id) \ + ({\ + int _folder = mailbox_id;\ + email_mailbox_t *mbox = NULL;\ + int type = EMAIL_MAILBOX_TYPE_NONE;\ + int e = email_get_mailbox_by_mailbox_id(_folder, &mbox);\ + if( e != EMAIL_ERROR_NONE || !mbox )\ + debug_warning("email_get_mailbox_by_mailbox_id folder(%d) - err(%d) or mbox is NULL(%p)",\ + _folder, e, mbox);\ + else type = mbox->mailbox_type;\ + if(mbox) email_free_mailbox(&mbox, 1);\ + type;\ + }) + +#define GET_ACCOUNT_SERVER_TYPE(account_id) \ + ({\ + email_account_t *email_account = NULL;\ + int server_type = 0;\ + int e = email_get_account(account_id, EMAIL_ACC_GET_OPT_DEFAULT, &email_account);\ + if (e != EMAIL_ERROR_NONE || !email_account) {\ + debug_warning("email_get_account acct(%d) - err(%d) or acct NULL(%p)",\ + account_id, e, email_account);\ + }\ + else server_type = email_account->incoming_server_type;\ + if(email_account) email_free_account(&email_account, 1);\ + server_type;\ + }) + +#define GET_INBOX_TO_GETMORE(account_id) \ + ({\ + int _folder = GET_MAILBOX_ID(account_id, EMAIL_MAILBOX_TYPE_INBOX);\ + email_mailbox_t *mbox = NULL;\ + int i_getmore = 0;\ + int e = email_get_mailbox_by_mailbox_id(_folder, &mbox);\ + if( e != EMAIL_ERROR_NONE || !mbox )\ + debug_warning("email_get_mailbox_by_mailbox_id folder(%d) - err(%d) or mbox is NULL(%p)",\ + _folder, e, mbox);\ + else i_getmore = (mbox->total_mail_count_on_server-mbox->total_mail_count_on_local);\ + if(mbox) email_free_mailbox(&mbox, 1);\ + i_getmore;\ + }) + +#define GET_MAILBOX_TO_GETMORE(mailbox_id) \ + ({\ + int _folder = mailbox_id;\ + email_mailbox_t *mbox = NULL;\ + int i_getmore = 0;\ + int e = email_get_mailbox_by_mailbox_id(_folder, &mbox);\ + if( e != EMAIL_ERROR_NONE || !mbox )\ + debug_warning("email_get_mailbox_by_mailbox_id folder(%d) - err(%d) or mbox is NULL(%p)",\ + _folder, e, mbox);\ + else i_getmore = (mbox->total_mail_count_on_server-mbox->total_mail_count_on_local);\ + if(mbox) email_free_mailbox(&mbox, 1);\ + i_getmore;\ + }) + +void _update_navigationbar_title(EmailMailboxUGD *mailbox_ugd); +ui_gadget_h create_composer_ug(char *ug_name, service_h service, void *data); +void layout_composer_cb(ui_gadget_h ug, enum ug_mode mode, void *priv); +void result_composer_cb(ui_gadget_h ug, service_h service, void *priv); +void _stop_emf_job(EmailMailboxUGD *mailbox_ugd, unsigned handle, gboolean change_download_label_in_panel); +void email_rotate_landscape(EmailMailboxUGD *mailbox_ugd); +void _update_toolbar_clicked_cb(void *data, Evas_Object *obj, void *event_info); +void _update_toolbar_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info); +void destroy_account_cb(ui_gadget_h ug, void *priv); +void _sync_all_folder(EmailMailboxUGD *mailbox_ugd); +void _sync_curr_folder(EmailMailboxUGD *mailbox_ugd, int mailbox_id); +void _open_email_body(gint uid, Elm_Object_Item *item); +void _create_email_no_content_view(EmailMailboxUGD *mailbox_ugd); +void _reset_refer_item_and_idx(EmailMailboxUGD *mailbox_ugd); +email_sort_type_t _mailbox_conv_sort_type(EmailSortType sort_type); + +#endif /* __DEF_email-mailbox_H__ */ |