initial upload for tizen 2.0 beta
[apps/home/gallery.git] / src / data / gl-local-data.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://www.tizenopensource.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 #include <media_content.h>\r
18 #include <string.h>\r
19 #include <glib.h>\r
20 #include "gl-local-data.h"\r
21 #include "gl-debug.h"\r
22 \r
23 typedef struct _gl_transfer_data_t gl_transfer_data_s;\r
24 \r
25 struct _gl_transfer_data_t {\r
26         void **userdata;\r
27         filter_h filter;\r
28         char *album_id;\r
29         bool with_meta;\r
30 };\r
31 \r
32 static int __gl_local_data_create_filter(gl_filter_s *condition, filter_h *filter)\r
33 {\r
34         GL_CHECK_VAL(filter, -1);\r
35         GL_CHECK_VAL(condition, -1);\r
36         int ret = -1;\r
37         filter_h tmp_filter = NULL;\r
38         ret = media_filter_create(&tmp_filter);\r
39         if(ret != MEDIA_CONTENT_ERROR_NONE) {\r
40                 gl_dbgE("Fail to create filter");\r
41                 return -1;\r
42         }\r
43 \r
44         if (strlen(condition->cond) > 0) {\r
45                 ret = media_filter_set_condition(tmp_filter, condition->cond,\r
46                                                  condition->collate_type);\r
47                 if(ret != MEDIA_CONTENT_ERROR_NONE) {\r
48                         gl_dbgE("Fail to set condition");\r
49                         goto GL_LOCAL_FAILED;\r
50                 }\r
51         }\r
52 \r
53         if (strlen(condition->sort_keyword) > 0) {\r
54                 ret = media_filter_set_order(tmp_filter, condition->sort_type,\r
55                                              condition->sort_keyword,\r
56                                              condition->collate_type);\r
57                 if(ret != MEDIA_CONTENT_ERROR_NONE) {\r
58                         gl_dbgE("Fail to set order");\r
59                         goto GL_LOCAL_FAILED;\r
60                 }\r
61         }\r
62 \r
63         if (condition->offset != -1 && condition->count != -1 &&\r
64             condition->count > 0) {\r
65                 ret = media_filter_set_offset(tmp_filter, condition->offset,\r
66                                               condition->count);\r
67                 if(ret != MEDIA_CONTENT_ERROR_NONE) {\r
68                         gl_dbgE("Fail to set offset");\r
69                         goto GL_LOCAL_FAILED;\r
70                 }\r
71         }\r
72 \r
73         *filter = tmp_filter;\r
74         return 0;\r
75 \r
76  GL_LOCAL_FAILED:\r
77 \r
78         if (tmp_filter) {\r
79                 media_filter_destroy(*filter);\r
80                 tmp_filter = NULL;\r
81                 *filter = NULL;\r
82         }\r
83         return -1;\r
84 }\r
85 \r
86 static int __gl_local_data_destroy_filter(filter_h filter)\r
87 {\r
88         GL_CHECK_VAL(filter, -1);\r
89         if (media_filter_destroy(filter) != MEDIA_CONTENT_ERROR_NONE) {\r
90                 gl_dbgE("Failed to destroy filter!");\r
91                 return -1;\r
92         }\r
93 \r
94         return 0;\r
95 }\r
96 \r
97 static bool __gl_local_data_get_album_list_cb(media_folder_h folder,\r
98                                               void *data)\r
99 {\r
100         GL_CHECK_FALSE(data);\r
101         gl_transfer_data_s *tmp_data = (gl_transfer_data_s *)data;\r
102         GL_CHECK_FALSE(tmp_data->userdata);\r
103         GL_CHECK_FALSE(tmp_data->filter);\r
104         GL_CHECK_FALSE(folder);\r
105 \r
106         Eina_List **elist = (Eina_List **)(tmp_data->userdata);\r
107         gl_album_s *album = NULL;\r
108 \r
109         album = (gl_album_s *)calloc(1, sizeof(gl_album_s));\r
110         GL_CHECK_FALSE(album);\r
111         album->gtype = GL_TYPE_ALBUM;\r
112 \r
113         if (media_folder_clone(&(album->folder_h), folder) != MEDIA_CONTENT_ERROR_NONE) {\r
114                 gl_dbgE("Clone folder handle failed!");\r
115                 goto GL_LOCAL_FAILED;\r
116         }\r
117 \r
118         if (media_folder_get_folder_id(folder, &(album->uuid)) != MEDIA_CONTENT_ERROR_NONE) {\r
119                 gl_dbgE("Get folder id failed!");\r
120                 goto GL_LOCAL_FAILED;\r
121         }\r
122 \r
123         if (media_folder_get_modified_time(folder, &(album->mtime)) != MEDIA_CONTENT_ERROR_NONE) {\r
124                 gl_dbgE("Get modified time failed!");\r
125                 goto GL_LOCAL_FAILED;\r
126         }\r
127 \r
128         if (media_folder_get_storage_type(folder, (media_content_storage_e *)&(album->type)) != MEDIA_CONTENT_ERROR_NONE) {\r
129                 gl_dbgE("Get storage type failed!");\r
130                 goto GL_LOCAL_FAILED;\r
131         }\r
132 \r
133         if (media_folder_get_name(folder, &(album->display_name)) != MEDIA_CONTENT_ERROR_NONE) {\r
134                 gl_dbgE("Get folder name failed!");\r
135                 goto GL_LOCAL_FAILED;\r
136         }\r
137 \r
138         if (media_folder_get_path(folder, &(album->path)) != MEDIA_CONTENT_ERROR_NONE) {\r
139                 gl_dbgE("Get folder name failed!");\r
140                 goto GL_LOCAL_FAILED;\r
141         }\r
142 \r
143         if (media_folder_get_media_count_from_db(album->uuid, tmp_data->filter, &(album->count)) != MEDIA_CONTENT_ERROR_NONE) {\r
144                 gl_dbgE("Failed to get count[uuid: %s]", album->uuid);\r
145                 goto GL_LOCAL_FAILED;\r
146         }\r
147 \r
148         *elist = eina_list_append(*elist, album);\r
149 \r
150         return true;\r
151 \r
152  GL_LOCAL_FAILED:\r
153 \r
154         _gl_data_type_free_glitem((void **)(&album));\r
155         return false;\r
156 }\r
157 \r
158 static bool __gl_local_data_get_media_list_cb(media_info_h media, void *data)\r
159 {\r
160         GL_CHECK_FALSE(data);\r
161         gl_transfer_data_s *tmp_data = (gl_transfer_data_s *)data;\r
162         GL_CHECK_FALSE(tmp_data->userdata);\r
163         GL_CHECK_FALSE(media);\r
164         gl_media_s *item = NULL;\r
165         gl_image_s *image_info = NULL;\r
166         gl_video_s *video_info = NULL;\r
167         image_meta_h image_handle = NULL;\r
168         video_meta_h video_handle = NULL;\r
169         char *ext = NULL;\r
170 \r
171         int ret = -1;\r
172         Eina_List **elist = (Eina_List **)(tmp_data->userdata);\r
173 \r
174         item = (gl_media_s *)calloc(1, sizeof(gl_media_s));\r
175         GL_CHECK_FALSE(item);\r
176         item->gtype = GL_TYPE_MEDIA;\r
177 \r
178         if (media_info_clone(&(item->media_h), media) != MEDIA_CONTENT_ERROR_NONE) {\r
179                 gl_dbgE("Clone media handle failed!");\r
180                 goto GL_LOCAL_FAILED;\r
181         }\r
182 \r
183         if (media_info_get_media_id(media, &(item->uuid)) != MEDIA_CONTENT_ERROR_NONE) {\r
184                 gl_dbgE("Get media id failed!");\r
185                 goto GL_LOCAL_FAILED;\r
186         }\r
187 \r
188         if (media_info_get_display_name(media, &(item->display_name)) != MEDIA_CONTENT_ERROR_NONE) {\r
189                 gl_dbgE("Get media display name failed!");\r
190                 goto GL_LOCAL_FAILED;\r
191         }\r
192 \r
193         if (media_info_get_file_path(media, &(item->file_url)) != MEDIA_CONTENT_ERROR_NONE) {\r
194                 gl_dbgE("Get media file path failed!");\r
195                 goto GL_LOCAL_FAILED;\r
196         }\r
197 \r
198         if (media_info_get_media_type(media, (media_content_type_e *)&(item->type)) != MEDIA_CONTENT_ERROR_NONE) {\r
199                 gl_dbgE("Get media type failed!");\r
200                 goto GL_LOCAL_FAILED;\r
201         }\r
202         if (media_info_get_thumbnail_path(media, &(item->thumb_url)) != MEDIA_CONTENT_ERROR_NONE) {\r
203                 gl_dbgE("Get media thumbnail path failed!");\r
204                 goto GL_LOCAL_FAILED;\r
205         }\r
206         gl_dbg("thumb_url: %s", item->thumb_url);\r
207 \r
208         if (media_info_get_modified_time(media, &(item->mtime)) != MEDIA_CONTENT_ERROR_NONE) {\r
209                 gl_dbgE("Get media modified time failed!");\r
210                 goto GL_LOCAL_FAILED;\r
211         }\r
212 \r
213         /* Without meta */\r
214         if (!tmp_data->with_meta)\r
215                 goto GL_LOCAL_SUCCESS;\r
216 \r
217         if (item->type == MEDIA_CONTENT_TYPE_IMAGE) {\r
218                 ret = media_info_get_image(media, &image_handle);\r
219                 if (ret != MEDIA_CONTENT_ERROR_NONE || image_handle == NULL) {\r
220                         gl_dbgE("Failed to get image handle[%d]!", ret);\r
221                         goto GL_LOCAL_FAILED;\r
222                 }\r
223 \r
224                 image_info = (gl_image_s *)calloc(1, sizeof(gl_image_s));\r
225                 if (NULL == image_info){\r
226                         gl_dbgE("Failed to calloc!");\r
227                         goto GL_LOCAL_FAILED;\r
228                 }\r
229                 item->image_info = image_info;\r
230 \r
231                 if (image_meta_clone(&(image_info->image_h), image_handle) != MEDIA_CONTENT_ERROR_NONE) {\r
232                         gl_dbgE("Clone image handle failed!");\r
233                         goto GL_LOCAL_FAILED;\r
234                 }\r
235 \r
236                 if (image_meta_get_media_id(image_handle, &(image_info->media_uuid)) != MEDIA_CONTENT_ERROR_NONE) {\r
237                         gl_dbgE("Get image id failed!");\r
238                         goto GL_LOCAL_FAILED;\r
239                 }\r
240 \r
241                 if (image_meta_get_orientation(image_handle, (media_content_orientation_e *)&(image_info->orientation)) != MEDIA_CONTENT_ERROR_NONE) {\r
242                         gl_dbgE("Get image orientation failed!");\r
243                         goto GL_LOCAL_FAILED;\r
244                 }\r
245 \r
246                 if (image_meta_destroy(image_handle) != MEDIA_CONTENT_ERROR_NONE) {\r
247                         gl_dbgE("Destroy image handle failed!");\r
248                         goto GL_LOCAL_FAILED;\r
249                 }\r
250         } else if (item->type == MEDIA_CONTENT_TYPE_VIDEO) {\r
251                 ret = media_info_get_video(media, &video_handle);\r
252                 if (ret != MEDIA_CONTENT_ERROR_NONE || video_handle == NULL) {\r
253                         gl_dbgE("Failed to get video handle[%d]!", ret);\r
254                         goto GL_LOCAL_FAILED;\r
255                 }\r
256 \r
257                 video_info = (gl_video_s *)calloc(1, sizeof(gl_video_s));\r
258                 if (NULL == video_info) {\r
259                         gl_dbgE("Failed to calloc!");\r
260                         goto GL_LOCAL_FAILED;\r
261                 }\r
262                 item->video_info = video_info;\r
263 \r
264                 if (video_meta_clone(&(video_info->video_h), video_handle) != MEDIA_CONTENT_ERROR_NONE) {\r
265                         gl_dbgE("Clone video handle failed!");\r
266                         goto GL_LOCAL_FAILED;\r
267                 }\r
268 \r
269                 if (video_meta_get_media_id(video_handle, &(video_info->media_uuid)) != MEDIA_CONTENT_ERROR_NONE) {\r
270                         gl_dbgE("Get video id failed!");\r
271                         goto GL_LOCAL_FAILED;\r
272                 }\r
273 \r
274                 if (video_meta_get_title(video_handle, &(video_info->title)) != MEDIA_CONTENT_ERROR_NONE) {\r
275                         gl_dbgE("Get video title failed!");\r
276                         goto GL_LOCAL_FAILED;\r
277                 }\r
278 \r
279                 if (video_meta_get_duration(video_handle, &(video_info->duration)) != MEDIA_CONTENT_ERROR_NONE) {\r
280                         gl_dbgE("Get video duration failed!");\r
281                         goto GL_LOCAL_FAILED;\r
282                 }\r
283 \r
284                 if (video_meta_get_played_time(video_handle, &(video_info->last_played_pos)) != MEDIA_CONTENT_ERROR_NONE) {\r
285                         gl_dbgE("Get video last played position failed!");\r
286                         goto GL_LOCAL_FAILED;\r
287                 }\r
288 \r
289                 if (video_meta_destroy(video_handle) != MEDIA_CONTENT_ERROR_NONE) {\r
290                         gl_dbgE("Destroy video handle failed!");\r
291                         goto GL_LOCAL_FAILED;\r
292                 }\r
293 \r
294                 /* Get bookmark elist in case of video */\r
295                 if (video_info->media_uuid) {\r
296                         video_info->bookmarks = 0;\r
297                         int count = 0;\r
298                         ret = media_info_get_bookmark_count_from_db(video_info->media_uuid,\r
299                                                                     NULL,\r
300                                                                     &count);\r
301                         if (ret != MEDIA_CONTENT_ERROR_NONE)\r
302                                 gl_dbgE("Failed to get bookmark[%d]", ret);\r
303                         else\r
304                                 video_info->bookmarks = count;\r
305                 }\r
306         } else {\r
307                 gl_dbgE("Wrong media type[%d]!", item->type);\r
308         }\r
309 \r
310  GL_LOCAL_SUCCESS:\r
311 \r
312         /* Get extension */\r
313         ext = strrchr(item->file_url, '.');\r
314         if (ext)\r
315                 item->ext = strdup(ext + 1);\r
316         else\r
317                 gl_dbgE("Extension is NULL!");\r
318 \r
319         /* Save album uuid */\r
320         if (tmp_data->album_id)\r
321                 item->album_uuid = strdup(tmp_data->album_id);\r
322         else\r
323                 item->album_uuid = NULL;\r
324 \r
325         *elist = eina_list_append(*elist, item);\r
326         return true;\r
327 \r
328  GL_LOCAL_FAILED:\r
329 \r
330          if (image_handle)\r
331                  image_meta_destroy(image_handle);\r
332          if (video_handle)\r
333                  video_meta_destroy(video_handle);\r
334 \r
335         _gl_data_type_free_glitem((void **)(&item));\r
336         return false;\r
337 }\r
338 \r
339 /* Connect to media-content database */\r
340 int _gl_local_data_connect(void)\r
341 {\r
342         int ret = -1;\r
343         ret = media_content_connect();\r
344         if(ret == MEDIA_CONTENT_ERROR_NONE) {\r
345                 gl_dbg("DB connection is success");\r
346                 return 0;\r
347         } else {\r
348                 gl_dbgE("DB connection is failed[%d]!", ret);\r
349                 return -1;\r
350         }\r
351 }\r
352 \r
353 /* Disconnect from media-content database */\r
354 int _gl_local_data_disconnect(void)\r
355 {\r
356         int ret = -1;\r
357         ret = media_content_disconnect();\r
358         if(ret == MEDIA_CONTENT_ERROR_NONE) {\r
359                 gl_dbg("DB disconnection is success");\r
360                 return 0;\r
361         } else {\r
362                 gl_dbgE("DB disconnection is failed[%d]!", ret);\r
363                 return -1;\r
364         }\r
365 }\r
366 \r
367 int _gl_local_data_get_album_by_path(char *path, gl_album_s **album)\r
368 {\r
369         GL_CHECK_VAL(path, -1);\r
370         GL_CHECK_VAL(album, -1);\r
371         int ret = -1;\r
372         Eina_List *list = NULL;\r
373         gl_filter_s condition;\r
374         gl_album_s *_item = NULL;\r
375         int i = 0;\r
376 \r
377         if (strlen(path) <=0) {\r
378                 gl_dbgE("Invalid path!");\r
379                 return -1;\r
380         }\r
381         gl_dbg("path: %s", path);\r
382 \r
383         memset(&condition, 0x00, sizeof(gl_filter_s));\r
384         g_strlcpy(condition.cond, GL_CONDITION_IMAGE_VIDEO, CONDITION_LENGTH);\r
385         g_strlcpy(condition.sort_keyword, MEDIA_MODIFIED_TIME, KEYWORD_LENGTH);\r
386         condition.collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;\r
387         condition.sort_type = MEDIA_CONTENT_ORDER_DESC;\r
388         condition.offset = -1;\r
389         condition.count = -1;\r
390         condition.with_meta = false;\r
391 \r
392         snprintf(condition.cond, CONDITION_LENGTH,\r
393                  "(%s=0 OR %s=1) AND %s=\'%s\'", MEDIA_TYPE, MEDIA_TYPE,\r
394                  FOLDER_PATH, path);\r
395 \r
396         ret = _gl_local_data_get_album_list(&condition, &list);\r
397         if (ret != 0 || NULL == list) {\r
398                 gl_dbgE("Failed to get album list[%d]!", ret);\r
399                 ret = -1;\r
400         } else if (NULL != list) {\r
401                 *album = eina_list_nth(list, 0);\r
402                 i = 1;\r
403                 ret = 0;\r
404         }\r
405 \r
406         /* Free other items */\r
407         if (list) {\r
408                 int len = eina_list_count(list);\r
409                 gl_dbg("len: %d", len);\r
410 \r
411                 for(; i < len; i++) {\r
412                         _item = eina_list_nth(list, i);\r
413                         _gl_data_type_free_glitem((void **)(&_item));\r
414                 }\r
415 \r
416                 eina_list_free(list);\r
417         }\r
418 \r
419         return ret;\r
420 }\r
421 \r
422 int _gl_local_data_get_album_list(gl_filter_s *condition, Eina_List **elist)\r
423 {\r
424         GL_CHECK_VAL(elist, -1);\r
425         GL_CHECK_VAL(condition, -1);\r
426         int ret = -1;\r
427         filter_h filter = NULL;\r
428 \r
429         ret = __gl_local_data_create_filter(condition, &filter);\r
430         if (ret != 0) {\r
431                 gl_dbgE("Create filter failed[%d]!", ret);\r
432                 return -1;\r
433         }\r
434 \r
435         filter_h media_filter = NULL;\r
436         gl_filter_s media_condition;\r
437         memset(&media_condition, 0x00, sizeof(gl_filter_s));\r
438         g_strlcpy(media_condition.cond, GL_CONDITION_IMAGE_VIDEO,\r
439                   CONDITION_LENGTH);\r
440         media_condition.sort_type = MEDIA_CONTENT_ORDER_DESC;\r
441         g_strlcpy(media_condition.sort_keyword, MEDIA_MODIFIED_TIME,\r
442                   KEYWORD_LENGTH);\r
443         media_condition.collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;\r
444         media_condition.offset = -1;\r
445         media_condition.count = -1;\r
446         media_condition.with_meta = false;\r
447 \r
448         ret = __gl_local_data_create_filter(&media_condition, &media_filter);\r
449         if (ret != 0) {\r
450                 __gl_local_data_destroy_filter(filter);\r
451                 gl_dbgE("Create filter failed[%d]!", ret);\r
452                 return -1;\r
453         }\r
454 \r
455         gl_transfer_data_s tran_data;\r
456         memset(&tran_data, 0x00, sizeof(gl_transfer_data_s));\r
457         tran_data.userdata = (void **)elist;\r
458         tran_data.filter = media_filter;\r
459         tran_data.album_id = NULL;\r
460         tran_data.with_meta = false;\r
461 \r
462         gl_dbg("Get folders--start");\r
463         ret = media_folder_foreach_folder_from_db(filter,\r
464                                                   __gl_local_data_get_album_list_cb,\r
465                                                   &tran_data);\r
466         gl_dbg("Get folders---over");\r
467 \r
468         __gl_local_data_destroy_filter(media_filter);\r
469         __gl_local_data_destroy_filter(filter);\r
470 \r
471         if (ret != MEDIA_CONTENT_ERROR_NONE) {\r
472                 gl_dbgE("Failed to get all folders[%d]!", ret);\r
473                 return -1;\r
474         }\r
475 \r
476         return 0;\r
477 }\r
478 \r
479 int _gl_local_data_get_media_by_id(char *media_id, gl_media_s **mitem)\r
480 {\r
481         GL_CHECK_VAL(mitem, -1);\r
482 \r
483         if (media_id == NULL) {\r
484                 gl_dbg("Create a empty media");\r
485                 _gl_data_type_new_media(mitem);\r
486                 return 0;\r
487         }\r
488 \r
489         int ret = -1;\r
490         Eina_List *list = NULL;\r
491         gl_media_s *_mitem = NULL;\r
492         media_info_h media_h = NULL;\r
493         int i = 0;\r
494         gl_dbg("media id: %s", media_id);\r
495 \r
496         ret = media_info_get_media_from_db(media_id, &media_h);\r
497         if (ret != MEDIA_CONTENT_ERROR_NONE || media_h == NULL) {\r
498                 gl_dbgE("Failed to get media handle[%d]!", ret);\r
499                 return -1;\r
500         }\r
501 \r
502         gl_transfer_data_s tran_data;\r
503         memset(&tran_data, 0x00, sizeof(gl_transfer_data_s));\r
504         tran_data.userdata = (void **)&list;\r
505         tran_data.filter = NULL;\r
506         tran_data.album_id = NULL;\r
507         tran_data.with_meta = false;\r
508 \r
509         bool b_ret = __gl_local_data_get_media_list_cb(media_h, &tran_data);\r
510 \r
511         media_info_destroy(media_h);\r
512 \r
513         if (b_ret && list) {\r
514                 *mitem = eina_list_nth(list, 0);\r
515                 i = 1;\r
516                 ret = 0;\r
517         } else {\r
518                 gl_dbgE("Failed to get media list!");\r
519                 ret = -1;\r
520         }\r
521 \r
522         /* Free other items */\r
523         if (list) {\r
524                 int len = eina_list_count(list);\r
525                 gl_dbg("len: %d", len);\r
526 \r
527                 for(; i < len; i++) {\r
528                         _mitem = eina_list_nth(list, i);\r
529                         _gl_data_type_free_glitem((void **)(&_mitem));\r
530                 }\r
531 \r
532                 eina_list_free(list);\r
533         }\r
534 \r
535         return ret;\r
536 }\r
537 \r
538 int _gl_local_data_get_media_by_path(const char *path, gl_media_s **mitem)\r
539 {\r
540         GL_CHECK_VAL(mitem, -1);\r
541         GL_CHECK_VAL(path, -1);\r
542         int ret = -1;\r
543         Eina_List *list = NULL;\r
544         gl_filter_s condition;\r
545         gl_media_s *_mitem = NULL;\r
546         int i = 0;\r
547 \r
548         if (strlen(path) <=0) {\r
549                 gl_dbgE("Invalid path!");\r
550                 return -1;\r
551         }\r
552         gl_dbg("path: %s", path);\r
553 \r
554         memset(&condition,0x00,sizeof(gl_filter_s));\r
555         g_strlcpy(condition.cond, GL_CONDITION_IMAGE_VIDEO, CONDITION_LENGTH);\r
556         g_strlcpy(condition.sort_keyword, MEDIA_MODIFIED_TIME, KEYWORD_LENGTH);\r
557         condition.sort_type = MEDIA_CONTENT_ORDER_DESC;\r
558         condition.offset = -1;\r
559         condition.count = -1;\r
560         condition.with_meta = true;\r
561 \r
562         snprintf(condition.cond, CONDITION_LENGTH,\r
563                  "(%s=0 OR %s=1) AND %s=\'%s\'", MEDIA_TYPE, MEDIA_TYPE,\r
564                  MEDIA_PATH, path);\r
565         ret = _gl_local_data_get_all_albums_media_list(&condition, &list);\r
566         if (ret != 0 || NULL == list) {\r
567                 gl_dbgE("Failed to get all albums[%d]!", ret);\r
568                 ret = -1;\r
569         } else if (NULL != list) {\r
570                 *mitem = eina_list_nth(list, 0);\r
571                 i = 1;\r
572                 ret = 0;\r
573         }\r
574 \r
575         /* Free other items */\r
576         if (list) {\r
577                 int len = eina_list_count(list);\r
578                 gl_dbg("len: %d", len);\r
579 \r
580                 for(; i < len; i++) {\r
581                         _mitem = eina_list_nth(list, i);\r
582                         _gl_data_type_free_glitem((void **)(&_mitem));\r
583                 }\r
584 \r
585                 eina_list_free(list);\r
586         }\r
587 \r
588         return ret;\r
589 }\r
590 \r
591 int _gl_local_data_get_media_count(const char *cluster_id, gl_filter_s *condition,\r
592                                    int *item_cnt)\r
593 {\r
594         GL_CHECK_VAL(cluster_id, -1);\r
595         GL_CHECK_VAL(condition, -1);\r
596         GL_CHECK_VAL(item_cnt, -1);\r
597         int ret = -1;\r
598         filter_h filter = NULL;\r
599 \r
600         ret = __gl_local_data_create_filter(condition, &filter);\r
601         if (ret != 0) {\r
602                 gl_dbgE("Create filter failed[%d]!", ret);\r
603                 return -1;\r
604         }\r
605 \r
606         gl_dbg("Get media count--start");\r
607         ret = media_folder_get_media_count_from_db(cluster_id, filter, item_cnt);\r
608         gl_dbg("Get media count---over");\r
609 \r
610         __gl_local_data_destroy_filter(filter);\r
611 \r
612         if (ret != MEDIA_CONTENT_ERROR_NONE) {\r
613                 gl_dbgE("Failed to get media count[%d]!", ret);\r
614                 return -1;\r
615         }\r
616 \r
617         return 0;\r
618 }\r
619 \r
620 int _gl_local_data_get_all_media_count(gl_filter_s *condtion, int *item_cnt)\r
621 {\r
622         GL_CHECK_VAL(condtion, -1);\r
623         GL_CHECK_VAL(item_cnt, -1);\r
624         int ret = -1;\r
625         filter_h filter = NULL;\r
626 \r
627         ret = __gl_local_data_create_filter(condtion, &filter);\r
628         if (ret != 0) {\r
629                 gl_dbgE("Create filter failed[%d]!", ret);\r
630                 return -1;\r
631         }\r
632 \r
633         gl_dbg("Get media count--start");\r
634         ret = media_info_get_media_count_from_db(filter, item_cnt);\r
635         gl_dbg("Get media count---over");\r
636 \r
637         __gl_local_data_destroy_filter(filter);\r
638 \r
639         if (ret != MEDIA_CONTENT_ERROR_NONE) {\r
640                 gl_dbgE("Failed to get media count[%d]", ret);\r
641                 return -1;\r
642         }\r
643 \r
644         return 0;\r
645 }\r
646 \r
647 int _gl_local_data_get_album_media_list(gl_filter_s *condition,\r
648                                         const char *album_id, Eina_List **elist)\r
649 {\r
650         GL_CHECK_VAL(elist, -1);\r
651         GL_CHECK_VAL(album_id, -1);\r
652         GL_CHECK_VAL(condition, -1);\r
653         gl_dbg("album id: %s", album_id);\r
654 \r
655         int ret = -1;\r
656         filter_h filter = NULL;\r
657         ret = __gl_local_data_create_filter(condition, &filter);\r
658         if (ret != 0) {\r
659                 gl_dbgE("Create filter failed!");\r
660                 return -1;\r
661         }\r
662 \r
663         gl_transfer_data_s tran_data;\r
664         memset(&tran_data, 0x00, sizeof(gl_transfer_data_s));\r
665         tran_data.userdata = (void **)elist;\r
666         tran_data.filter = NULL;\r
667         tran_data.album_id = (char *)album_id;\r
668         tran_data.with_meta = condition->with_meta;\r
669 \r
670         gl_dbg("Get medias--start");\r
671         ret = media_folder_foreach_media_from_db(album_id, filter,\r
672                                                  __gl_local_data_get_media_list_cb,\r
673                                                  &tran_data);\r
674         gl_dbg("Get medias--start");\r
675 \r
676         __gl_local_data_destroy_filter(filter);\r
677 \r
678         if (ret != MEDIA_CONTENT_ERROR_NONE) {\r
679                 gl_dbgE("Failed to get medias[%d]!", ret);\r
680                 return -1;\r
681         }\r
682 \r
683         return 0;\r
684 }\r
685 \r
686 int _gl_local_data_get_all_albums_media_list(gl_filter_s *condition,\r
687                                              Eina_List **elist)\r
688 {\r
689         GL_CHECK_VAL(elist, -1);\r
690         GL_CHECK_VAL(condition, -1);\r
691         int ret = -1;\r
692         filter_h filter = NULL;\r
693 \r
694         ret = __gl_local_data_create_filter(condition, &filter);\r
695         if (ret != 0) {\r
696                 gl_dbgE("Create filter failed!");\r
697                 return -1;\r
698         }\r
699 \r
700         gl_transfer_data_s tran_data;\r
701         memset(&tran_data, 0x00, sizeof(gl_transfer_data_s));\r
702         tran_data.userdata = (void **)elist;\r
703         tran_data.filter = NULL;\r
704         tran_data.album_id = NULL;\r
705         tran_data.with_meta = condition->with_meta;\r
706 \r
707         gl_dbg("Get medias--start");\r
708         ret = media_info_foreach_media_from_db(filter,\r
709                                                __gl_local_data_get_media_list_cb,\r
710                                                &tran_data);\r
711         gl_dbg("Get medias--start");\r
712 \r
713         __gl_local_data_destroy_filter(filter);\r
714 \r
715         if (ret != MEDIA_CONTENT_ERROR_NONE) {\r
716                 gl_dbgE("Failed to get medias[%d]!", ret);\r
717                 return -1;\r
718         }\r
719 \r
720         return 0;\r
721 }\r
722 \r
723 int _gl_local_data_delete_album(const char *album_uuid)\r
724 {\r
725         GL_CHECK_VAL(album_uuid, -1);\r
726         gl_filter_s filter;\r
727         int ret = -1;\r
728 \r
729         memset(&filter, 0x00, sizeof(gl_filter_s));\r
730         g_strlcpy(filter.cond, GL_CONDITION_IMAGE_VIDEO, CONDITION_LENGTH);\r
731         filter.sort_type = MEDIA_CONTENT_ORDER_DESC;\r
732         filter.collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;\r
733         g_strlcpy(filter.sort_keyword, MEDIA_MODIFIED_TIME, KEYWORD_LENGTH);\r
734         filter.offset = -1;\r
735         filter.count = -1;\r
736         filter.with_meta = false;\r
737 \r
738         Eina_List *itemlist = NULL;\r
739         gl_media_s *item = NULL;\r
740 \r
741         ret = _gl_local_data_get_album_media_list(&filter, album_uuid,\r
742                                                   &itemlist);\r
743         if (ret != 0) {\r
744                 gl_dbgE("Get album medias failed[%d]!", ret);\r
745                 return -1;\r
746         }\r
747 \r
748         EINA_LIST_FREE(itemlist, item) {\r
749                 if (item == NULL) {\r
750                         gl_dbgE("Invalid item!");\r
751                         continue;\r
752                 }\r
753 \r
754                 media_info_delete_from_db(item->uuid);\r
755                 _gl_data_type_free_glitem((void **)&item);\r
756         }\r
757 \r
758         return 0;\r
759 }\r
760 \r
761 int _gl_local_data_add_media(const char *file_url, media_info_h *info)\r
762 {\r
763         GL_CHECK_VAL(file_url, -1);\r
764         int ret = -1;\r
765         media_info_h item = NULL;\r
766         gl_dbg("file_url is %s", file_url);\r
767 \r
768         ret = media_info_insert_to_db(file_url, &item);\r
769         if (ret != MEDIA_CONTENT_ERROR_NONE) {\r
770                 gl_dbgE("Failed to insert media to DB[%d]!", ret);\r
771                 return -1;\r
772         }\r
773 \r
774         if (info) {\r
775                 *info = item;\r
776         } else {\r
777                 gl_dbgW("Destroy media_info item!");\r
778                 media_info_destroy(item);\r
779         }\r
780 \r
781         return 0;\r
782 }\r
783 \r
784 int _gl_local_data_get_thumb(gl_media_s *mitem, char **thumb)\r
785 {\r
786         GL_CHECK_VAL(mitem, -1);\r
787         GL_CHECK_VAL(mitem->media_h, -1);\r
788 \r
789         if (media_info_get_thumbnail_path(mitem->media_h, thumb) != MEDIA_CONTENT_ERROR_NONE) {\r
790                 gl_dbgE("Get media thumbnail path failed!");\r
791                 return -1;\r
792         }\r
793 \r
794         return 0;\r
795 }\r
796 \r
797 int _gl_local_data_move_media(gl_media_s *mitem, const char *dst)\r
798 {\r
799         GL_CHECK_VAL(dst, -1);\r
800         GL_CHECK_VAL(mitem, -1);\r
801         GL_CHECK_VAL(mitem->media_h, -1);\r
802 \r
803         if (media_info_move_media_to_db(mitem->media_h, dst) != MEDIA_CONTENT_ERROR_NONE) {\r
804                 gl_dbgE("Move media thumbnail failed!");\r
805                 return -1;\r
806         }\r
807 \r
808         gl_dbgW("Checkme: use correct api!");\r
809         return 0;\r
810 }\r
811 \r