2 * Copyright 2012 Samsung Electronics Co., Ltd
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
8 * http://floralicense.org/license
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.
20 * ================= */
21 #include <msg-ui-util.h>
22 #include <msg-ui-common-utility.h>
23 #include <msg-ui-image-resource.h>
24 #include <msg_storage.h>
25 #include <elm_widget.h>
28 #include <unicode/uloc.h>
29 #include <unicode/ucal.h>
30 #include <unicode/udat.h>
31 #include <unicode/udatpg.h>
32 #include <unicode/ustring.h>
35 #include <vconf-keys.h>
37 #include <syspopup_caller.h>
38 #include <drm_client.h>
40 static char *icon_array[MSG_APP_FILE_TYPE_MAX] = {
41 [MSG_APP_FILE_TYPE_IMAGE] = MSG_COMMON_FILE_IMAGE_ICON,
42 [MSG_APP_FILE_TYPE_VIDEO] = MSG_COMMON_FILE_VIDEO_ICON,
43 [MSG_APP_FILE_TYPE_MUSIC] = MSG_COMMON_FILE_MUSIC_ICON,
44 [MSG_APP_FILE_TYPE_SOUND] = MSG_COMMON_FILE_SOUND_ICON,
45 [MSG_APP_FILE_TYPE_PDF] = MSG_COMMON_FILE_PDF_ICON,
46 [MSG_APP_FILE_TYPE_DOC] = MSG_COMMON_FILE_DOC_ICON,
47 [MSG_APP_FILE_TYPE_PPT] = MSG_COMMON_FILE_PPT_ICON,
48 [MSG_APP_FILE_TYPE_EXCEL] = MSG_COMMON_FILE_EXCEL_ICON,
49 [MSG_APP_FILE_TYPE_VOICE] = MSG_COMMON_FILE_VOICE_ICON,
50 [MSG_APP_FILE_TYPE_HTML] = MSG_COMMON_FILE_HTML_ICON,
51 [MSG_APP_FILE_TYPE_FLASH] = MSG_COMMON_FILE_FLASH_ICON,
52 [MSG_APP_FILE_TYPE_TXT] = MSG_COMMON_FILE_TXT_ICON,
53 [MSG_APP_FILE_TYPE_VCONTACT] = MSG_COMMON_FILE_VCONTACT_ICON,
54 [MSG_APP_FILE_TYPE_VCALENDAR] = MSG_COMMON_FILE_VCALENDAR_ICON,
55 [MSG_APP_FILE_TYPE_VNOTE] = MSG_COMMON_FILE_VNOTE_ICON,
56 [MSG_APP_FILE_TYPE_RSS] = MSG_COMMON_FILE_RSS_ICON,
57 [MSG_APP_FILE_TYPE_JAVA] = MSG_COMMON_FILE_JAVA_ICON,
58 [MSG_APP_FILE_TYPE_ETC] = MSG_COMMON_FILE_ETC_ICON,
64 } MSG_DETAIL_REPORT_STRUCT;
67 char address[MAX_ADDRESS_VAL_LEN+1];
68 MSG_DETAIL_REPORT_STRUCT delivery;
69 MSG_DETAIL_REPORT_STRUCT read;
70 } MSG_DETAIL_REPORT_LIST_S;
73 /*==========================
74 * FUNCTION IMPLEMENTATIONS
75 *========================== */
76 const char *msg_common_get_default_locale()
79 UErrorCode status = U_ZERO_ERROR;
80 /* ICU API to set default locale */
81 uloc_setDefault(getenv("LC_TIME"), &status);
82 locale = uloc_getDefault();
87 int msg_common_get_timeformat()
91 if (vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &timeformat) < 0)
92 return MSG_TIME_FORMAT_UNKNOWN;
94 if (timeformat == VCONFKEY_TIME_FORMAT_12)
95 return MSG_TIME_FORMAT_12H;
96 else if (timeformat == VCONFKEY_TIME_FORMAT_24)
97 return MSG_TIME_FORMAT_24H;
99 return MSG_TIME_FORMAT_UNKNOWN;
102 char *msg_common_get_date_best_pattern(const char* locale, char* skeleton)
105 D_MSG_RETVM_IF(locale == NULL, NULL, "locale is NULL");
106 D_MSG_RETVM_IF(skeleton == NULL, NULL, "skeleton is NULL");
108 UErrorCode status = U_ZERO_ERROR;
109 UDateTimePatternGenerator *generator = NULL;
110 UChar bestPattern[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
111 char bestPatternString[MSG_COMMON_MAX_CHAR_PATTERN_LEN + 1] = {0,};
112 int32_t bestPatternCapacity = 0;
113 int32_t bestPatternLength = 0;
115 UChar customSkeleton[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
116 int skeletonLength = 0;
118 skeletonLength = strlen(skeleton);
119 /* convert char to uchar */
120 if (skeletonLength <= MSG_COMMON_MAX_UCHAR_PATTERN_LEN)
121 u_uastrncpy(customSkeleton, skeleton, skeletonLength);
123 u_uastrncpy(customSkeleton, skeleton, MSG_COMMON_MAX_UCHAR_PATTERN_LEN);
125 generator = udatpg_open(locale, &status);
126 bestPatternCapacity = MSG_COMMON_MAX_UCHAR_PATTERN_LEN;
128 /* get bestpattern from customskeletom of uchar */
129 bestPatternLength = udatpg_getBestPattern(generator, customSkeleton, u_strlen(customSkeleton), bestPattern, bestPatternCapacity, &status);
131 /* convert uchar to char to know bestpatternstring */
132 u_austrcpy(bestPatternString, bestPattern);
134 udatpg_close(generator);
138 return strdup(bestPatternString);
141 char *msg_common_get_formatted_date(const char* locale, char* bestPattern, void *time)
143 D_MSG_RETVM_IF(locale == NULL, NULL, "locale is NULL");
144 D_MSG_RETVM_IF(bestPattern == NULL, NULL, "bestPattern is NULL");
146 UErrorCode status = U_ZERO_ERROR;
148 UDateFormat *date_format = NULL;
149 UChar uBestPattern[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
150 UChar formatted[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
151 char formattedString[MSG_COMMON_MAX_CHAR_PATTERN_LEN + 1] = {0,};
152 int32_t formattedCapacity = 0;
153 int patternLength = 0, formattedLength = 0;
155 patternLength = strlen(bestPattern);
156 /* convert char to uchar */
157 if (patternLength <= MSG_COMMON_MAX_UCHAR_PATTERN_LEN)
158 u_uastrncpy(uBestPattern, bestPattern, patternLength);
160 u_uastrncpy(uBestPattern, bestPattern, MSG_COMMON_MAX_UCHAR_PATTERN_LEN);
162 /* convert time_t to UDate, if it is */
164 time_t msg_time = *(time_t *) time;
165 date = (UDate) msg_time * 1000; /* Equivalent to Date = ucal_getNow() in Milliseconds */
167 date = ucal_getNow();
170 date_format = udat_open(UDAT_IGNORE, UDAT_IGNORE, locale, NULL, -1, uBestPattern, -1, &status);
171 formattedCapacity = MSG_COMMON_MAX_UCHAR_PATTERN_LEN;
172 /* get formatted string */
173 formattedLength = udat_format(date_format, date, formatted, formattedCapacity, NULL, &status);
174 /* convert uchar to char */
175 u_austrcpy(formattedString, formatted);
177 udat_close(date_format);
179 return strdup(formattedString);
182 char *msg_common_get_date_text(const char* locale, char* skeleton, void* time)
185 D_MSG_RETVM_IF(locale == NULL, NULL, "locale is NULL");
186 D_MSG_RETVM_IF(skeleton == NULL, NULL, "skeleton is NULL");
188 UChar customSkeleton[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
189 int skeletonLength = 0;
191 skeletonLength = strlen(skeleton);
192 /* convert char to uchar */
193 if (skeletonLength <= MSG_COMMON_MAX_UCHAR_PATTERN_LEN)
194 u_uastrncpy(customSkeleton, skeleton, skeletonLength);
196 u_uastrncpy(customSkeleton, skeleton, MSG_COMMON_MAX_UCHAR_PATTERN_LEN);
198 UErrorCode status = U_ZERO_ERROR;
199 UDateTimePatternGenerator *generator = NULL;
200 UDateFormat *date_format = NULL;
202 UChar bestPattern[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
203 UChar formatted[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
204 char bestPatternString[MSG_COMMON_MAX_CHAR_PATTERN_LEN + 1] = {0,};
205 char formattedString[MSG_COMMON_MAX_CHAR_PATTERN_LEN + 1] = {0,};
206 int32_t bestPatternCapacity = 0;
207 int32_t bestPatternLength = 0;
208 int32_t formattedCapacity = 0;
209 int32_t formattedLength = 0;
211 generator = udatpg_open(locale, &status);
212 bestPatternCapacity = MSG_COMMON_MAX_UCHAR_PATTERN_LEN;
214 /* get bestpattern from customskeletom of uchar */
215 bestPatternLength = udatpg_getBestPattern(generator, customSkeleton, u_strlen(customSkeleton), bestPattern, bestPatternCapacity, &status);
217 /* convert uchar to char to know bestpatternstring */
218 u_austrcpy(bestPatternString, bestPattern);
220 /* convert time_t to UDate, if it is */
222 time_t msg_time = *(time_t *) time;
223 date = (UDate) msg_time * 1000; /* Equivalent to Date = ucal_getNow() in Milliseconds */
225 date = ucal_getNow();
227 date_format = udat_open(UDAT_IGNORE, UDAT_IGNORE, locale, NULL, -1, bestPattern, -1, &status);
228 formattedCapacity = MSG_COMMON_MAX_UCHAR_PATTERN_LEN;
229 /* get formatted string */
230 formattedLength = udat_format(date_format, date, formatted, formattedCapacity, NULL, &status);
231 /* convert uchar to char */
232 u_austrcpy(formattedString, formatted);
234 udatpg_close(generator);
235 udat_close(date_format);
237 return strdup(formattedString);
240 char *msg_common_get_display_date(const char* locale, char* bestPattern, char* yearPattern, time_t *msg_t)
242 struct tm msg_time, cur_time;
244 char msg_date_buf[DEF_BUF_LEN] = { '0', };
245 char *date_str = NULL;
246 int diffday = 0, msg_day = 0, cur_day = 0;
248 cur_t = (time_t) time(NULL);
250 localtime_r(msg_t, &msg_time);
251 localtime_r(&cur_t, &cur_time);
253 msg_day = (msg_time.tm_year - 1900) * 365 + msg_time.tm_yday + (msg_time.tm_year - 1900 - 1) / 4;
254 cur_day = (cur_time.tm_year - 1900) * 365 + cur_time.tm_yday + (cur_time.tm_year - 1900 - 1) / 4;
256 if (msg_time.tm_year - cur_time.tm_year != 0)
257 date_str = msg_common_get_formatted_date(locale, yearPattern, msg_t);
259 date_str = msg_common_get_formatted_date(locale, bestPattern, msg_t);
261 diffday = cur_day - msg_day;
263 snprintf(msg_date_buf, sizeof(msg_date_buf), "%s (%s)", dgettext("sys_string", "IDS_COM_BODY_TODAY"), date_str);
264 else if (diffday == 1)
265 snprintf(msg_date_buf, sizeof(msg_date_buf), "%s (%s)", dgettext("sys_string", "IDS_COM_BODY_YESTERDAY"), date_str);
267 strncpy(msg_date_buf, date_str, sizeof(msg_date_buf) - 1);
270 return strdup(msg_date_buf);
273 static MSG_BOOL __msg_common_make_normal_markup_text(Eina_Strbuf *markup_text, Eina_Strbuf *font_style, const char *src, int strlen)
275 D_MSG_RETVM_IF(markup_text == NULL, FALSE, "markup_text is NULL");
276 D_MSG_RETVM_IF(font_style == NULL, FALSE, "font_style is NULL");
277 D_MSG_RETVM_IF(src == NULL, FALSE, "src is NULL");
279 char *tmp_body_buf = NULL;
280 tmp_body_buf = (char *) calloc(strlen + 1, sizeof(char));
282 strncpy(tmp_body_buf, src, strlen);
284 D_EMSG("calloc is failed");
288 eina_strbuf_append_printf(markup_text, "%s%s%s", MSG_COMMON_TAG_TEXT, eina_strbuf_string_get(font_style), tmp_body_buf);
297 Eina_Strbuf *msg_common_get_markup_text(const char *src, char *fontcolor, char *fontstyle)
300 D_MSG_RETVM_IF(src == NULL, NULL, "src is NULL");
302 const char *src_text = src;
304 if (src_text && strlen(src_text) > 0) {
305 Eina_Strbuf *markup_text = NULL;
306 Eina_Strbuf *font_buf = NULL;
308 char *tmp_buf = NULL;
309 char *tmp_str = NULL;
311 int src_text_len = 0;
315 src_text_len = strlen(src_text);
316 D_MSG("src_text_len : %d", src_text_len);
317 tmp_buf = (char *) calloc(src_text_len + 1, sizeof(char));
318 if (tmp_buf == NULL) {
319 D_EMSG("tmp mem alloc is failed!");
323 font_buf = eina_strbuf_new();
324 if (font_buf == NULL) {
325 D_EMSG("font_buf eina_strbuf_new is failed!");
333 markup_text = eina_strbuf_new();
334 if (markup_text == NULL) {
335 D_EMSG("markup_text eina_strbuf_new is failed!");
342 eina_strbuf_free(font_buf);
348 /* make font style */
350 eina_strbuf_append_printf(font_buf, "<%s>", fontstyle);
353 eina_strbuf_append_printf(font_buf, "<color=%s>", fontcolor);
354 D_MSG("font_buf : (%s)", eina_strbuf_string_get(font_buf));
356 snprintf(tmp_buf, src_text_len + 1, "%s\n", (char *) src_text);
358 while (tmp_buf[start] != '\0') {
359 end = strcspn(tmp_buf + start, "\n");
362 eina_strbuf_append(markup_text, "<br>");
363 start += (tmp_buf[start + end] != '\0') ? end + 1 : end;
367 token = (char *)calloc(1, sizeof(char) * (end + 1));
369 D_EMSG("calloc is failed");
373 strncpy(token, tmp_buf + start, end);
375 char *tmp_str = elm_entry_utf8_to_markup(token);
378 D_EMSG("elm_entry_utf8_to_markup() is failed, [%s]. Stop parsing entry text", token);
383 tmp_str_len = strlen(tmp_str);
385 if (tmp_str[tmp_str_len - 1] == 0x0D) { /* if Enter is added via Window system, CR+LF is added. */
386 D_MSG("CR length is decreased");
387 tmp_str_len = tmp_str_len - 1;
390 if (!__msg_common_make_normal_markup_text(markup_text, font_buf, tmp_str, tmp_str_len))
391 D_MSG("__msg_common_make_normal_markup_text is failed");
399 start += (tmp_buf[start+end] != '\0') ? end + 1 : end;
402 eina_strbuf_append(markup_text, "<br>");
411 eina_strbuf_free(font_buf);
421 MSG_BOOL msg_common_is_valid_phone_number(const char *address)
424 D_MSG_RETVM_IF(address == NULL, FALSE, "address is NULL");
427 addr_len = strlen(address);
432 /* length check phone address should be longer than 2 and shorter than 40 */
433 if (addr_len > 2 && addr_len <= MSG_COMMON_NUMBER_MAX_LEN) {
434 const char *pszOneChar = address;
436 if (*pszOneChar == '+')
439 while (*pszOneChar) {
440 if (!isdigit(*pszOneChar) && (*pszOneChar != '*') && (*pszOneChar != '#'))
448 D_MSG("invalid address length [%d]", addr_len);
453 MSG_BOOL msg_common_is_valid_email_addr(const char *address)
456 D_MSG_RETVM_IF(address == NULL, FALSE, "address is NULL");
461 D_MSG("address = %s", address);
463 token1 = strchr(address, '@');
465 D_EMSG("address has no @");
469 if (strchr(&token1[1], '@')) {
470 D_EMSG("address cannot have two more @");
474 token2 = strchr(token1, '.');
476 D_EMSG("there's no . character");
480 if ((token2 == token1 + 1) || (*(token2 + 1) == '\0')) {
481 D_EMSG("address type should be \'xxx.xxx\'");
488 MSG_BOOL msg_common_is_connected_call(void)
492 if (vconf_get_int(VCONFKEY_CALL_STATE, &call_status) < 0)
495 D_MSG("call_status = %d", call_status);
497 if (call_status != VCONFKEY_CALL_OFF)
503 MSG_BOOL msg_common_is_sim_inserted(void)
505 int sim_slot_status = 0;
507 if (vconf_get_int(VCONFKEY_TELEPHONY_SIM_SLOT, &sim_slot_status) < 0)
510 D_MSG("sim_slot_status = %d", sim_slot_status);
512 if (sim_slot_status == VCONFKEY_TELEPHONY_SIM_INSERTED)
518 MSG_BOOL msg_common_get_font_size(int *index)
521 D_MSG_RETVM_IF(index == NULL, FALSE, "font_size is NULL");
523 if (vconf_get_int(VCONFKEY_MSG_APP_FONT_SIZE, index) < 0) {
524 D_EMSG("vconf_get_int(font_size) is failed !!");
528 if (*index < MSG_APP_FONT_SIZE_INDEX_SMALL || *index >= MSG_APP_FONT_SIZE_INDEX_MAX) {
529 D_EMSG("invalid index = %d", *index);
532 D_MSG("index = %d", *index);
538 MSG_BOOL msg_common_set_font_size(int index)
542 if (index < MSG_APP_FONT_SIZE_INDEX_SMALL || index >= MSG_APP_FONT_SIZE_INDEX_MAX) {
543 D_EMSG("invalid index = %d", index);
546 D_MSG("index = %d", index);
549 if (vconf_set_int(VCONFKEY_MSG_APP_FONT_SIZE, index) < 0) {
550 D_EMSG("vconf_set_int(font_size) is failed !!");
557 MSG_BOOL msg_common_increase_font_size()
563 if (vconf_get_int(VCONFKEY_MSG_APP_FONT_SIZE, &index) < 0) {
564 D_EMSG("vconf_get_int(font_size) is failed !!");
567 D_MSG("index = %d", index);
571 case MSG_APP_FONT_SIZE_INDEX_GIANT :
573 case MSG_APP_FONT_SIZE_INDEX_HUGE :
574 increase = MSG_APP_FONT_SIZE_INDEX_GIANT;
576 case MSG_APP_FONT_SIZE_INDEX_LARGE :
577 increase = MSG_APP_FONT_SIZE_INDEX_HUGE;
579 case MSG_APP_FONT_SIZE_INDEX_NORMAL :
580 increase = MSG_APP_FONT_SIZE_INDEX_LARGE;
582 case MSG_APP_FONT_SIZE_INDEX_SMALL :
583 increase = MSG_APP_FONT_SIZE_INDEX_NORMAL;
586 increase = MSG_APP_FONT_SIZE_INDEX_NORMAL;
590 if (increase != -1) {
591 if (msg_common_set_font_size(increase) == FALSE) {
592 D_EMSG("msg_common_set_font_size is failed");
599 MSG_BOOL msg_common_decrease_font_size()
605 if (vconf_get_int(VCONFKEY_MSG_APP_FONT_SIZE, &index) < 0) {
606 D_EMSG("vconf_get_int(font_size) is failed !!");
609 D_MSG("index = %d", index);
613 case MSG_APP_FONT_SIZE_INDEX_GIANT :
614 decrease = MSG_APP_FONT_SIZE_INDEX_HUGE;
616 case MSG_APP_FONT_SIZE_INDEX_HUGE :
617 decrease = MSG_APP_FONT_SIZE_INDEX_LARGE;
619 case MSG_APP_FONT_SIZE_INDEX_LARGE :
620 decrease = MSG_APP_FONT_SIZE_INDEX_NORMAL;
622 case MSG_APP_FONT_SIZE_INDEX_NORMAL :
623 decrease = MSG_APP_FONT_SIZE_INDEX_SMALL;
625 case MSG_APP_FONT_SIZE_INDEX_SMALL :
628 decrease = MSG_APP_FONT_SIZE_INDEX_NORMAL;
632 if (decrease != -1) {
633 if (msg_common_set_font_size(decrease) == FALSE) {
634 D_EMSG("msg_common_set_font_size is failed");
642 int msg_common_get_font_size_from_index(int index)
646 if (index < MSG_APP_FONT_SIZE_INDEX_SMALL || index >= MSG_APP_FONT_SIZE_INDEX_MAX) {
647 D_EMSG("invalid index = %d", index);
650 D_MSG("index = %d", index);
655 case MSG_APP_FONT_SIZE_INDEX_SMALL :
656 font_size = MSG_APP_FONT_SIZE_SMALL;
658 case MSG_APP_FONT_SIZE_INDEX_NORMAL :
659 font_size = MSG_APP_FONT_SIZE_NORMAL;
661 case MSG_APP_FONT_SIZE_INDEX_LARGE :
662 font_size = MSG_APP_FONT_SIZE_LARGE;
664 case MSG_APP_FONT_SIZE_INDEX_HUGE :
665 font_size = MSG_APP_FONT_SIZE_HUGE;
667 case MSG_APP_FONT_SIZE_INDEX_GIANT :
668 font_size = MSG_APP_FONT_SIZE_GIANT;
671 font_size = MSG_APP_FONT_SIZE_NORMAL;
679 int msg_common_get_index_from_font_size(int font_size)
683 if (font_size < MSG_APP_FONT_SIZE_SMALL || font_size >= MSG_APP_FONT_SIZE_MAX) {
684 D_EMSG("invalid font_size = %d", font_size);
687 D_MSG("font_size = %d", font_size);
692 case MSG_APP_FONT_SIZE_SMALL :
693 index = MSG_APP_FONT_SIZE_INDEX_SMALL;
695 case MSG_APP_FONT_SIZE_NORMAL :
696 index = MSG_APP_FONT_SIZE_INDEX_NORMAL;
698 case MSG_APP_FONT_SIZE_LARGE :
699 index = MSG_APP_FONT_SIZE_INDEX_LARGE;
701 case MSG_APP_FONT_SIZE_HUGE :
702 index = MSG_APP_FONT_SIZE_INDEX_HUGE;
704 case MSG_APP_FONT_SIZE_GIANT :
705 index = MSG_APP_FONT_SIZE_INDEX_GIANT;
708 index = MSG_APP_FONT_SIZE_INDEX_NORMAL;
715 MSG_BOOL msg_common_get_access_font_size(int *index)
718 D_MSG_RETVM_IF(index == NULL, FALSE, "index is NULL");
720 if (vconf_get_int(VCONFKEY_MSG_APP_ACCESS_FONT_SIZE, index) < 0) {
721 D_EMSG("vconf_get_int(font_size) is failed !!");
725 if (*index < MSG_APP_FONT_SIZE_INDEX_SMALL || *index >= MSG_APP_FONT_SIZE_INDEX_MAX) {
726 D_EMSG("invalid index = %d", *index);
729 D_MSG("index = %d", *index);
735 MSG_BOOL msg_common_set_access_font_size(int index)
739 if (index < MSG_APP_FONT_SIZE_INDEX_SMALL || index >= MSG_APP_FONT_SIZE_INDEX_MAX) {
740 D_EMSG("invalid index = %d", index);
743 D_MSG("index = %d", index);
746 if (vconf_set_int(VCONFKEY_MSG_APP_ACCESS_FONT_SIZE, index) < 0) {
747 D_EMSG("vconf_set_int(font_size) is failed !!");
754 MSG_BOOL msg_common_apply_font_size(const char *widget_name, Evas_Object *obj)
757 D_MSG_RETVM_IF(widget_name == NULL, FALSE, "widget_name is NULL");
758 D_MSG_RETVM_IF(obj == NULL, FALSE, "obj is NULL");
762 Evas_Font_Size font_size_scale = 0;
764 if (msg_common_get_font_size(&index) != TRUE) {
765 D_EMSG("msg_common_get_font_size() is failed !!");
768 D_MSG("selected index = %d", index);
771 font_size = msg_common_get_font_size_from_index(index);
772 if (font_size == -1) {
773 D_EMSG("msg_common_get_font_size_from_index() is failed !!");
777 /* Calculate the scale factor */
778 font_size_scale -= (font_size * 100) / MSG_APP_FONT_SIZE_NORMAL;
780 D_MSG("font_size = %d, font_size_scale = %d", font_size, font_size_scale);
782 edje_text_class_del(widget_name);
783 edje_text_class_set(widget_name, NULL, font_size_scale);
784 elm_widget_theme_specific(obj, NULL, EINA_TRUE);
789 void msg_common_reset_font_size(const char *widget_name)
792 D_MSG_RETM_IF(widget_name == NULL, "widget_name is NULL");
794 edje_text_class_del(widget_name);
799 static char *__msg_common_get_file_ext(const char *a_pszfile_name)
801 if (a_pszfile_name != NULL) {
802 int nlen = strlen(a_pszfile_name);
803 char *psztemp = (char *)a_pszfile_name + nlen;
807 if (*psztemp == '.') {
818 static MSG_BOOL __msg_common_is_drm_file(const char *filepath)
821 D_MSG_RETVM_IF(filepath == NULL, FALSE, "filepath is NULL");
822 drm_bool_type_e is_drm_file = DRM_UNKNOWN;
823 int ret = DRM_RETURN_SUCCESS;
825 ret = drm_is_drm_file(filepath, &is_drm_file);
827 if (ret == DRM_RETURN_SUCCESS && is_drm_file == DRM_TRUE) {
830 D_MSG("ret = %d", ret);
835 static MSG_APP_FILE_TYPE_E __msg_common_get_file_type_by_file_ext(const char *file_ext, const char *fullpath)
840 if (file_ext == NULL) {
841 D_EMSG("file_ext is NULL");
842 return MSG_APP_FILE_TYPE_ETC;
845 switch (file_ext[i]) {
848 if (strcasecmp("ASF", &file_ext[i]) == 0) {
849 return MSG_APP_FILE_TYPE_VIDEO;
851 if (strcasecmp("AMR", &file_ext[i]) == 0) {
852 return MSG_APP_FILE_TYPE_VOICE;
854 if (strcasecmp("AWB", &file_ext[i]) == 0) {
855 return MSG_APP_FILE_TYPE_VOICE;
857 if (strcasecmp("AAC", &file_ext[i]) == 0) {
858 return MSG_APP_FILE_TYPE_MUSIC;
860 if (strcasecmp("AVI", &file_ext[i]) == 0) {
861 return MSG_APP_FILE_TYPE_VIDEO;
863 if (strcasecmp("AAC", &file_ext[i]) == 0) {
864 return MSG_APP_FILE_TYPE_MUSIC;
870 if (strcasecmp("BMP", &file_ext[i]) == 0) {
871 return MSG_APP_FILE_TYPE_IMAGE;
877 if (strcasecmp("DOC", &file_ext[i]) == 0) {
878 return MSG_APP_FILE_TYPE_DOC;
880 if (strcasecmp("DOCX", &file_ext[i]) == 0) {
881 return MSG_APP_FILE_TYPE_DOC;
883 if (strcasecmp("DIVX", &file_ext[i]) == 0) {
884 if (__msg_common_is_drm_file(fullpath) == 0) {
885 return MSG_APP_FILE_TYPE_DRM;
887 return MSG_APP_FILE_TYPE_VIDEO;
890 if (strcasecmp("DCF", &file_ext[i]) == 0) {
891 return MSG_APP_FILE_TYPE_DRM;
897 if (strcasecmp("GIF", &file_ext[i]) == 0) {
898 return MSG_APP_FILE_TYPE_IMAGE;
900 if (strcasecmp("G72", &file_ext[i]) == 0) {
901 return MSG_APP_FILE_TYPE_MUSIC;
907 if (strcasecmp("H263", &file_ext[i]) == 0) {
908 return MSG_APP_FILE_TYPE_MUSIC;
910 if (strcasecmp("HTML", &file_ext[i]) == 0) {
911 return MSG_APP_FILE_TYPE_HTML;
913 if (strcasecmp("HTM", &file_ext[i]) == 0) {
914 return MSG_APP_FILE_TYPE_HTML;
920 if (strcasecmp("IMY", &file_ext[i]) == 0) {
921 return MSG_APP_FILE_TYPE_SOUND;
927 if (strcasecmp("JAD", &file_ext[i]) == 0) {
928 return MSG_APP_FILE_TYPE_JAVA;
930 if (strcasecmp("JAR", &file_ext[i]) == 0) {
931 return MSG_APP_FILE_TYPE_JAVA;
934 if (strcasecmp("JPG", &file_ext[i]) == 0) {
935 return MSG_APP_FILE_TYPE_IMAGE;
937 if (strcasecmp("JPEG", &file_ext[i]) == 0) {
938 return MSG_APP_FILE_TYPE_IMAGE;
940 if (strcasecmp("JPE", &file_ext[i]) == 0) {
941 return MSG_APP_FILE_TYPE_IMAGE;
947 if (strcasecmp("MMF", &file_ext[i]) == 0) {
948 return MSG_APP_FILE_TYPE_SOUND;
950 if (strcasecmp("MP3", &file_ext[i]) == 0) {
951 return MSG_APP_FILE_TYPE_MUSIC;
953 if (strcasecmp("MID", &file_ext[i]) == 0) {
954 return MSG_APP_FILE_TYPE_SOUND;
956 if (strcasecmp("MIDI", &file_ext[i]) == 0) {
957 return MSG_APP_FILE_TYPE_SOUND;
959 if (strcasecmp("MP4", &file_ext[i]) == 0) {
960 return MSG_APP_FILE_TYPE_VIDEO;
962 if (strcasecmp("MPG", &file_ext[i]) == 0) {
963 return MSG_APP_FILE_TYPE_VIDEO;
965 if (strcasecmp("MPEG", &file_ext[i]) == 0) {
966 return MSG_APP_FILE_TYPE_VIDEO;
968 if (strcasecmp("M4A", &file_ext[i]) == 0) {
969 return MSG_APP_FILE_TYPE_MUSIC;
971 if (strcasecmp("M3G", &file_ext[i]) == 0) {
972 return MSG_APP_FILE_TYPE_FLASH;
974 if (strcasecmp("MXMF", &file_ext[i]) == 0) {
975 return MSG_APP_FILE_TYPE_SOUND;
977 if (strcasecmp("MKV", &file_ext[i]) == 0) {
978 return MSG_APP_FILE_TYPE_VIDEO;
980 if (strcasecmp("MKA", &file_ext[i]) == 0) {
981 return MSG_APP_FILE_TYPE_MUSIC;
987 if (strcasecmp("opml", &file_ext[i]) == 0) {
988 return MSG_APP_FILE_TYPE_RSS;
994 if (strcasecmp("PNG", &file_ext[i]) == 0) {
995 return MSG_APP_FILE_TYPE_IMAGE;
997 if (strcasecmp("PJPEG", &file_ext[i]) == 0) {
998 return MSG_APP_FILE_TYPE_IMAGE;
1000 if (strcasecmp("PDF", &file_ext[i]) == 0) {
1001 return MSG_APP_FILE_TYPE_PDF;
1003 if (strcasecmp("PPT", &file_ext[i]) == 0) {
1004 return MSG_APP_FILE_TYPE_PPT;
1006 if (strcasecmp("PPTX", &file_ext[i]) == 0) {
1007 return MSG_APP_FILE_TYPE_PPT;
1017 if (strcasecmp("SDP", &file_ext[i]) == 0) {
1018 return MSG_APP_FILE_TYPE_VIDEO;
1020 if (strcasecmp("SPM", &file_ext[i]) == 0) {
1021 return MSG_APP_FILE_TYPE_SOUND;
1023 if (strcasecmp("SMP", &file_ext[i]) == 0) {
1024 return MSG_APP_FILE_TYPE_SOUND;
1026 if (strcasecmp("SPF", &file_ext[i]) == 0) {
1027 return MSG_APP_FILE_TYPE_SOUND;
1029 if (strcasecmp("SWF", &file_ext[i]) == 0) {
1030 return MSG_APP_FILE_TYPE_FLASH;
1032 if (strcasecmp("SVG", &file_ext[i]) == 0) {
1033 return MSG_APP_FILE_TYPE_SVG;
1035 if (strcasecmp("SVGZ", &file_ext[i]) == 0) {
1036 return MSG_APP_FILE_TYPE_SVG;
1042 if (strcasecmp("TXT", &file_ext[i]) == 0) {
1043 return MSG_APP_FILE_TYPE_TXT;
1049 if (strcasecmp("VCF", &file_ext[i]) == 0) {
1050 return MSG_APP_FILE_TYPE_VCONTACT;
1052 if (strcasecmp("VCS", &file_ext[i]) == 0) {
1053 return MSG_APP_FILE_TYPE_VCALENDAR;
1055 if (strcasecmp("VNT", &file_ext[i]) == 0) {
1056 return MSG_APP_FILE_TYPE_VNOTE;
1058 if (strcasecmp("VBM", &file_ext[i]) == 0) {
1059 return MSG_APP_FILE_TYPE_VBOOKMARK;
1065 if (strcasecmp("WAV", &file_ext[i]) == 0) {
1066 return MSG_APP_FILE_TYPE_SOUND;
1068 if (strcasecmp("WBMP", &file_ext[i]) == 0) {
1069 return MSG_APP_FILE_TYPE_IMAGE;
1071 if (strcasecmp("WGT", &file_ext[i]) == 0) {
1072 return MSG_APP_FILE_TYPE_WGT;
1074 if (strcasecmp("WMA", &file_ext[i]) == 0) {
1075 return MSG_APP_FILE_TYPE_MUSIC;
1077 if (strcasecmp("WMV", &file_ext[i]) == 0) {
1078 return MSG_APP_FILE_TYPE_VIDEO;
1084 if (strcasecmp("XLS", &file_ext[i]) == 0) {
1085 return MSG_APP_FILE_TYPE_EXCEL;
1087 if (strcasecmp("XLSX", &file_ext[i]) == 0) {
1088 return MSG_APP_FILE_TYPE_EXCEL;
1090 if (strcasecmp("XMF", &file_ext[i]) == 0) {
1091 return MSG_APP_FILE_TYPE_SOUND;
1093 if (strcasecmp("XHTML", &file_ext[i]) == 0) {
1094 return MSG_APP_FILE_TYPE_HTML;
1099 if (strcasecmp("3GP", &file_ext[i]) == 0) {
1100 return MSG_APP_FILE_TYPE_VIDEO;
1102 if (strcasecmp("3GPP", &file_ext[i]) == 0) {
1103 return MSG_APP_FILE_TYPE_VIDEO;
1105 if (strcasecmp("3G2", &file_ext[i]) == 0) {
1106 return MSG_APP_FILE_TYPE_VIDEO;
1111 return MSG_APP_FILE_TYPE_ETC;
1114 const char *__msg_common_get_file_icon_by_file_type(MSG_APP_FILE_TYPE_E file_type)
1116 const char *icon_path = MSG_COMMON_FILE_ETC_ICON;
1117 if (file_type <= MSG_APP_FILE_TYPE_NONE || file_type >= MSG_APP_FILE_TYPE_MAX) {
1118 D_EMSG("Invalid file_type!! file_type = %d", file_type);
1122 if (icon_array[file_type]) {
1123 icon_path = icon_array[file_type];
1129 const char *msg_common_get_file_icon(const char *filepath)
1132 D_MSG_RETVM_IF(filepath == NULL, NULL, "filepath is NULL");
1133 const char *icon_path = MSG_COMMON_FILE_ETC_ICON;
1134 char *file_ext = __msg_common_get_file_ext(filepath);
1137 MSG_APP_FILE_TYPE_E file_type = MSG_APP_FILE_TYPE_NONE;
1139 file_type = __msg_common_get_file_type_by_file_ext(file_ext, filepath);
1140 icon_path = __msg_common_get_file_icon_by_file_type(file_type);
1142 D_EMSG("file_ext is NULL");
1148 int msg_common_add_block_number(msg_handle_t msgHandle, const char *address)
1151 msg_error_t err = MSG_SUCCESS;
1152 msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
1154 msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_ADDRESS_SAME);
1155 msg_set_str_value(filter, MSG_FILTER_VALUE_STR, (char *)address, DEF_MAX_FILTER_LEN);
1157 err = msg_add_filter(msgHandle, filter);
1158 if (err != MSG_SUCCESS) {
1159 D_EMSG("failed to add filter");
1160 msg_release_struct(&filter);
1165 msg_release_struct(&filter);
1171 int msg_common_delete_block_number(msg_handle_t msgHandle, const char *address)
1174 D_MSG_RETVM_IF(!msgHandle, FALSE, "msgHandle is NULL");
1175 D_MSG_RETVM_IF(!address, FALSE, "address is NULL");
1177 msg_struct_list_s filter_list = {0,};
1178 msg_error_t err = MSG_SUCCESS;
1180 err = msg_get_filter_list(msgHandle, &filter_list);
1182 if (err != MSG_SUCCESS) {
1183 D_EMSG("Getting filter list fail");
1187 if (filter_list.nCount == 0) {
1188 D_EMSG("filter count is 0");
1189 msg_release_list_struct(&filter_list);
1190 return MSG_ERR_UNKNOWN;
1194 int filter_type = -1;
1196 char filter_address[DEF_BUF_LEN] = {0,};
1198 for (i=0; i<filter_list.nCount; i++) {
1199 msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_TYPE_INT, &filter_type);
1200 if (filter_type == MSG_FILTER_BY_ADDRESS_SAME) {
1201 msg_get_str_value(filter_list.msg_struct_info[i], MSG_FILTER_VALUE_STR, filter_address, sizeof(filter_address));
1202 if (strncmp(filter_address, address, sizeof(filter_address)) == 0) {
1203 msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_ID_INT, &filter_id);
1209 if (filter_id != -1)
1210 msg_delete_filter(msgHandle, filter_id);
1212 msg_release_list_struct(&filter_list);
1216 int msg_common_check_block_number(msg_handle_t msgHandle, const char *address, bool *result)
1219 D_MSG_RETVM_IF(!msgHandle, FALSE, "msgHandle is NULL");
1220 D_MSG_RETVM_IF(!address, FALSE, "address is NULL");
1222 msg_struct_list_s filter_list = {0,};
1223 msg_error_t err = MSG_SUCCESS;
1225 err = msg_get_filter_list(msgHandle, &filter_list);
1227 if (err != MSG_SUCCESS) {
1228 D_EMSG("Getting filter list fail");
1232 if (filter_list.nCount == 0) {
1235 bool isFound = false;
1237 int filter_type = -1;
1238 char filter_address[DEF_BUF_LEN] = {0,};
1239 for (i=0; i<filter_list.nCount; i++) {
1240 msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_TYPE_INT, &filter_type);
1241 if (filter_type == MSG_FILTER_BY_ADDRESS_SAME) {
1242 msg_get_str_value(filter_list.msg_struct_info[i], MSG_FILTER_VALUE_STR, filter_address, sizeof(filter_address));
1244 if (strncmp(filter_address, address, sizeof(filter_address)) == 0) {
1253 msg_release_list_struct(&filter_list);
1257 /*********************
1263 * 4. delivery report
1271 * [MMS notification]
1276 * 5. Message size: KB
1279 * [ For sent/outbox msg]
1285 * 6. Delivery report:
1293 * 5. Message size: KB
1294 **********************/
1296 char *msg_common_make_message_detail_text(msg_handle_t msgHandle, int msgId)
1298 msg_error_t err = MSG_SUCCESS;
1299 int msg_type = MSG_TYPE_INVALID;
1300 int folder_id = MSG_MAX_FOLDER_ID;
1304 bool delivery_flag = false;
1305 bool read_flag = false;
1306 char addr_value[MAX_ADDRESS_VAL_LEN+1] = {0,};
1307 char name[MAX_DISPLAY_NAME_LEN]= {0,};
1309 msg_struct_list_s addrList = {0,};
1310 msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
1311 msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
1314 err = msg_get_message(msgHandle, msgId, msgInfo, sendOpt);
1315 if (err != MSG_SUCCESS) {
1316 D_EMSG("msg_get_message has failed");
1317 msg_release_struct(&msgInfo);
1318 msg_release_struct(&sendOpt);
1322 msg_get_int_value(msgInfo, MSG_MESSAGE_TYPE_INT, &msg_type);
1323 msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, &folder_id);
1324 msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
1326 /** Get address list **/
1327 err = msg_get_address_list(msgHandle, thread_id, &addrList);
1328 if (err != MSG_SUCCESS) {
1329 D_EMSG("msg_get_message has failed");
1330 msg_release_struct(&msgInfo);
1331 msg_release_struct(&sendOpt);
1335 /* create str buf */
1336 Eina_Strbuf *text_data = eina_strbuf_new();
1339 eina_strbuf_append(text_data, "<font_size=32>");
1343 eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_BODY_DETAILS_TYPE"));
1344 eina_strbuf_append(text_data, ": ");
1346 if (msg_type == MSG_TYPE_MMS) {
1347 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"));
1348 } else if (msg_type == MSG_TYPE_MMS_NOTI) {
1349 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE_NOTIFICATION"));
1350 } else if (msg_type == MSG_TYPE_SMS) {
1351 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_TEXT_MESSAGE"));
1353 D_EMSG("invalid msg type!");
1354 msg_release_struct(&msgInfo);
1355 msg_release_struct(&sendOpt);
1357 eina_strbuf_free(text_data);
1360 eina_strbuf_append(text_data, "<br>");
1363 if (folder_id == MSG_SENTBOX_ID || folder_id == MSG_OUTBOX_ID) {
1364 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"));
1365 eina_strbuf_append(text_data, ": ");
1366 } else if (folder_id == MSG_INBOX_ID) {
1367 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_FROM"));
1368 eina_strbuf_append(text_data, ": ");
1370 D_EMSG("invalid msg type!");
1371 msg_release_struct(&msgInfo);
1372 msg_release_struct(&sendOpt);
1374 eina_strbuf_free(text_data);
1379 for (index = 0; index < addrList.nCount; index ++) {
1380 bzero(name, sizeof(name));
1381 bzero(addr_value, sizeof(addr_value));
1383 msg_get_int_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id);
1384 msg_get_str_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_DISPLAYNAME_STR, name, MAX_DISPLAY_NAME_LEN);
1385 msg_get_str_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN);
1387 if (name[0] != '\0') {
1388 eina_strbuf_append(text_data, name);
1389 eina_strbuf_append(text_data, "(");
1390 eina_strbuf_append(text_data, addr_value);
1391 eina_strbuf_append(text_data, ")");
1393 eina_strbuf_append(text_data, addr_value);
1395 if (index != addrList.nCount-1)
1396 eina_strbuf_append(text_data, ", ");
1398 eina_strbuf_append(text_data, "<br>");
1400 /*** Sent / Received / Expire Time ***/
1401 timeformat = msg_common_get_timeformat();
1403 if (msg_type == MSG_TYPE_MMS_NOTI) {
1404 msg_struct_t mmsSendOpt = NULL;
1406 char *str_time = NULL;
1408 char msg[DEF_BUF_LEN] = {0,};
1409 const char *expire_str = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_EXPIRES_C_PS");
1411 msg_get_struct_handle(sendOpt, MSG_SEND_OPT_MMS_OPT_HND, &mmsSendOpt);
1412 msg_get_int_value(mmsSendOpt, MSG_MMS_SENDOPTION_EXPIRY_TIME_INT, &expiry_time);
1414 if (timeformat == MSG_TIME_FORMAT_24H)
1415 str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM y", &expiry_time);
1417 str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM y", &expiry_time);
1419 snprintf(msg, sizeof(msg), expire_str, str_time);
1420 eina_strbuf_append(text_data, msg);
1422 if (folder_id == MSG_SENTBOX_ID || folder_id == MSG_OUTBOX_ID) {
1423 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"));
1424 } else if (folder_id == MSG_INBOX_ID) {
1425 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_RECEIVED"));
1427 eina_strbuf_append(text_data, ": ");
1430 msg_get_int_value(msgInfo, MSG_MESSAGE_DISPLAY_TIME_INT, &dptime);
1432 char *str_time = NULL;
1433 if (timeformat == MSG_TIME_FORMAT_24H)
1434 str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM y", &dptime);
1436 str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM y", &dptime);
1437 eina_strbuf_append(text_data, str_time);
1441 eina_strbuf_append(text_data, "<br>");
1443 if (msg_type == MSG_TYPE_SMS) { /*** SMS ***/
1446 switch (folder_id) {
1447 case MSG_SENTBOX_ID:
1449 /** delivery report */
1450 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_DELIVERY_REPORT"));
1451 eina_strbuf_append(text_data, ": ");
1452 // get delivery report setting value
1453 msg_get_bool_value(sendOpt, MSG_SEND_OPT_DELIVER_REQ_BOOL, &delivery_flag);
1455 if (delivery_flag) {
1456 eina_strbuf_append(text_data, "<br>");
1458 msg_struct_list_s report_list = {0,};
1459 err = msg_get_report_status(msgHandle, msgId, &report_list);
1464 if (report_list.nCount != 0) {
1465 msg_struct_t report = NULL;
1469 char address[MAX_ADDRESS_VAL_LEN+1] = {0,};
1472 for (i=0; i < addrList.nCount; i++) {
1473 bool report_found = false;
1475 bzero(addr_value, sizeof(addr_value));
1476 bzero(address, sizeof(address));
1477 msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN);
1479 eina_strbuf_append(text_data, addr_value);
1480 eina_strbuf_append(text_data, " - ");
1482 for (j=0; j<report_list.nCount; j++) {
1483 report = report_list.msg_struct_info[j];
1484 msg_get_str_value(report, MSG_REPORT_ADDRESS_STR, address, sizeof(address));
1486 if (!strcmp(addr_value, address)) {
1487 report_found = true;
1488 msg_get_int_value(report, MSG_REPORT_TYPE_INT, &type);
1489 msg_get_int_value(report, MSG_REPORT_STATUS_INT, &status);
1490 msg_get_int_value(report, MSG_REPORT_TIME_INT, (int *)&time);
1492 if (type == MSG_REPORT_TYPE_DELIVERY) {
1493 if (status == MSG_DELIVERY_REPORT_NONE) {
1494 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_REQUESTED"));
1495 } else if (status == MSG_DELIVERY_REPORT_EXPIRED) {
1496 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_EXPIRED"));
1497 } else if (status == MSG_DELIVERY_REPORT_SUCCESS) {
1498 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_RECEIVED"));
1499 eina_strbuf_append(text_data, " (");
1500 char *str_time = NULL;
1501 if (timeformat == MSG_TIME_FORMAT_24H)
1502 str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM", &time);
1504 str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM", &time);
1505 eina_strbuf_append(text_data, str_time);
1506 eina_strbuf_append(text_data, ")");
1507 } else if (status == MSG_DELIVERY_REPORT_REJECTED) {
1508 eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_POP_REJECTED"));
1510 eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1516 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_REQUESTED"));
1518 eina_strbuf_append(text_data, "<br>");
1521 for (i=0; i < addrList.nCount; i++) {
1522 bzero(addr_value, sizeof(addr_value));
1523 msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN);
1524 eina_strbuf_append(text_data, addr_value);
1525 eina_strbuf_append(text_data, " - ");
1526 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_REQUESTED"));
1527 eina_strbuf_append(text_data, "<br>");
1531 msg_release_list_struct(&report_list);
1533 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_BODY_NOT_REQUESTED"));
1536 eina_strbuf_append(text_data, "<br>");
1539 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_STATUS"));
1540 eina_strbuf_append(text_data, ": ");
1541 msg_get_int_value(msgInfo, MSG_MESSAGE_NETWORK_STATUS_INT, &status);
1542 if (status == MSG_NETWORK_SENDING)
1543 eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_POP_SENDING"));
1544 else if (status == MSG_NETWORK_SEND_SUCCESS)
1545 eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_POP_SENT"));
1546 else if (status == MSG_NETWORK_SEND_FAIL)
1547 eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_POP_SENDING_FAILED"));
1549 eina_strbuf_append(text_data, "<br>");
1554 } else if (msg_type == MSG_TYPE_MMS || msg_type == MSG_TYPE_MMS_NOTI) { /*** MMS ***/
1556 char subject[DEF_BUF_LEN_S] = {0,};
1557 eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_BODY_SUBJECT"));
1558 eina_strbuf_append(text_data, ": ");
1559 msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, subject, sizeof(subject));
1560 if (subject[0] != '\0')
1561 eina_strbuf_append(text_data, subject);
1563 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_UNTITLED_M_MMS"));
1564 eina_strbuf_append(text_data, "<br>");
1569 char strSize[DEF_BUF_LEN_D] = {0,};
1570 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MESSAGE_SIZE"));
1571 eina_strbuf_append(text_data, ": ");
1572 msg_get_int_value(msgInfo, MSG_MESSAGE_DATA_SIZE_INT, &msgSize);
1574 sizeKB = msgSize/1024;
1575 if (msgSize%1024 > 512)
1577 snprintf(strSize, sizeof(strSize), "%d%s", sizeKB, dgettext(MESSAGE_PKGNAME, "KB"));
1578 eina_strbuf_append(text_data, strSize);
1579 eina_strbuf_append(text_data, "<br>");
1581 if (folder_id == MSG_SENTBOX_ID || folder_id == MSG_OUTBOX_ID) {
1582 msg_struct_list_s report_list = {0,};
1583 MSG_DETAIL_REPORT_LIST_S *report_data_list = NULL;
1584 msg_struct_t mms_send_opt = NULL;
1586 msg_get_bool_value(sendOpt, MSG_SEND_OPT_DELIVER_REQ_BOOL, &delivery_flag);
1587 msg_get_struct_handle(sendOpt, MSG_SEND_OPT_MMS_OPT_HND, &mms_send_opt);
1588 msg_get_bool_value(mms_send_opt, MSG_MMS_SENDOPTION_READ_REQUEST_BOOL, &read_flag);
1590 // getting delivery & read report information
1591 if (delivery_flag || read_flag) {
1593 report_data_list = (MSG_DETAIL_REPORT_LIST_S *)calloc(addrList.nCount, sizeof(MSG_DETAIL_REPORT_LIST_S));
1594 if (report_data_list == NULL)
1595 D_EMSG("report_list is null");
1597 // get report status from FW
1598 msg_get_report_status(msgHandle, msgId, &report_list);
1600 for (i=0; i<addrList.nCount; i++) {
1601 bzero(addr_value, sizeof(addr_value));
1602 msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN);
1604 strncpy(report_data_list[i].address, addr_value, MAX_ADDRESS_VAL_LEN);
1605 report_data_list[i].delivery.status = MSG_DELIVERY_REPORT_NONE;
1606 report_data_list[i].read.status = MSG_READ_REPORT_NONE;
1609 for (i = 0; i < report_list.nCount; i++) {
1614 bzero(addr_value, sizeof(addr_value));
1616 msg_get_int_value(report_list.msg_struct_info[i], MSG_REPORT_TYPE_INT, (int *)&type);
1617 msg_get_int_value(report_list.msg_struct_info[i], MSG_REPORT_STATUS_INT, (int *)&status);
1618 msg_get_str_value(report_list.msg_struct_info[i], MSG_REPORT_ADDRESS_STR, addr_value, MAX_ADDRESS_VAL_LEN);
1619 msg_get_int_value(report_list.msg_struct_info[i], MSG_REPORT_TIME_INT, (int *)&time);
1622 /* fill values for viewer report list */
1623 for (j=0; j < addrList.nCount; j++) {
1624 if (!strncmp(report_data_list[j].address, addr_value, MAX_ADDRESS_VAL_LEN)) {
1625 if (type == MSG_REPORT_TYPE_DELIVERY) {
1626 report_data_list[j].delivery.status = status;
1627 report_data_list[j].delivery.time = time;
1629 report_data_list[j].read.status = status;
1630 report_data_list[j].read.time = time;
1635 msg_release_list_struct(&report_list);
1638 /** delivery report **/
1639 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_DELIVERY_REPORT"));
1640 eina_strbuf_append(text_data, " : ");
1642 if (!delivery_flag || report_data_list == NULL) {
1643 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_BODY_NOT_REQUESTED"));
1646 for (i = 0; i < addrList.nCount; i++) {
1647 eina_strbuf_append(text_data, report_data_list[i].address);
1648 eina_strbuf_append(text_data, " - ");
1650 if (report_data_list[i].delivery.status == MSG_DELIVERY_REPORT_NONE) {
1651 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_REQUESTED"));
1652 } else if (report_data_list[i].delivery.status == MSG_DELIVERY_REPORT_EXPIRED) {
1653 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_EXPIRED"));
1654 } else if (report_data_list[i].delivery.status == MSG_DELIVERY_REPORT_SUCCESS) {
1655 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_RECEIVED"));
1656 eina_strbuf_append(text_data, " (");
1658 char *str_time = NULL;
1659 if (timeformat == MSG_TIME_FORMAT_24H)
1660 str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM", &(report_data_list[i].delivery.time));
1662 str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM", &(report_data_list[i].delivery.time));
1663 eina_strbuf_append(text_data, str_time);
1664 eina_strbuf_append(text_data, ")");
1665 } else if (report_data_list[i].delivery.status == MSG_DELIVERY_REPORT_REJECTED) {
1666 eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_POP_REJECTED"));
1668 eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1671 if (i != addrList.nCount-1)
1672 eina_strbuf_append(text_data, "<br>");
1676 eina_strbuf_append(text_data, "<br>");
1679 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_READ_REPORT"));
1680 eina_strbuf_append(text_data, ": ");
1683 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_BODY_NOT_REQUESTED"));
1686 for (i = 0; i < addrList.nCount; i++) {
1687 eina_strbuf_append(text_data, report_data_list[i].address);
1688 eina_strbuf_append(text_data, " - ");
1689 if (report_data_list[i].read.status == MSG_READ_REPORT_NONE) {
1690 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_REQUESTED"));
1691 } else if (report_data_list[i].read.status == MSG_READ_REPORT_IS_READ) {
1692 eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MMSREADREPLYMSGREAD"));
1693 eina_strbuf_append(text_data, " (");
1695 char *str_time = NULL;
1696 if (timeformat == MSG_TIME_FORMAT_24H)
1697 str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM", &(report_data_list[i].read.time));
1699 str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM", &(report_data_list[i].read.time));
1700 eina_strbuf_append(text_data, str_time);
1701 eina_strbuf_append(text_data, ")");
1702 } else if (report_data_list[i].read.status == MSG_READ_REPORT_IS_DELETED) {
1703 eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_POP_DELETED"));
1706 if (i != addrList.nCount-1)
1707 eina_strbuf_append(text_data, "<br>");
1710 eina_strbuf_append(text_data, "<br>");
1714 char *str = strdup(eina_strbuf_string_get(text_data));
1716 msg_release_list_struct(&addrList);
1717 eina_strbuf_free(text_data);
1719 msg_release_struct(&msgInfo);
1720 msg_release_struct(&sendOpt);