dd77141fb329e831a63cc452f09f761ad6982504
[apps/core/preloaded/email.git] / viewer / src / email-viewer-webview.c
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 #include <status.h>
18 #include <media_content.h>
19
20 #include "email-viewer-webview.h"
21 #include "email-viewer-utils.h"
22 #include "email-debug.h"
23 #include "email-engine.h"
24 #include "email-html-converter.h"
25
26 static void _webview_load_finished_cb(void *data, Evas_Object *obj, void *event_info);
27 static void _webview_load_error_cb(void *data, Evas_Object *obj, void *event_info);
28 static void _webview_load_committed_cb(void *data, Evas_Object *obj, void *event_info);
29 static void _webview_load_noemptylayout_finished_cb(void *data, Evas_Object *obj, void *event_info);
30 static void _webview_load_progress_cb(void *data, Evas_Object *obj, void *event_info);
31
32 /* Double_Scroller */
33 static void _webview_edge_top_cb(void *data, Evas_Object *obj, void *event_info);
34 static void _webview_edge_bottom_cb(void *data, Evas_Object *obj, void *event_info);
35 static void _webview_scroll_up_cb(void *data, Evas_Object *obj, void *event_info);
36 static void _webview_scroll_down_cb(void *data, Evas_Object *obj, void *event_info);
37 static void _webview_mouse_down_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info);
38 static void _webview_contextmenu_customize_cb(void *data, Evas_Object *webview, void *event_info);
39 static void _webview_contextmenu_selected_cb(void *data, Evas_Object *webview, void *event_info);
40 static int _send_read_report_mail(EmailViewerUGD *ug_data);
41
42 extern EmailViewerUGD *_g_ug_data;
43 extern ui_gadget_h _g_mailbox_ug;
44
45 static int _g_pos_x;
46 static int _g_pos_y;
47
48 Evas_Object *viewer_get_webview(EmailViewerUGD *ug_data, gboolean has_html)
49 {
50         debug_log("");
51
52         Evas_Object *ewk_view = ewk_view_add(evas_object_evas_get(ug_data->win_main/*layout_main*/));
53         ug_data->webview = ewk_view;
54
55         Ewk_Settings *setting = ewk_view_settings_get(ewk_view);
56
57         ewk_settings_auto_fitting_set(setting, EINA_TRUE);
58         ewk_settings_text_zoom_enabled_set(setting, EINA_FALSE);
59
60         if (ewk_settings_load_remote_images_set(setting, ug_data->b_show_remote_images) == EINA_FALSE) {
61                 debug_log("SET remote images is FAILED!");
62         }
63
64         /* Double_Scroller */
65         ewk_view_vertical_panning_hold_set(ug_data->webview, EINA_TRUE);
66         evas_object_smart_callback_add(ug_data->webview, "edge,top", _webview_edge_top_cb, ug_data);
67         evas_object_smart_callback_add(ug_data->webview, "edge,bottom", _webview_edge_bottom_cb, ug_data);
68         evas_object_smart_callback_add(ug_data->webview, "scroll,up", _webview_scroll_up_cb, ug_data);
69         evas_object_smart_callback_add(ug_data->webview, "scroll,down", _webview_scroll_down_cb, ug_data);
70
71         evas_object_smart_callback_add(ug_data->webview, "load,committed", _webview_load_committed_cb, ug_data);
72         evas_object_smart_callback_add(ug_data->webview, "load,finished", _webview_load_finished_cb, ug_data);
73         evas_object_smart_callback_add(ug_data->webview, "load,nonemptylayout,finished", _webview_load_noemptylayout_finished_cb, ug_data);
74         evas_object_smart_callback_add(ug_data->webview, "load,progress", _webview_load_progress_cb, ug_data);
75         evas_object_smart_callback_add(ug_data->webview, "load,error", _webview_load_error_cb, ug_data);
76
77         evas_object_smart_callback_add(ug_data->webview, "contextmenu,customize", _webview_contextmenu_customize_cb, ug_data);
78         evas_object_smart_callback_add(ug_data->webview, "contextmenu,selected", _webview_contextmenu_selected_cb, ug_data);
79
80         evas_object_event_callback_add(ug_data->webview, EVAS_CALLBACK_MOUSE_DOWN, _webview_mouse_down_cb, ug_data);
81
82         evas_object_show(ug_data->webview);
83
84         return ug_data->webview;
85 }
86
87 void viewer_set_webview_content(EmailViewerUGD *ug_data, int reload)
88 {
89         debug_log("");
90
91         if (!ug_data) {
92                 debug_log("ug_data is NULL");
93                 return;
94         }
95
96         if (ug_data->webview_data == NULL) {
97                 debug_log("webview_data is NULL");
98                 return;
99         }
100
101         EmailViewerWebview *wvd = ug_data->webview_data;
102
103         if (reload && (wvd->body_type == wvd->body_type_prev)) {
104                 debug_log("reload current uri");
105                 ewk_view_reload(ug_data->webview);
106                 return;
107         }
108
109         char tmp_file_path[MAX_PATH_LEN] = { 0, };
110         char *tmp_file_name = NULL;
111
112         /* set content */
113         if (wvd->body_type == BODY_TYPE_HTML) {
114                 if (wvd->uri == NULL) {
115                         debug_log("invalid uri");
116                         return;
117                 }
118
119                 /* Fix for issue - Sometimes html content of previous mail is shown
120                  * Set the default html page if file size is 0 */
121                 struct stat statbuf = { 0 };
122                 int status = lstat(wvd->uri, &statbuf);
123                 if (!status) {
124                         debug_log("Total file size: %d", (int)statbuf.st_size);
125                         if ((int)statbuf.st_size == 0) {
126                                 debug_log("Set URI with default html");
127                                 ewk_view_url_set(ug_data->webview, EMAIL_DEFAULT_HTML);
128                                 return;
129                         }
130                 }
131
132                 snprintf(tmp_file_path, sizeof(tmp_file_path), "file://%s", wvd->uri);
133                 debug_log("file://%s", wvd->uri);
134         } else if (wvd->body_type == BODY_TYPE_TEXT) {
135                 /* generate temporary html file for viewing */
136                 tmp_file_name = viewer_set_html_content_file(wvd);
137
138                 snprintf(tmp_file_path, sizeof(tmp_file_path), "file://%s", tmp_file_name);
139                 debug_log("file://%s", tmp_file_name);
140         }
141
142         debug_log("default encoding:%s", ug_data->property->charset);
143         Ewk_Settings *setting = ewk_view_settings_get(ug_data->webview);
144         ewk_settings_default_encoding_set(setting, ug_data->property->charset);
145         ewk_view_url_set(ug_data->webview, tmp_file_path);
146 }
147
148 char *viewer_set_html_content_file(EmailViewerWebview *wvd)
149 {
150         debug_log("");
151
152         FILE *fp;
153         char *html;
154         char *tmp_file_name;
155         char *email_content = "\0";
156
157         tmp_file_name = EMAIL_TMP_FILE_PATH ".html";
158         unlink(tmp_file_name);  /*remove previous file*/
159
160         email_content = wvd->text_content;
161         html = email_html_converter(email_content, wvd->charset);
162         debug_log("html:%s", html);
163         fp = fopen(tmp_file_name, "w");
164         if (fp != NULL) {
165                 fputs(html, fp);
166                 fclose(fp);
167         }
168
169         if (html)
170                 g_free(html);
171
172         return tmp_file_name;
173 }
174
175 void viewer_coords_ewk_to_evas(Evas_Object *view, int ewkX, int ewkY, int *evasX, int *evasY)
176 {
177         int scrollX, scrollY, viewX, viewY;
178         ewk_view_scroll_pos_get(view, &scrollX, &scrollY);
179         evas_object_geometry_get(view, &viewX, &viewY, NULL, NULL);
180
181         *evasX = ewkX - scrollX + viewX;
182         *evasY = ewkY - scrollY + viewY;
183 }
184
185 void viewer_coords_evas_to_ewk(Evas_Object *view, int evasX, int evasY, int *ewkX, int *ewkY)
186 {
187         debug_log("evasX:%d, evasY:%d", evasX, evasY);
188         int scrollX, scrollY, viewX, viewY;
189         ewk_view_scroll_pos_get(view, &scrollX, &scrollY);
190         evas_object_geometry_get(view, &viewX, &viewY, NULL, NULL);
191         debug_log("scrollX:%d, scrollY:%d, viewX:%d, viewY:%d", scrollX, scrollY, viewX, viewY);
192
193         *ewkX = evasX + scrollX - viewX;
194         *ewkY = evasY + scrollY - viewY;
195 }
196
197 Eina_Bool viewer_send_message(void *data)
198 {
199         debug_log("");
200
201         EmailViewerUGD *ug_data = (EmailViewerUGD *)data;
202
203         if (ug_data->timer) {
204                 ecore_timer_del(ug_data->timer);
205                 ug_data->timer = NULL;
206         }
207
208         int ret;
209         service_h service = NULL;
210
211         ret = service_create(&service);
212         debug_log("service_create: %d", ret);
213         if (!service) {
214                 debug_log("service create failed");
215                 return EINA_FALSE;
216         }
217
218         ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_MSG, EMAIL_BUNDLE_KEY_UNLOCK_LIST);
219         debug_log("service_add_extra_data: %d", ret);
220
221         ug_send_message(_g_mailbox_ug, service);
222
223         ret = service_destroy(service);
224         debug_log("service_destroy: %d", ret);
225
226         return EINA_FALSE;
227 }
228
229 static Eina_Bool _loading_prog_finish_cb(void *data)
230 {
231         debug_log("");
232
233         EmailViewerUGD *ug_data = (EmailViewerUGD *)data;
234
235         if (ug_data->timeout_popup) {
236                 evas_object_del(ug_data->timeout_popup);
237                 ug_data->timeout_popup = NULL;
238         }
239
240         if (ug_data->waiting_timer) {
241                 ecore_timer_del(ug_data->waiting_timer);
242                 ug_data->waiting_timer = NULL;
243         }
244
245         return EINA_FALSE;
246 }
247
248 static void _webview_load_finished_cb(void *data, Evas_Object *obj, void *event_info)
249 {
250         debug_log("");
251         if (data == NULL) {
252                 debug_log("data == NULL");
253                 return;
254         }
255
256         EmailViewerUGD *ug_data = (EmailViewerUGD *)data;
257
258         if (_g_ug_data == NULL) {
259                 debug_log("_g_ug_data == NULL");
260                 evas_object_del(ug_data->timeout_popup);
261                 ug_data->timeout_popup = NULL;
262                 return;
263         }
264
265         ug_data->b_load_finished = EINA_TRUE;
266
267         /*_measure_webview_xy(ug_data);*/
268
269         if (ug_data->timer) {
270                 ecore_timer_del(ug_data->timer);
271                 ug_data->timer = NULL;
272         }
273         ug_data->timer = ecore_timer_add(0.0, viewer_send_message, ug_data);
274
275         double scale, t_scale, ratio, mins, maxs;
276         int w, h;
277         scale = ewk_view_scale_get(ug_data->webview);
278         debug_log("scale is %f", scale);
279
280         t_scale = ewk_view_text_zoom_get(ug_data->webview);
281         debug_log("t_scale is %f", t_scale);
282
283         ewk_view_text_zoom_set(ug_data->webview, 2.3f/scale);
284
285         ewk_view_contents_size_get(ug_data->webview, &w, &h);
286         debug_log("contents width : %d, heigth : %d", w, h);
287
288         ewk_view_scroll_size_get(ug_data->webview, &w, &h);
289         debug_log("scroll width : %d, heigth : %d", w, h);
290
291         ewk_view_scroll_pos_get(ug_data->webview, &w, &h);
292         debug_log("scroll x : %d, y : %d", w, h);
293
294         ratio = ewk_view_device_pixel_ratio_get(ug_data->webview);
295         debug_log("ratio is %f", ratio);
296
297         ewk_view_scale_range_get(ug_data->webview, &mins, &maxs);
298         debug_log("mins : %f , maxs : %f", mins, maxs);
299
300         int send_read_report = 0;
301         email_account_t *account = NULL;
302         if (email_engine_get_account_full_data(ug_data->account_id, &account)) {
303                 if (account) {
304                         account_user_data_t *ud = (account_user_data_t*)account->user_data;
305                         if (ud) {
306                                 debug_log("send_read_report: %d", ud->send_read_report);
307                                 send_read_report = ud->send_read_report;
308                         }
309                 }
310         }
311
312         if (account != NULL) {
313                 email_free_account(&account, 1);
314                 account = NULL;
315         }
316
317         debug_log("flags_seen_field:%d, send_read_report:%d, request_report:%d, report_status:%d", ug_data->email_data->mail_info->flags_seen_field, send_read_report, ug_data->property->request_report, ug_data->email_data->mail_info->report_status & EMAIL_MAIL_REQUEST_MDN);
318         if (!ug_data->email_data->mail_info->flags_seen_field && send_read_report && ug_data->property->request_report == TRUE && (ug_data->email_data->mail_info->report_status & EMAIL_MAIL_REQUEST_MDN)) {
319                 int send_result = _send_read_report_mail(ug_data);
320                 debug_log("send_result (%d)", send_result);
321                 if (send_result != 1) {
322                         debug_log("Failed to send read report mail (%s)", send_result);
323                 }
324         }
325
326         if (ug_data->waiting_timer) {
327                 ecore_timer_del(ug_data->waiting_timer);
328                 ug_data->waiting_timer = NULL;
329         }
330         ug_data->waiting_timer = ecore_timer_add(0.5, _loading_prog_finish_cb, ug_data);
331 }
332
333 static void _webview_load_error_cb(void *data, Evas_Object *obj, void *event_info)
334 {
335         debug_log("");
336 }
337
338 static void _webview_load_committed_cb(void *data, Evas_Object *obj, void *event_info)
339 {
340         debug_log("");
341 }
342
343 static void _webview_load_noemptylayout_finished_cb(void *data, Evas_Object *obj, void *event_info)
344 {
345         debug_log("");
346 }
347
348 static void _webview_load_progress_cb(void *data, Evas_Object *obj, void *event_info)
349 {
350         debug_log("");
351 }
352
353 /* Double_Scroller */
354 static void _webview_edge_top_cb(void *data, Evas_Object *obj, void *event_info)
355 {
356         debug_log("");
357         if (_g_ug_data == NULL) {
358                 debug_log("_g_ug_data == NULL");
359                 return;
360         }
361
362         EmailViewerUGD *ug_data = (EmailViewerUGD *)data;
363
364         if (ug_data->is_webview_scrolling) {
365                 debug_log("main scroller start");
366                 ewk_view_vertical_panning_hold_set(ug_data->webview, EINA_TRUE);        //stop
367
368                 if (elm_widget_scroll_freeze_get(ug_data->scroller) > 0)
369                         elm_object_scroll_freeze_pop(ug_data->scroller);        //restart
370
371                 /* WORKAROUND. To fix scrolling problem when screen is on the bottom of webview. (Do panning to top fast) */
372                 int x, y, w, h;
373                 elm_scroller_region_get(ug_data->scroller, &x, &y, &w, &h);
374                 debug_log("main_scroller(x:%d, y:%d, w:%d, h:%d)", x, y, w, h);
375                 elm_scroller_region_bring_in(ug_data->scroller, x, 0, w, h);
376
377                 ug_data->is_main_scroller_scrolling = EINA_TRUE;
378                 ug_data->is_webview_scrolling = EINA_FALSE;
379         }
380 }
381
382 static void _webview_edge_bottom_cb(void *data, Evas_Object *obj, void *event_info)
383 {
384         debug_log("");
385 }
386
387 static void _webview_scroll_up_cb(void *data, Evas_Object *obj, void *event_info)
388 {
389         //debug_log("");
390 }
391
392 static void _webview_scroll_down_cb(void *data, Evas_Object *obj, void *event_info)
393 {
394         //debug_log("");
395 }
396
397 static void _webview_mouse_down_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info)
398 {
399         debug_log("");
400
401         Evas_Event_Mouse_Down *mouse_info = (Evas_Event_Mouse_Down *)event_info;
402         debug_log("output position: [%d, %d]", mouse_info->output.x, mouse_info->output.y);
403         _g_pos_x = mouse_info->output.x;
404         _g_pos_y = mouse_info->output.y;
405 }
406
407 static int _send_read_report_mail(EmailViewerUGD *ug_data)
408 {
409         debug_log("");
410
411         int err = 0;
412
413         int output_receipt_mail_id = 0;
414         if ((err = email_add_read_receipt(ug_data->email_data->mail_id, &output_receipt_mail_id)) != EMAIL_ERROR_NONE) {
415                 debug_log("   fail sending [%d]", err);
416                 return 0;
417         }
418         debug_log("output_receipt_mail_id of saved email = %d", output_receipt_mail_id);
419
420         int handle = 0;
421
422         if ((err = email_send_mail(output_receipt_mail_id, &handle)) != EMAIL_ERROR_NONE) {
423                 debug_log("   fail sending [%d]", err);
424                 return 0;
425         } else {
426                 debug_log("   finish sending");
427         }
428
429         return 1;
430 }
431
432 #if 0
433 static void _measure_webview_xy(EmailViewerUGD *ug_data)
434 {
435         debug_log("");
436
437         int a, b, c, d;
438         evas_object_geometry_get(ug_data->navi_bar, &a, &b, &c, &d);
439         debug_log("navi_bar x[%d] y[%d] w[%d] h[%d]", a, b, c, d);
440         evas_object_geometry_get(ug_data->sub_ly, &a, &b, &c, &d);
441         debug_log("sub_ly x[%d] y[%d] w[%d] h[%d]", a, b, c, d);
442         evas_object_geometry_get(ug_data->ctr_bar, &a, &b, &c, &d);
443         debug_log("ctr_bar x[%d] y[%d] w[%d] h[%d]", a, b, c, d);
444         evas_object_geometry_get(ug_data->webview_bx, &a, &b, &c, &d);
445         debug_log("webview_bx x[%d] y[%d] w[%d] h[%d]", a, b, c, d);
446 }
447 #endif
448
449 static void _webview_contextmenu_customize_cb(void *data, Evas_Object *obj, void *event_info)
450 {
451         debug_log("");
452
453         int i = 0, count = 0;
454         Eina_Bool isText = EINA_TRUE, isImage = EINA_FALSE;
455         Ewk_Context_Menu* contextmenu = (Ewk_Context_Menu*)event_info;
456         Ewk_Context_Menu_Item* menu_item = NULL;
457         Ewk_Context_Menu_Item_Tag menu_item_tag = EWK_CONTEXT_MENU_ITEM_TAG_NO_ACTION;
458
459         count = ewk_context_menu_item_count(contextmenu);
460         menu_item = ewk_context_menu_nth_item_get(contextmenu, 0);
461         menu_item_tag = ewk_context_menu_item_tag_get(menu_item);
462         debug_log("menu_item_tag : %d", menu_item_tag);
463
464         switch (menu_item_tag) {
465                 case EWK_CONTEXT_MENU_ITEM_TAG_SEARCH_WEB: // text selection
466                 isText = EINA_TRUE;
467                 break;
468                 case EWK_CONTEXT_MENU_ITEM_TAG_OPEN_LINK:       // image or link selection
469                 isText = EINA_FALSE;
470                 isImage = EINA_TRUE;
471                 break;
472                 default:
473                         debug_log("No context menu");
474                         return;
475         }
476
477         for (i = 0; i < count; i++) {
478                 menu_item = ewk_context_menu_nth_item_get(contextmenu, 0);
479                 menu_item_tag = ewk_context_menu_item_tag_get(menu_item);
480                 debug_log("menu_item_tag in for: %d", menu_item_tag);
481                 if (menu_item_tag == EWK_CONTEXT_MENU_ITEM_TAG_TEXT_SELECTION_MODE) { // It is not an image.
482                         isImage = EINA_FALSE;
483                 }
484                 ewk_context_menu_item_remove(contextmenu, menu_item);
485         }
486
487         if (isText == EINA_TRUE) {
488                 ewk_context_menu_item_append_as_action(contextmenu, EWK_CONTEXT_MENU_ITEM_TAG_COPY, _("IDS_EMAIL_OPT_COPY"), EINA_TRUE);
489                 ewk_context_menu_item_append(contextmenu, EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG, NULL, IMGDIR"/icon_search.png", EINA_TRUE);
490         } else {
491                 if (isImage == EINA_TRUE) {
492                         ewk_context_menu_item_append_as_action(contextmenu, EWK_CONTEXT_MENU_ITEM_TAG_COPY_IMAGE_TO_CLIPBOARD, _("IDS_EMAIL_OPT_COPY_IMAGE"), EINA_TRUE);
493                         ewk_context_menu_item_append_as_action(contextmenu, EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG + 1, _("IDS_EMAIL_OPT_SAVE_IMAGE"), EINA_TRUE);
494                         ewk_context_menu_item_append_as_action(contextmenu, EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG + 2, _("IDS_EMAIL_OPT_VIEW_IMAGE"), EINA_TRUE);
495                 }
496         }
497 }
498
499 static void _webview_contextmenu_selected_cb(void *data, Evas_Object *webview, void *event_info)
500 {
501         debug_log("");
502
503         EmailViewerUGD *ug_data = (EmailViewerUGD *)data;
504
505         Ewk_Context_Menu_Item* menu_item = (Ewk_Context_Menu_Item*)event_info;
506         Ewk_Context_Menu_Item_Tag menu_item_tag = EWK_CONTEXT_MENU_ITEM_TAG_NO_ACTION;
507
508         gsize img_buf_len = 0;
509         gchar *img_buf = NULL;
510         char *img_url = NULL;
511         Ewk_Hit_Test *ewk_hit_test = NULL;
512         gchar new_path[MAX_PATH_LEN] = { 0, };
513
514         debug_log("menu_item : %d", menu_item);
515         menu_item_tag = ewk_context_menu_item_tag_get(menu_item);
516         debug_log("menu_item_tag : %d", menu_item_tag);
517
518         img_url = (char *)ewk_context_menu_item_image_url_get(menu_item);
519         debug_log("View image : img_url(%s)", img_url);
520
521         if (img_url != NULL) {
522                 ewk_hit_test = ewk_view_hit_test_new(ug_data->webview, _g_pos_x, _g_pos_y, EWK_HIT_TEST_RESULT_CONTEXT_IMAGE);
523
524                 if (ewk_hit_test != NULL) {
525                         char *ext = NULL;
526                         img_buf = ewk_hit_test_image_buffer_get(ewk_hit_test);
527                         img_buf_len = ewk_hit_test_image_buffer_length_get(ewk_hit_test);
528                         debug_log("View image : img_buf_len(%d)", img_buf_len);
529                         ext = (char *)ewk_hit_test_image_file_name_extension_get(ewk_hit_test);
530                         debug_log("View image : ext(%s)", ext);
531                 }
532         }
533
534         switch (menu_item_tag) {
535         case EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG : //Smart search
536         {
537                 service_h service = NULL;
538                 const char *keyword = NULL;
539                 keyword = ewk_view_text_selection_text_get(ug_data->webview);
540                 debug_log("keyword : %s", keyword);
541
542                 service_create(&service);
543                 service_set_operation(service, SERVICE_OPERATION_SEARCH);
544                 service_add_extra_data(service, "http://tizen.org/appcontrol/data/keyword", keyword);
545                 service_send_launch_request(service, NULL, NULL);
546                 service_destroy(service);
547         }
548         break;
549
550         case EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG + 1 : //Save image
551         {
552                 int ret = 0;
553                 if (viewer_get_filepath_from_path(DIR_DEFAULT_MEDIA_PHONE"/Downloads", img_url, new_path, EINA_TRUE) != EMAIL_EXT_SAVE_ERR_NONE) {
554                         debug_log("file exist!");
555                 }
556
557                 ret = media_content_connect();
558                 if (!ret) {
559                         if (viewer_save_file(new_path, img_buf, img_buf_len) == EINA_FALSE) {
560                                 debug_log("viewer_save_file error!");
561                         } else {
562                                 char str[128] = { 0, };
563                                 snprintf(str, sizeof(str), "%s", dgettext("sys_string", "IDS_COM_POP_SAVED"));
564                                 ret = status_message_post(str);
565                                 if (ret)
566                                         debug_log("status_message_post failed: %d", ret);
567                                 ret = media_content_scan_file(new_path);
568                                 debug_log("media_content_scan_file: %d", ret);
569                         }
570
571                         ret = media_content_disconnect();
572                         if (ret) {
573                                 debug_log("media_content_disconnect() is failed!");
574                         }
575                 } else {
576                         debug_log("media_content_connect() is failed!");
577                 }
578         }
579         break;
580
581         case EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG + 2 : // View image
582         {
583                 if (viewer_get_filepath_from_path(EMAIL_VIEWER_TMP_FOLDER, img_url, new_path, EINA_FALSE) == EMAIL_EXT_SAVE_ERR_NONE) {
584                         debug_log("file existed!");
585                 }
586                 if (viewer_save_file(new_path, img_buf, img_buf_len) == EINA_FALSE) {
587                         debug_log("viewer_save_file error!");
588                 }
589
590                 int ret;
591                 service_h service = NULL;
592                 ret = service_create(&service);
593                 debug_log("service_create: %d", ret);
594                 if (!service) {
595                         debug_log("service create failed");
596                         return;
597                 }
598                 ret = service_set_operation(service, SERVICE_OPERATION_VIEW);
599                 debug_log("service_set_operation: %d", ret);
600                 ret = service_set_uri(service, new_path);
601                 debug_log("service_set_uri: %d", ret);
602                 ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_VIDEO_PLAYER_LAUNCH_APP, "email");
603                 debug_log("service_add_extra_data: %d", ret);
604                 ret = service_send_launch_request(service, NULL, NULL);
605                 debug_log("service_send_launch_request: %d", ret);
606                 ret = service_destroy(service);
607                 debug_log("service_destroy: %d", ret);
608         }
609         break;
610
611         default:
612                 debug_log("Never here!");
613         }
614
615         if (ewk_hit_test != NULL) {
616                 ewk_hit_test_free(ewk_hit_test);
617                 ewk_hit_test = NULL;
618         }
619 }
620
621
622 /* EOF */