Merged with latest code
[apps/core/preloaded/email.git] / viewer / include / email-viewer.h
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *    http://www.tizenopensource.org/license
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef _DEF_email_viewer_H_
18 #define _DEF_email_viewer_H_
19
20 #include <Elementary.h>
21 #include <libintl.h>
22 #include <appcore-efl.h>
23 #undef _
24 #include <ui-gadget-module.h>
25 #include <Evas.h>
26 #include <Ecore_X.h>
27 #include <Edje.h>
28 #include <Eina.h>
29 #include <stdio.h>
30 #include <string.h>
31 #include <stdlib.h>
32 #include <unistd.h>
33 #include <time.h>
34 #include <E_DBus.h>
35 #include <sysman.h>
36 #include <db-util.h>
37 #include <vconf.h>
38 #include <vconf-keys.h>
39 #include <glib.h>
40 #include <glib-object.h>
41 #include <EWebKit2.h>
42
43 #include "email-viewer-logic.h"
44 #include "email-utils.h"
45 #include "email-locale.h"
46
47 #define VIEWER_PACKAGE "email-viewer"
48 #define EV_THEME_PATH EDJDIR"/email-viewer-theme.edj"
49
50 #define _EDJ(o) elm_layout_edje_get(o)
51
52 #define DEFAULT_CHARSET "UTF-8"
53
54 #define MAILBOX_STR_MAX         128
55 #define MAX_STR_LEN                     1024
56 #define MAX_LABEL_LEN           512
57
58 #define CONTACTUI_REQ_ADD_PHONE_NUMBER 19
59 #define CONTACTUI_REQ_ADD_EMAIL 20
60 #define CONTACTUI_REQ_ADD_URL 21
61 #define CONTACTUI_REQ_SELECT_UPDATE_ITEM 11
62 #define CONTACTUI_UPDATE_PHONE_NUMBER 0
63 #define CONTACTUI_UPDATE_EMAIL 1
64 #define CONTACTUI_UPDATE_HOMEPAGE 2
65 #define CONTACT_PHONE_CONTACT 0
66 #define CONTACTUI_REQ_CONTACT_DETAIL_INFO_VIEW 43
67
68 #define EMAIL_VIEW_MAX_TO_COUNT 500
69 #define EMAIL_VIEW_MAX_CC_COUNT 500
70 #define EMAIL_VIEW_MAX_BCC_COUNT 500
71
72 #define EMAIL_DEFAULT_HTML "file://"DATADIR"/_email_default.html"
73 #define EMAIL_VIEWER_TMP_FOLDER DIR_TMP_PREFIX"/email_viewer"
74
75 #define EMAIL_VIEWER_NOC_WIDTH 710.0
76 #define EMAIL_VIEWER_NOC_HIGHT 949.0
77
78 typedef enum {
79         EMAIL_POPUP_BODY_DN_OK = 10,
80         EMAIL_POPUP_EMAIL_DELETE_OK,
81         EMAIL_POPUP_EMAIL_MOVETO_SPAM_OK,
82         EMAIL_POPUP_EMAIL_MOVETO_INBOX_OK,
83         EMAIL_POPUP_BODY_DN_CANCEL,
84         EMAIL_POPUP_ATT_DN_CANCEL,
85         EMAIL_POPUP_ATT_ALL_DN_CANCEL,
86         EMAIL_POPUP_HTML_LOAD_CANCEL,
87         EMAIL_POPUP_MAX
88 } EV_POPUP_RESPONSE_ID;
89
90 typedef enum {
91         BODY_TYPE_TEXT = 0,
92         BODY_TYPE_HTML = 1,
93         BODY_TYPE_INVALID
94 } MESSAGE_BODY_TYPE;
95
96 typedef enum {
97         EMAIL_VIEWER_PROGRESSBAR_ATT = 0,
98         EMAIL_VIEWER_PROGRESSBAR_ATT_ALL,
99         EMAIL_VIEWER_PROGRESSBAR_BODY,
100         EMAIL_VIEWER_PROGRESSBAR_HTML,
101         EMAIL_VIEWER_PROGRESSBAR_MAX
102 } EMAIL_VIEWER_PROGRESSBAR_TYPE;
103
104 typedef struct list_data list_data;
105 struct list_data {
106         gchar *mailbox_ug;
107
108         gchar *from;
109         gchar *title;
110         gchar *timeordate;
111         gchar *group_title;
112         gboolean is_attachment;
113         gboolean is_seen;
114         gboolean is_sending_now;
115         gboolean is_body_download;
116         gint mail_id;
117         gint account_id;
118         gint chksel;
119         gint idx;
120         Elm_Object_Item *item;
121 };
122
123 typedef struct _EmailViewerWebview EmailViewerWebview;
124 struct _EmailViewerWebview {
125         Evas_Coord minw, minh;
126         Evas_Coord w, h;
127         int content_w, content_h;
128         float zoom_rate;
129
130         MESSAGE_BODY_TYPE body_type;
131         MESSAGE_BODY_TYPE body_type_prev;
132
133         char *html_content;
134         char *text_content;
135         char *uri;
136         char *charset;
137 };
138
139 typedef struct ug_data EmailViewerUGD;
140 struct ug_data {
141         Evas_Object *base;
142         ui_gadget_h ug;
143
144         /* base */
145         Evas *evas;
146         Evas_Object *win_main;
147         Evas_Object *layout_main;
148         Evas_Object *sub_ly;
149         Evas_Object *bg;
150         Elm_Theme *theme;
151         int main_w;
152         int main_h;
153
154         /* arguments */
155         int account_id;
156         int account_type;
157         int mail_id;
158         char *mailbox_name;
159         int mailbox_id;
160         char account_email_address[MAX_STR_LEN];
161
162         /* for flick */
163         int prev_mail_id;
164         int next_mail_id;
165         int list_prev_idx;
166         int list_next_idx;
167         int mail_list_cur_idx;
168         GList *mail_list;
169
170         /* flags */
171         int got_att;
172         int b_internal;
173         int subject_onoff_flag;
174         int attach_onoff_flag;
175         int reset_view;
176         int b_noc;
177         int b_direct_destroy;
178         int b_partial_body;
179         int m_is_multi_touch;
180         int scroller_locked;
181         int b_contact_ug_launched;
182         int display_download_result;
183         int option_header_opened;
184         Eina_Bool b_load_finished;
185         Eina_Bool b_show_remote_images;
186         Eina_Bool is_webview_scrolling;
187         Eina_Bool is_main_scroller_scrolling;
188
189         /* for ug create */
190         int create_contact_arg;
191         int update_contact_type;
192
193         /* Scalable UI */
194         float scale_factor;
195         float webview_width;
196         float webview_height;
197         float webview_width_landscape;
198         float webview_height_landscape;
199         int webview_margin;
200         int webview_margin_landscape;
201
202         /* rotation */
203         int isRotate;
204
205         /* mailbox list */
206         email_mailbox_type_e mailbox_type;
207         GList *folder_list;
208         email_mailbox_t *move_mailbox_list;
209         int move_mailbox_count;
210
211         /* Evas Object */
212         Evas_Object *dg_subject;
213         Evas_Object *lb_subject;
214         Evas_Object *ly_subject;
215         Evas_Object *dg_attach;
216         Evas_Object *addrs;
217         Evas_Object *scroller;
218         Evas_Object *webview_bx;
219         Evas_Object *main_bx;
220         Evas_Object *navi_bar;
221         Evas_Object *ctr_bar;
222         Evas_Object *up_ctrl_bar;
223         Evas_Object *webview;
224         Evas_Object *webkit;
225         Evas_Object *con_popup;
226         Evas_Object *timeout_popup;
227         Evas_Object *select_info;
228         Evas_Object *selectioninfo_layout;
229         Evas_Object *notify;
230         Evas_Object *pb_notify;
231         Evas_Object *pb_notify_lb;
232         Evas_Object *dn_popup;
233         Evas_Object *dn_progress;
234         Evas_Object *att_progress;
235         Evas_Object *b_btn;
236         Evas_Object *prev_btn;
237         Evas_Object *more_btn;
238         Evas_Object *next_btn;
239         Evas_Object *dn_btn;
240         Evas_Object *partial_dn_btn;
241         Evas_Object *partial_dn_btn_bx;
242         Evas_Object *top_sp;
243         Evas_Object *noc_bx;
244         Evas_Object *noc;
245         Evas_Object *to_mbe;
246         Evas_Object *cc_mbe;
247         Evas_Object *bcc_mbe;
248
249         Evas_Object *opt_btn1;
250         Evas_Object *opt_btn2;
251         Evas_Object *opt_btn3;
252         Evas_Object *move_cbar;
253
254         Evas_Object *to_ly;
255         Evas_Object *cc_ly;
256         Evas_Object *bcc_ly;
257         Evas_Object *from_btn;
258         Evas_Object *attach_hd_ly;
259         Evas_Object **attach_ex_ly;
260         Evas_Object *attach_hd_bk;
261         Evas_Object **attach_ex_bk;
262
263         Evas_Object *progress_bar[ATTACH_MAX];
264         Evas_Object *progress_bar_ly[ATTACH_MAX];
265
266         Evas_Object *reply_btn;
267         Evas_Object *delete_btn;
268         Evas_Object *resend_btn;
269         Evas_Object *cancel_btn;
270         Evas_Object *move_btn;
271
272         Elm_Object_Item *navi_main_it;
273         Elm_Object_Item *navi_move_it1;
274
275         E_DBus_Connection *edbus_conn;
276         EmailViewerWebview *webview_data;
277         EmailViewerPrivate *email_data;
278         EmailViewerProp *property;
279
280         Evas_Object *gl;
281         Elm_Genlist_Item_Class itc1;
282
283         GList *from_list;
284         GList *to_list;
285         GList *cc_list;
286         GList *bcc_list;
287
288         ui_gadget_h ug_composer;
289         ui_gadget_h ug_image_viewer;
290         ui_gadget_h ug_contacts_search;
291         ui_gadget_h ug_calendar_edit;
292
293         Ecore_Idler *idler;
294         Ecore_Timer *timer;
295         Ecore_Timer *waiting_timer;
296
297         Evas_Object *gesture_obj;
298 };
299
300 void _hide_view(EmailViewerUGD *ug_data);
301 void _launch_composer(EmailViewerUGD *ug_data, int type);
302
303 #endif  /* __DEF_email-viewer_H__ */
304
305 /* EOF */