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