[SR][Nabi-se][Nabi_SEN_SE-32480] Unable to select more then one file for attachment...
[apps/core/preloaded/ug-myfile-efl.git] / src / common / mf-ug-util.c
1 /*\r
2  * Copyright 2012          Samsung Electronics Co., Ltd\r
3  *\r
4  * Licensed under the Flora License, Version 1.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *  http://floralicense.org/license/\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 \r
18 \r
19 \r
20 \r
21 #include <pthread.h>\r
22 #include <vconf.h>\r
23 \r
24 #include "mf-ug-util.h"\r
25 #include "mf-ug-cb.h"\r
26 #include "mf-ug-winset.h"\r
27 #include "mf-ug-fm-svc-wrapper.h"\r
28 #include "mf-ug-fs-util.h"\r
29 #include "mf-ug-inotify-handle.h"\r
30 #include "mf-ug-resource.h"\r
31 \r
32 #define MF_UG_TIMER_INTERVAL_VIBRATION 0.5\r
33 #define MF_UG_VIBRATION_DEVICE 0\r
34 #define MF_UG_VIBRATION_DURATION 500\r
35 #ifdef UG_OPERATION_SELECT_MODE\r
36 #define OPERATION_SEPERATOR             ";"\r
37 #endif\r
38 #define NORMAL_SEPERATOR                "?"\r
39 \r
40 /******************************\r
41 ** Prototype    : ug_genlist_selected_state_get\r
42 ** Description  :\r
43 ** Input        : void *data\r
44 ** Output       : bool\r
45 ** Return Value :\r
46 ** Calls        :\r
47 ** Called By    :\r
48 **\r
49 **  History        :\r
50 **  1.Date         : 2010/12/10\r
51 **    Author       : Samsung\r
52 **    Modification : Created function\r
53 **\r
54 ******************************/\r
55 bool mf_ug_util_is_genlist_selected(void *data)\r
56 {\r
57         UG_TRACE_BEGIN;\r
58         ugData *ugd = (ugData *)data;\r
59         ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL");\r
60 \r
61         Elm_Object_Item *gli = NULL;\r
62         Elm_Object_Item *nli = NULL;\r
63         Evas_Object *genlist = NULL;\r
64 \r
65         ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd);\r
66         ug_mf_retvm_if(pNavi_s == NULL, false, "get navigation bar in use failed");\r
67 \r
68         if (ugd->ug_MainWindow.ug_pNaviGenlist) {\r
69                 genlist = ugd->ug_MainWindow.ug_pNaviGenlist;\r
70                 gli = elm_genlist_first_item_get(genlist);\r
71 \r
72                 while (gli) {\r
73                         ugListItemData *itemData = (ugListItemData *)elm_object_item_data_get(gli);\r
74                         ug_mf_retvm_if(itemData == NULL, false, "itemData is NULL");\r
75                         if (itemData->ug_bChecked == true) {\r
76                                 UG_TRACE_END;\r
77                                 return true;\r
78                         }\r
79                         nli = elm_genlist_item_next_get(gli);\r
80                         gli = nli;\r
81                 }\r
82         }\r
83         UG_TRACE_END;\r
84         return false;\r
85 }\r
86 \r
87 /******************************\r
88 ** Prototype    : ug_parase_path_get\r
89 ** Description  :\r
90 ** Input        : GList *dest_list\r
91 **                char *path_list\r
92 ** Output       : None\r
93 ** Return Value :\r
94 ** Calls        :\r
95 ** Called By    :\r
96 **\r
97 **  History        :\r
98 **  1.Date         : 2010/12/10\r
99 **    Author       : Samsung\r
100 **    Modification : Created function\r
101 **\r
102 ******************************/\r
103 void mf_ug_util_get_params_path(Eina_List **dest_list, const char *path_list)\r
104 {\r
105         UG_TRACE_BEGIN;\r
106         ug_mf_retm_if(dest_list == NULL, "dest_list is NULL");\r
107 \r
108         gchar **result = NULL;\r
109         gchar **params = NULL;\r
110         result = g_strsplit(path_list, "?", 0);\r
111 \r
112         for (params = result; *params; params++) {\r
113                 *dest_list = eina_list_append(*dest_list, strdup(*params));\r
114         }\r
115 \r
116         g_strfreev(result);\r
117         UG_TRACE_END;\r
118 }\r
119 \r
120 /******************************\r
121 ** Prototype    : mf_ug_util_free_eina_list_data\r
122 ** Description  : Samsung\r
123 ** Input        : Eina_List **list\r
124 **                mf_ug_eina_list_node_type node_type\r
125 ** Output       : None\r
126 ** Return Value :\r
127 ** Calls        :\r
128 ** Called By    :\r
129 **\r
130 **  History        :\r
131 **  1.Date         : 2010/12/10\r
132 **    Author       : Samsung\r
133 **    Modification : Created function\r
134 **\r
135 ******************************/\r
136 void mf_ug_util_free_eina_list_data(Eina_List **list, mf_ug_eina_list_node_type node_type)\r
137 {\r
138         UG_TRACE_BEGIN;\r
139         ug_mf_retm_if(list == NULL, "list is NULL");\r
140         ug_mf_retm_if(*list == NULL, "*list is NULL");\r
141 \r
142         Eina_List *l = NULL;\r
143         void *pNode = NULL;\r
144         switch (node_type) {\r
145         case NODE_TYPE_CHAR:\r
146         case NODE_TYPE_PNODE:\r
147                 EINA_LIST_FOREACH(*list, l, pNode) {\r
148                         free(pNode);\r
149                         pNode = NULL;\r
150                 }\r
151                 break;\r
152         case NODE_TYPE_GSTRING:\r
153                 EINA_LIST_FOREACH(*list, l, pNode) {\r
154                         if (pNode != NULL) {\r
155                                 g_string_free(pNode, TRUE);\r
156                                 pNode = NULL;\r
157                         }\r
158                 }\r
159                 break;\r
160         default:\r
161                 break;\r
162         }\r
163 \r
164         eina_list_free(*list);\r
165         *list = NULL;\r
166         UG_TRACE_END;\r
167 }\r
168 \r
169 \r
170 /******************************\r
171 ** Prototype    : __mf_ug_util_get_marked_selected_items\r
172 ** Description  :\r
173 ** Input        : GList *list\r
174 ** Output       : None\r
175 ** Return Value :\r
176 ** Calls        :\r
177 ** Called By    :\r
178 **\r
179 **  History        :\r
180 **  1.Date         : 2010/12/10\r
181 **    Author       : Samsung\r
182 **    Modification : Created function\r
183 **\r
184 ******************************/\r
185 static void __mf_ug_util_get_marked_selected_items(Eina_List *list, Eina_List **select_list)\r
186 {\r
187         UG_TRACE_BEGIN;\r
188         ug_mf_retm_if(select_list == NULL, "select_list is NULL");\r
189         ug_mf_retm_if(list == NULL, "list is NULL");\r
190 \r
191         Eina_List *l = NULL;\r
192         void *pNode = NULL;\r
193 \r
194         EINA_LIST_FOREACH(list, l, pNode) {\r
195                 if (pNode != NULL) {\r
196                         *select_list = eina_list_append(*select_list, strdup(pNode));\r
197                 }\r
198         }\r
199         UG_TRACE_END;\r
200 \r
201 }\r
202 \r
203 /******************************\r
204 ** Prototype    : __mf_ug_util_get_marked_off_selected_items\r
205 ** Description  :\r
206 ** Input        : void *data\r
207 **                Evas_Object* content\r
208 ** Output       : None\r
209 ** Return Value :\r
210 ** Calls        :\r
211 ** Called By    :\r
212 **\r
213 **  History        :\r
214 **  1.Date         : 2010/12/10\r
215 **    Author       : Samsung\r
216 **    Modification : Created function\r
217 **\r
218 ******************************/\r
219 static void __mf_ug_util_get_marked_off_selected_items(void *data, Eina_List **select_list)\r
220 {\r
221         UG_TRACE_BEGIN;\r
222         ugData *ugd = (ugData *)data;\r
223         ug_mf_retm_if(ugd == NULL, "ugData is NULL");\r
224         ug_mf_retm_if(select_list == NULL, "selected_list is NULL");\r
225         ug_mf_retm_if(ugd->ug_MainWindow.ug_pNaviGenlist == NULL, "ugd->ug_MainWindow.ug_pNaviGenlist is NULL");\r
226 \r
227 \r
228         Evas_Object *content = ugd->ug_MainWindow.ug_pNaviGenlist;\r
229         Elm_Object_Item *gli = elm_genlist_first_item_get(content);\r
230         int radio_id = 1;\r
231         Elm_Object_Item *nli = NULL;\r
232 \r
233 \r
234         while (gli) {\r
235 \r
236                 ugListItemData *params = (ugListItemData *)elm_object_item_data_get(gli);\r
237                 ug_mf_retm_if(params == NULL, "params is NULL");\r
238                 if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE) {\r
239                         if (params->ug_pRadioBox) {\r
240                                 if (elm_radio_value_get(ugd->ug_MainWindow.ug_pRadioGroup) == radio_id) {\r
241                                         *select_list = eina_list_append(*select_list, strdup(params->ug_pItemName->str));\r
242                                         break;\r
243                                 }\r
244                                 radio_id++;\r
245                         }\r
246                 } else if (ugd->ug_UiGadget.ug_iSelectMode == MULTI_ALL_MODE ||\r
247                            ugd->ug_UiGadget.ug_iSelectMode == MULTI_FILE_MODE ||\r
248                            ugd->ug_UiGadget.ug_iSelectMode == IMPORT_MODE ||\r
249                            ugd->ug_UiGadget.ug_iSelectMode == IMPORT_PATH_SELECT_MODE ||\r
250                            ugd->ug_UiGadget.ug_iSelectMode == IMPORT_SINGLE) {\r
251                         if (params->ug_pCheckBox) {\r
252                                 if (params->ug_bChecked == true) {\r
253                                         *select_list = eina_list_append(*select_list, strdup(params->ug_pItemName->str));\r
254                                 }\r
255                         }\r
256                 }\r
257                 nli = elm_genlist_item_next_get(gli);\r
258                 gli = nli;\r
259         }\r
260         UG_TRACE_END;\r
261 }\r
262 \r
263 /******************************\r
264 ** Prototype    : mf_ug_util_get_send_result\r
265 ** Description  :\r
266 ** Input        : void *data\r
267 ** Output       : None\r
268 ** Return Value :\r
269 ** Calls        :\r
270 ** Called By    :\r
271 **\r
272 **  History        :\r
273 **  1.Date         : 2010/12/10\r
274 **    Author       : Samsung\r
275 **    Modification : Created function\r
276 **\r
277 ******************************/\r
278 char *mf_ug_util_get_send_result(void *data)\r
279 {\r
280         UG_TRACE_BEGIN;\r
281         ugData *ugd = (ugData *)data;\r
282         ug_mf_retvm_if(ugd == NULL, NULL, "ugData is NULL");\r
283 \r
284         char *file_selected = NULL;\r
285         Eina_List *selected_list = NULL;\r
286         Eina_List *l = NULL;\r
287         char *pNode = NULL;\r
288 \r
289         if (ugd->ug_UiGadget.ug_iMarkedMode == MARKED_ON\r
290             && (ugd->ug_UiGadget.ug_iSelectMode == MULTI_FILE_MODE || ugd->ug_UiGadget.ug_iSelectMode == MULTI_ALL_MODE)) {\r
291                 __mf_ug_util_get_marked_selected_items(ugd->ug_UiGadget.ug_pMultiSelectFileList, &selected_list);\r
292         } else {\r
293                 __mf_ug_util_get_marked_off_selected_items(ugd, &selected_list);\r
294         }\r
295 \r
296         EINA_LIST_FOREACH(selected_list, l, pNode) {\r
297                 if (pNode != NULL) {\r
298                         if (file_selected == NULL) {\r
299                                 file_selected = g_strconcat(pNode, NULL);\r
300                         } else {\r
301                                 char *temp = file_selected;\r
302 #ifdef UG_OPERATION_SELECT_MODE\r
303                                 if (ugd->ug_UiGadget.ug_bOperationSelectFlag) {\r
304                                         file_selected = g_strconcat(file_selected, OPERATION_SEPERATOR, pNode, NULL);\r
305                                 } else\r
306 #endif\r
307                                 file_selected = g_strconcat(file_selected, NORMAL_SEPERATOR, pNode, NULL);\r
308                                 free(temp);\r
309                         }\r
310                 }\r
311         }\r
312         mf_ug_util_free_eina_list_data(&selected_list, NODE_TYPE_CHAR);\r
313         UG_TRACE_END;\r
314         return file_selected;\r
315 }\r
316 \r
317 \r
318 /******************************\r
319 ** Prototype    : _ug_mf_set_state_as\r
320 ** Description  :\r
321 ** Input        : struct ugmyfiledata* data\r
322 **                int state\r
323 ** Output       : None\r
324 ** Return Value :\r
325 ** Calls        :\r
326 ** Called By    :\r
327 **\r
328 **  History        :\r
329 **  1.Date         : 2010/12/10\r
330 **    Author       : Samsung\r
331 **    Modification : Created function\r
332 **\r
333 ******************************/\r
334 void mf_ug_util_set_current_state(void *data, int state)\r
335 {\r
336         UG_TRACE_BEGIN;\r
337         ugData *ugd = (ugData *)data;\r
338         ug_mf_retm_if(ugd == NULL, "ugd is NULL");\r
339 \r
340         ugd->ug_Status.ug_iState = state;\r
341         UG_TRACE_END;\r
342 }\r
343 \r
344 \r
345 /******************************\r
346 ** Prototype    : mf_ug_util_get_mmc_state\r
347 ** Description  :\r
348 ** Input        : int* mmc_card\r
349 ** Output       : None\r
350 ** Return Value :\r
351 ** Calls        :\r
352 ** Called By    :\r
353 **\r
354 **  History        :\r
355 **  1.Date         : 2010/12/10\r
356 **    Author       : Samsung\r
357 **    Modification : Created function\r
358 **\r
359 ******************************/\r
360 int mf_ug_util_get_mmc_state(int *mmc_card)\r
361 {\r
362         UG_TRACE_BEGIN;\r
363         int data = UG_ERROR_RETURN;\r
364         int error_code = MYFILE_ERR_NONE;\r
365 \r
366         ug_mf_retvm_if(mmc_card == NULL, MYFILE_ERR_SRC_ARG_INVALID, "mmc_card is NULL");\r
367 \r
368         *mmc_card = 0;\r
369         error_code = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &data);\r
370 \r
371         if (error_code) {\r
372                 UG_TRACE_END;\r
373                 return MYFILE_ERR_GET_VCONF_FAIL;\r
374         }\r
375 \r
376         if (data != VCONFKEY_SYSMAN_MMC_MOUNTED) {\r
377                 *mmc_card = MMC_OFF;\r
378         } else {\r
379                 *mmc_card = MMC_ON;\r
380         }\r
381         UG_TRACE_END;\r
382         return error_code;\r
383 }\r
384 \r
385 /******************************\r
386 ** Prototype    : mf_ug_util_create_dir_monitor\r
387 ** Description  : Samsung\r
388 ** Input        : void *data\r
389 ** Output       : None\r
390 ** Return Value :\r
391 ** Calls        :\r
392 ** Called By    :\r
393 **\r
394 **  History        :\r
395 **  1.Date         : 2010/12/10\r
396 **    Author       : Samsung\r
397 **    Modification : Created function\r
398 **\r
399 ******************************/\r
400 int mf_ug_util_create_dir_monitor(void *data)\r
401 {\r
402         UG_TRACE_BEGIN;\r
403         ugData *ugd = (ugData *)data;\r
404         ug_mf_retvm_if(ugd == NULL, UG_ERROR_RETURN, "ugData is NULL");\r
405 \r
406         if (ugd->ug_UiGadget.ug_pInotifyPipe) {\r
407                 ecore_pipe_del(ugd->ug_UiGadget.ug_pInotifyPipe);\r
408                 ugd->ug_UiGadget.ug_pInotifyPipe = NULL;\r
409         }\r
410         ugd->ug_UiGadget.ug_pInotifyPipe = ecore_pipe_add(mf_ug_cb_dir_pipe_cb, (const void *)ugd);\r
411         UG_TRACE_END;\r
412 \r
413         return mf_ug_inotify_handle_init_inotify();\r
414 }\r
415 \r
416 \r
417 /******************************\r
418 ** Prototype    : mf_ug_util_add_dir_watch\r
419 ** Description  : Samsung\r
420 ** Input        : const char *path\r
421 **                void *data\r
422 ** Output       : None\r
423 ** Return Value :\r
424 ** Calls        :\r
425 ** Called By    :\r
426 **\r
427 **  History        :\r
428 **  1.Date         : 2010/12/10\r
429 **    Author       : Samsung\r
430 **    Modification : Created function\r
431 **\r
432 ******************************/\r
433 int mf_ug_util_add_dir_watch(const char *path, void *data)\r
434 {\r
435         UG_TRACE_BEGIN;\r
436         ugData *ugd = (ugData *)data;\r
437         ug_mf_retvm_if(ugd == NULL, UG_ERROR_RETURN, "ugd is NULL");\r
438         UG_SAFE_FREE_CHAR(ugd->ug_Status.monitor_path);\r
439         ugd->ug_Status.monitor_path = g_strdup(path);\r
440         return mf_ug_inotify_handle_add_inotify_watch(path, mf_ug_cb_dir_update_cb, data);\r
441 }\r
442 \r
443 int mf_ug_util_remove_dir_watch(void)\r
444 {\r
445         return mf_ug_inotify_handle_rm_inotify_watch();\r
446 }\r
447 \r
448 /******************************\r
449 ** Prototype    : mf_ug_util_set_mmc_state_cb\r
450 ** Description  : Samsung\r
451 ** Input        : void *data\r
452 ** Output       : None\r
453 ** Return Value :\r
454 ** Calls        :\r
455 ** Called By    :\r
456 **\r
457 **  History        :\r
458 **  1.Date         : 2010/12/10\r
459 **    Author       : Samsung\r
460 **    Modification : Created function\r
461 **\r
462 ******************************/\r
463 int mf_ug_util_set_mmc_state_cb(void *data)\r
464 {\r
465         UG_TRACE_BEGIN;\r
466         ugData *ugd = (ugData *)data;\r
467         ug_mf_retvm_if(ugd == NULL, UG_ERROR_RETURN, "ugd is NULL");\r
468 \r
469         int mmc_state = MMC_OFF;\r
470         mf_ug_util_get_mmc_state(&mmc_state);\r
471         ugd->ug_Status.ug_iMmcFlag = mmc_state;\r
472 \r
473         UG_TRACE_END;\r
474         return vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, mf_ug_cb_mmc_changed_cb, ugd);\r
475 }\r
476 \r
477 /******************************\r
478 ** Prototype    : mf_ug_util_destory_mmc_state_cb\r
479 ** Description  : Samsung\r
480 ** Input        : None\r
481 ** Output       : None\r
482 ** Return Value :\r
483 ** Calls        :\r
484 ** Called By    :\r
485 **\r
486 **  History        :\r
487 **  1.Date         : 2010/12/10\r
488 **    Author       : Samsung\r
489 **    Modification : Created function\r
490 **\r
491 ******************************/\r
492 void mf_ug_util_destory_mmc_state_cb()\r
493 {\r
494         UG_TRACE_BEGIN;\r
495         vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, mf_ug_cb_mmc_changed_cb);\r
496         UG_TRACE_END;\r
497 }\r
498 \r
499 /******************************\r
500 ** Prototype    : mf_ug_util_destory_dir_monitor\r
501 ** Description  : Samsung\r
502 ** Input        : void *data\r
503 ** Output       : None\r
504 ** Return Value :\r
505 ** Calls        :\r
506 ** Called By    :\r
507 **\r
508 **  History        :\r
509 **  1.Date         : 2010/12/10\r
510 **    Author       : Samsung\r
511 **    Modification : Created function\r
512 **\r
513 ******************************/\r
514 void mf_ug_util_destory_dir_monitor(void *data)\r
515 {\r
516         UG_TRACE_BEGIN;\r
517         ugData *ugd = (ugData *)data;\r
518         ug_mf_retm_if(ugd == NULL, "ugd is NULL");\r
519 \r
520         if (ugd->ug_UiGadget.ug_pInotifyPipe) {\r
521                 ecore_pipe_del(ugd->ug_UiGadget.ug_pInotifyPipe);\r
522                 ugd->ug_UiGadget.ug_pInotifyPipe = NULL;\r
523         }\r
524 \r
525         mf_ug_inotify_handle_finalize_inotify();\r
526         UG_TRACE_END;\r
527 \r
528         return;\r
529 }\r
530 \r
531 \r
532 /******************************\r
533 ** Prototype    : mf_ug_util_storage_insert_action\r
534 ** Description  : Samsung\r
535 ** Input        : void *data\r
536 **                char* pItemLabel\r
537 ** Output       : None\r
538 ** Return Value :\r
539 ** Calls        :\r
540 ** Called By    :\r
541 **\r
542 **  History        :\r
543 **  1.Date         : 2010/12/10\r
544 **    Author       : Samsung\r
545 **    Modification : Created function\r
546 **\r
547 ******************************/\r
548 void mf_ug_util_storage_insert_action(void *data, char *pItemLabel)\r
549 {\r
550         UG_TRACE_BEGIN;\r
551         ugData *ugd = (ugData *)data;\r
552         ug_mf_retm_if(ugd == NULL, "ugd is NULL");\r
553 \r
554         Elm_Object_Item *pItemPhone = NULL;\r
555         ugFsNodeInfo *pNode = NULL;\r
556 \r
557         if (ugd->ug_Status.ug_iViewType != mf_ug_view_root) {\r
558                 return;\r
559         }\r
560 \r
561 \r
562         if (ugd->ug_Status.ug_iMmcFlag) {\r
563                 pNode = (ugFsNodeInfo *) malloc(sizeof(ugFsNodeInfo));\r
564                 memset(pNode, 0, sizeof(ugFsNodeInfo));\r
565                 /*set path */\r
566                 snprintf(pNode->path, sizeof(pNode->path), "%s", STORAGE_PARENT);\r
567                 snprintf(pNode->name, sizeof(pNode->name), "%s", MMC_NAME);\r
568                 pNode->type = UG_FILE_TYPE_DIR;\r
569                 ugd->ug_UiGadget.ug_pDirList = eina_list_append(ugd->ug_UiGadget.ug_pDirList, pNode);\r
570                 mf_ug_genlist_item_append(ugd->ug_MainWindow.ug_pNaviGenlist, pNode, ugd, 0, &ugd->ug_Status.ug_normalitc);\r
571         }\r
572 \r
573         UG_TRACE_END;\r
574 }\r
575 \r
576 \r
577 \r
578 /******************************\r
579 ** Prototype    : mf_ug_util_get_file_launch_type\r
580 ** Description  :\r
581 ** Input        : char * path\r
582 ** Output       : UG_MYFILE_LAUNCH_TYPE\r
583 ** Return Value :\r
584 ** Calls        :\r
585 ** Called By    :\r
586 **\r
587 **  History        :\r
588 **  1.Date         : 2010/12/10\r
589 **    Author       : Samsung\r
590 **    Modification : Created function\r
591 **\r
592 ******************************/\r
593 mf_ug_launch_type mf_ug_util_get_file_launch_type(char *path)\r
594 {\r
595         if (path == NULL) {\r
596                 UG_TRACE_END;\r
597                 return LAUNCH_TYPE_UNSUPPORT;\r
598         }\r
599         if (ecore_file_file_get(path) == NULL) {\r
600                 UG_TRACE_END;\r
601                 return LAUNCH_TYPE_UNSUPPORT;\r
602         }\r
603         if (ecore_file_is_dir(path) == 1) {\r
604                 UG_TRACE_END;\r
605                 return LAUNCH_TYPE_UNSUPPORT;\r
606         }\r
607         if (mf_ug_file_attr_is_drm_file(path) == 0) {\r
608                 mf_ug_drm_file_mime_type drm_file_type = mf_ug_fs_oper_get_drm_type(path);\r
609 \r
610                 if (drm_file_type == MF_UG_DRM_RINGTONE_FILE) {\r
611                         UG_TRACE_END;\r
612                         return LAUNCH_TYPE_MUSIC;\r
613                 } else if (drm_file_type == MF_UG_DRM_IMAGE_FILE) {\r
614                         UG_TRACE_END;\r
615                         return LAUNCH_TYPE_IMAGE;\r
616                 } else if (drm_file_type == MF_UG_DRM_VIDEO_FILE) {\r
617                         UG_TRACE_END;\r
618                         return LAUNCH_TYPE_VIDEO;\r
619                 } else {\r
620                         UG_TRACE_END;\r
621                         return LAUNCH_TYPE_UNSUPPORT;\r
622                 }\r
623         } else {\r
624                 mf_ug_fs_file_type category_t = 0;\r
625                 mf_ug_file_attr_get_file_category(path, &category_t);\r
626                 if (category_t == UG_FILE_TYPE_MUSIC || category_t == UG_FILE_TYPE_SOUND || category_t == UG_FILE_TYPE_VOICE) {\r
627                         UG_TRACE_END;\r
628                         return LAUNCH_TYPE_MUSIC;\r
629                 } else if (category_t == UG_FILE_TYPE_IMAGE) {\r
630                         UG_TRACE_END;\r
631                         return LAUNCH_TYPE_IMAGE;\r
632                 } else {\r
633                         UG_TRACE_END;\r
634                         return LAUNCH_TYPE_UNSUPPORT;\r
635                 }\r
636         }\r
637         UG_TRACE_END;\r
638 }\r
639 \r
640 mf_ug_theme_type mf_ug_util_get_theme(void)\r
641 {\r
642         mf_ug_theme_type theme = UG_THEME_INVALID;\r
643         char *name;\r
644 \r
645         char *theme_name = vconf_get_str(VCONFKEY_SETAPPL_WIDGET_THEME_STR);\r
646         ug_debug("theme is [%s]", theme_name);\r
647         ug_mf_retvm_if(theme_name == NULL, UG_THEME_ERROR, "Failed to get vconf value");        /* file system exceptional handle */\r
648 \r
649         name = strrchr(theme_name, '/');\r
650 \r
651         if (!name)\r
652                 name = theme_name;\r
653         else\r
654                 ++name;\r
655 \r
656         ug_debug("name is [%s]", name);\r
657         //SETTING_TRACE("name:%s", name);\r
658         /* special theme process.. */\r
659         if (0 == g_strcmp0("tizen-black.edj", name) || 0 == g_strcmp0("tizen-black-hd.edj", name)) {\r
660                 theme = UG_THEME_NBEAT_BLACK;\r
661         } else if (0 == g_strcmp0("tizen.edj", name) || 0 == g_strcmp0("tizen-hd.edj", name)\r
662                    || 0 == g_strcmp0("blue-hd.edj", name)) {\r
663                 theme = UG_THEME_NBEAT;\r
664         } else {\r
665                 theme = UG_THEME_ERROR;\r
666         }\r
667         free(theme_name);\r
668         theme_name = NULL;\r
669         ug_debug("theme is [%d]", theme);\r
670         return theme;\r
671 }\r
672 \r
673 \r
674 char *mf_ug_util_upper_folder_name_get(void *data, GString *fullpath)\r
675 {\r
676         ug_mf_retvm_if(data == NULL, NULL, "data is NULL");\r
677         ug_mf_retvm_if(fullpath == NULL, NULL, "fullpath is NULL");\r
678         ug_mf_retvm_if(fullpath->str == NULL, NULL, "fullpath is NULL");\r
679 \r
680         GString *parent_path = NULL;\r
681         GString *gName = NULL;\r
682         char *upper_name = NULL;\r
683 \r
684         parent_path = mf_ug_fm_svc_wrapper_get_file_parent_path(fullpath);\r
685 \r
686         ug_mf_retvm_if(parent_path == NULL, NULL, "fullpath is NULL");\r
687         ug_mf_retvm_if(parent_path->str == NULL, NULL, "fullpath is NULL");\r
688 \r
689 \r
690         if (!g_strcmp0(parent_path->str, PHONE_FOLDER)) {\r
691                 upper_name = g_strdup(MF_UG_LABEL_PHONE);\r
692         } else if (!g_strcmp0(parent_path->str, MEMORY_FOLDER)) {\r
693                 upper_name = g_strdup(MF_UG_LABEL_MMC);\r
694         } else {\r
695                 gName = mf_ug_fm_svc_wapper_get_file_name(parent_path);\r
696                 UG_GSTRING_CHECK_NULL_GOTO(gName, FAILED_EXIT);\r
697                 upper_name = g_strdup(gName->str);\r
698         }\r
699 \r
700         UG_CHAR_CHECK_NULL_GOTO(upper_name, FAILED_EXIT);\r
701         UG_SAFE_FREE_GSTRING(parent_path);\r
702         UG_SAFE_FREE_GSTRING(gName);\r
703         return upper_name;\r
704 \r
705 FAILED_EXIT:\r
706         UG_SAFE_FREE_GSTRING(parent_path);\r
707         UG_SAFE_FREE_GSTRING(gName);\r
708         return NULL;\r
709 \r
710 }\r
711 \r
712 void mf_ug_util_sort_the_file_list(void *data)\r
713 {\r
714 \r
715         UG_TRACE_BEGIN;\r
716         ug_mf_retm_if(data == NULL, "data is null");\r
717         ugData *ugd = (ugData *)data;\r
718 \r
719         int iSortTypeValue = 0;\r
720 \r
721         iSortTypeValue = ugd->ug_Status.ug_iSortType;\r
722 \r
723         mf_ug_fs_oper_sort_list(&ugd->ug_UiGadget.ug_pFilterList, MF_UG_SORT_BY_NAME_A2Z);\r
724         mf_ug_fs_oper_sort_list(&ugd->ug_UiGadget.ug_pDirList, MF_UG_SORT_BY_NAME_A2Z);\r
725 \r
726         //mf_ug_fs_oper_sort_list(&ugd->ug_UiGadget.ug_pFilterList, iSortTypeValue);\r
727         /*need to sort folder items only By Name and Date*/\r
728         //mf_ug_fs_oper_sort_list(&ugd->ug_UiGadget.ug_pDirList, iSortTypeValue);\r
729 }\r
730 \r
731 int mf_ug_util_check_disk_space(void *data)\r
732 {\r
733         UG_TRACE_BEGIN;\r
734         ug_mf_retvm_if(data == NULL, MYFILE_ERR_SRC_ARG_INVALID, "data is null");\r
735         ugData *ugd = (ugData *)data;\r
736 \r
737         mf_ug_storage_type state = MF_UG_NONE;\r
738         unsigned long free_space = 0;\r
739 \r
740         if (ugd->ug_Status.ug_iMore == UG_MORE_CREATE_FOLDER) {\r
741                 state = mf_ug_fm_svc_wapper_get_location(ugd->ug_Status.ug_pPath->str);\r
742                 free_space = mf_ug_fm_svc_wrapper_get_free_space(state);\r
743                 ug_debug("free size is %lu\n", free_space);\r
744                 /*\r
745                  **     in vfat fs type, sector size is 16K.\r
746                  **     it is to say that the limited size of the free space should be 16K\r
747                  **     or it will report space used up.\r
748                  **     check free_space == 0 can make sure at least 16K is free on the disk\r
749                  **     while every dir takes 4K\r
750                  */\r
751                 if (free_space == 0) {\r
752                         ugd->ug_MainWindow.ug_pNormalPopup = mf_ug_popup_create(ugd, UG_POPMODE_TEXT, NULL,\r
753                                            MF_UG_LABEL_NOT_ENOUGH_SPACE, MF_UG_LABEL_OK,\r
754                                            NULL, NULL, mf_ug_cb_warning_popup_cb, ugd);\r
755                         return MYFILE_ERR_NO_FREE_SPACE;\r
756                 }\r
757         }\r
758 \r
759         return MYFILE_ERR_NONE;\r
760 }\r
761 \r
762 void mf_ug_util_operation_alloc_failed(void *data)\r
763 {\r
764         UG_TRACE_BEGIN;\r
765         ug_mf_retm_if(data == NULL, "data is null");\r
766         ugData *ugd = (ugData *)data;\r
767 \r
768         ugd->ug_MainWindow.ug_pNormalPopup = mf_ug_popup_create(ugd, UG_POPMODE_TEXT, NULL, MF_UG_LABEL_MEMORY_NOT_ENOUGH,\r
769                            NULL, NULL, NULL, (Evas_Smart_Cb) elm_exit, NULL);\r
770 }\r
771 \r
772 long mf_ug_util_character_count_get(const char *original)\r
773 {\r
774         ug_mf_retvm_if(original == NULL, 0, "input string is NULL");\r
775         long count = 0;\r
776         char *utf8_form = g_locale_to_utf8(original, -1, NULL, NULL, NULL);\r
777         if (utf8_form == NULL)\r
778                 return count;\r
779         else {\r
780                   count = g_utf8_strlen(utf8_form, -1);\r
781                   free(utf8_form);\r
782                   ug_debug("utf8 count is %ld", count);\r
783                   return count;\r
784         }\r
785 }\r
786 \r
787 ugFsNodeInfo *mf_ug_util_generate_pnode(const char *path, int file_type)\r
788 {\r
789         ug_mf_retvm_if(path == NULL, NULL, "path is NULL");\r
790         ugFsNodeInfo *pNode = NULL;\r
791         int error = MYFILE_ERR_NONE;\r
792 \r
793         pNode = (ugFsNodeInfo *) malloc(sizeof(ugFsNodeInfo));\r
794         if (pNode == NULL) {\r
795                 return NULL;\r
796         }\r
797         memset(pNode, 0, sizeof(ugFsNodeInfo));\r
798         char *parent = NULL;\r
799         error = mf_ug_file_attr_get_parent_path(path, &parent);\r
800         if (error == MYFILE_ERR_NONE) {\r
801                 snprintf(pNode->path, sizeof(pNode->path), "%s", parent);\r
802                 snprintf(pNode->name, sizeof(pNode->name), "%s", ecore_file_file_get(path));\r
803                 mf_ug_file_attr_get_file_stat(path, &pNode);\r
804                 if (file_type == UG_FILE_TYPE_DIR) {\r
805                         pNode->type = file_type;\r
806                 } else {\r
807                         mf_ug_file_attr_get_file_category(path, &(pNode->type));\r
808                 }\r
809         } else {\r
810                 UG_SAFE_FREE_CHAR(pNode);\r
811         }\r
812         return pNode;\r
813 }\r
814 \r
815 void mf_util_generate_list(Eina_List **list, const char *path, int file_type)\r
816 {\r
817         ug_mf_retm_if(list == NULL, "list is NULL");\r
818         ug_mf_retm_if(path == NULL, "path is NULL");\r
819 \r
820         ugFsNodeInfo *pNode = mf_ug_util_generate_pnode(path, file_type);\r
821 \r
822         if (pNode)\r
823                 *list = eina_list_append(*list, pNode);\r
824 }\r
825 \r
826 void mf_util_remove_item_from_list_by_location(Eina_List **list, int location)\r
827 {\r
828         ug_mf_retm_if(list == NULL, "list is NULL");\r
829 \r
830         Eina_List *l = NULL;\r
831         ugFsNodeInfo *node = NULL;\r
832 \r
833         EINA_LIST_FOREACH(*list, l, node) {\r
834                 if ((ugFsNodeInfo *)node != NULL && strlen(((ugFsNodeInfo *)node)->path) != 0) {\r
835                         if (mf_ug_fm_svc_wapper_get_location(node->path) == location){\r
836                                 UG_SAFE_FREE_CHAR(node->ext);\r
837                                 UG_SAFE_FREE_CHAR(node);\r
838                                 *list = eina_list_remove_list(*list, l);\r
839                         }\r
840                 }\r
841         }\r
842 }\r
843 \r
844 int mf_ug_util_generate_root_view_file_list(Eina_List **list, int storage_state)\r
845 {\r
846         UG_TRACE_BEGIN;\r
847 \r
848         ugFsNodeInfo *pNode = NULL;\r
849         pNode = (ugFsNodeInfo *) malloc(sizeof(ugFsNodeInfo));\r
850         memset(pNode, 0, sizeof(ugFsNodeInfo));\r
851         /*set path */\r
852         snprintf(pNode->path, sizeof(pNode->path), "%s", PHONE_PARENT);\r
853         snprintf(pNode->name, sizeof(pNode->name), "%s", PHONE_NAME);\r
854         pNode->type = UG_FILE_TYPE_DIR;\r
855         *list = eina_list_append(*list, pNode);\r
856 \r
857         if (storage_state == MMC_ON) {\r
858                 pNode = (ugFsNodeInfo *) malloc(sizeof(ugFsNodeInfo));\r
859                 memset(pNode, 0, sizeof(ugFsNodeInfo));\r
860                 /*set path */\r
861                 snprintf(pNode->path, sizeof(pNode->path), "%s", STORAGE_PARENT);\r
862                 snprintf(pNode->name, sizeof(pNode->name), "%s", MMC_NAME);\r
863                 pNode->type = UG_FILE_TYPE_DIR;\r
864                 *list = eina_list_append(*list, pNode);\r
865         }\r
866 \r
867         return 0;\r
868 }\r
869 \r
870 \r