2 * Copyright 2012 Samsung Electronics Co., Ltd
\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
8 * http://www.tizenopensource.org/license
\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
17 #include "ge-data.h"
\r
18 #include "ge-debug.h"
\r
19 #include "ge-util.h"
\r
21 #include "ge-strings.h"
\r
23 static int ge_all_count = 0;
\r
24 static Eina_List* ge_db_item_list = NULL;
\r
25 static Eina_List* ge_item_selected_list = NULL;
\r
27 #define ALBUM_ALL_LEN 4
\r
28 #define GE_DB_FILE_LEN_MAX 1024
\r
33 static ge_item* __ge_data_calloc_geitem(void)
\r
35 ge_item* gitem = (ge_item*)calloc(1, sizeof(ge_item));
\r
36 GE_CHECK_NULL(gitem);
\r
43 static int __ge_data_free_geitem(ge_item* gitem)
\r
47 _ge_data_type_free_geitem((void **)&(gitem->item));
\r
51 if(gitem->_reserved) {
\r
52 free(gitem->_reserved);
\r
53 gitem->_reserved = NULL;
\r
61 static int __ge_data_free_mtype_items_list(Eina_List **elist)
\r
63 void *current = NULL;
\r
65 if (elist && *elist) {
\r
66 ge_dbg("Clear Mitems list.");
\r
67 EINA_LIST_FREE(*elist, current) {
\r
69 _ge_data_type_free_geitem((void **)¤t);
\r
80 static int __ge_data_free_items_list(void)
\r
82 ge_item* current = NULL;
\r
84 if (ge_db_item_list) {
\r
85 ge_dbg("Clear items list.");
\r
86 EINA_LIST_FREE(ge_db_item_list, current) {
\r
87 __ge_data_free_geitem(current);
\r
91 ge_db_item_list = NULL;
\r
96 static int __ge_data_free_cluster(ge_cluster* gcluster)
\r
98 GE_CHECK_VAL(gcluster, -1);
\r
99 if(gcluster->cluster) {
\r
100 _ge_data_type_free_geitem((void **)&(gcluster->cluster));
\r
101 gcluster->cluster = NULL;
\r
104 if(gcluster->_reserved) {
\r
105 free(gcluster->_reserved);
\r
106 gcluster->_reserved = NULL;
\r
113 static int __ge_data_free_clusters_list(ge_ugdata* ugd)
\r
115 GE_CHECK_VAL(ugd, -1);
\r
116 ge_cluster* current = NULL;
\r
117 Eina_List* tmp_list = NULL;
\r
119 _ge_set_current_album(NULL);
\r
121 if(ugd->cluster_list) {
\r
122 if(ugd->cluster_list->clist) {
\r
123 ge_dbg("Clear clusters list.");
\r
124 tmp_list = ugd->cluster_list->clist;
\r
125 EINA_LIST_FREE(tmp_list, current) {
\r
127 __ge_data_free_cluster(current);
\r
131 ugd->cluster_list->clist = NULL;
\r
134 free(ugd->cluster_list);
\r
135 ugd->cluster_list = NULL;
\r
141 static ge_cluster_list* __ge_data_calloc_clusters_list(void)
\r
143 ge_cluster_list* clus_list = (ge_cluster_list*)calloc(1,
\r
144 sizeof(ge_cluster_list));
\r
145 GE_CHECK_NULL(clus_list);
\r
149 static ge_cluster* __ge_data_calloc_cluster(void)
\r
151 ge_cluster* gcluster = (ge_cluster*)calloc(1, sizeof(ge_cluster));
\r
152 GE_CHECK_NULL(gcluster);
\r
156 /* Create 'All' album */
\r
157 static ge_cluster* __ge_data_new_cluster_all(ge_ugdata* ugd, int count)
\r
159 GE_CHECK_NULL(ugd);
\r
160 ge_cluster* gcluster = __ge_data_calloc_cluster();
\r
161 GE_CHECK_NULL(gcluster);
\r
163 /* Pass -1 to get a mcluster from libmedia-info, not a real record in DB */
\r
164 ge_album_s *cluster = NULL;
\r
165 _ge_data_type_new_album(&cluster);
\r
166 if(cluster == NULL) {
\r
172 cluster->uuid = strdup(GE_ALBUM_ALL_ID);
\r
173 cluster->display_name = strdup(GE_ALBUM_ALL_NAME);
\r
174 cluster->count = count;
\r
175 cluster->type = GE_PHONE;
\r
176 gcluster->cluster = cluster;
\r
177 gcluster->ugd = ugd;
\r
178 gcluster->index = 0;
\r
183 /* Case 1: Carema shot[0], All[1], ...; Case 2: All[0], ... */
\r
184 static int __ge_data_get_clusters_list(ge_ugdata* ugd)
\r
186 GE_CHECK_VAL(ugd, -1);
\r
188 int local_item_cnt = 0;
\r
189 Eina_List *item_list = NULL;
\r
190 ge_album_s *f_data = NULL;
\r
191 ge_cluster *default_album = NULL;
\r
192 ge_cluster* gcluster = NULL;
\r
193 int medias_cnt = 0;
\r
195 ge_filter_s filter;
\r
197 /* Get real albums */
\r
198 memset(&filter, 0x00, sizeof(ge_filter_s));
\r
199 g_strlcpy(filter.cond, GE_CONDITION_IMAGE_VIDEO, CONDITION_LENGTH);
\r
200 filter.collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;
\r
201 filter.sort_type = MEDIA_CONTENT_ORDER_ASC;
\r
202 g_strlcpy(filter.sort_keyword, FOLDER_NAME, KEYWORD_LENGTH);
\r
203 filter.offset = GE_GET_ALL_RECORDS;
\r
204 filter.count = GE_GET_ALL_RECORDS;
\r
205 filter.with_meta = false;
\r
207 err = _ge_local_data_get_album_list(&filter, &item_list);
\r
209 ge_dbgW("No record");
\r
211 __ge_data_free_mtype_items_list(&item_list);
\r
215 Eina_List* clist = ugd->cluster_list->clist;
\r
217 EINA_LIST_FREE(item_list, f_data) {
\r
218 if (f_data == NULL || f_data->uuid == NULL) {
\r
219 /* Invalid data, next one */
\r
220 ge_dbgE("Invalid ge_album_s!");
\r
223 ge_dbg("Cluster ID: %s.", f_data->uuid);
\r
225 /* only image is valid in setas mode. */
\r
226 if (ugd->file_type_mode == GE_File_Select_Type_Image ||
\r
227 ugd->file_type_mode == GE_File_Select_Type_Video) {
\r
228 memset(&filter,0x00,sizeof(ge_filter_s));
\r
229 if(ugd->file_type_mode == GE_File_Select_Type_Image)
\r
230 g_strlcpy(filter.cond, GE_CONDITION_IMAGE,
\r
233 g_strlcpy(filter.cond, GE_CONDITION_VIDEO,
\r
235 filter.sort_type = MEDIA_CONTENT_ORDER_DESC;
\r
236 g_strlcpy(filter.sort_keyword, MEDIA_DISPLAY_NAME,
\r
238 filter.offset = GE_GET_ALL_RECORDS;
\r
239 filter.count = GE_GET_ALL_RECORDS;
\r
240 filter.with_meta = false;
\r
242 err = _ge_local_data_get_media_count(f_data->uuid,
\r
246 f_data->count = medias_cnt;
\r
249 ge_dbgW("minfo_get_cluster_cnt[err:%d]", err);
\r
253 if(f_data->count == 0) {
\r
254 ge_dbgW("local album is empty, skipping it.");
\r
255 _ge_data_type_free_geitem((void **)&f_data);
\r
258 local_item_cnt += f_data->count;
\r
261 gcluster = __ge_data_calloc_cluster();
\r
262 if(gcluster == NULL) {
\r
263 ge_dbgE("__ge_data_calloc_cluster failed!");
\r
264 _ge_data_type_free_geitem((void **)&f_data);
\r
268 gcluster->cluster = f_data;
\r
269 gcluster->ugd = ugd;
\r
270 length += f_data->count;
\r
272 if (_ge_data_is_default_album(GE_ALBUM_MY_NAME, f_data)) {
\r
274 * Default album: Camera Shot
\r
275 * Now Camera Shot is located in Phone.
\r
276 * If user can determine the location of default album,
\r
277 * here we should get the path and check it's in Phone or MMC.
\r
279 default_album = gcluster;
\r
280 clist = eina_list_prepend(clist, gcluster);
\r
282 clist = eina_list_append(clist, gcluster);
\r
284 ugd->cluster_list->clist = clist;
\r
286 ge_dbg("Get local clusters list Done[%d]!", local_item_cnt);
\r
287 if(local_item_cnt) {
\r
288 /* Create "All" album if any file exists */
\r
289 gcluster = __ge_data_new_cluster_all(ugd, local_item_cnt);
\r
290 GE_CHECK_VAL(gcluster, -1);
\r
293 clist = eina_list_append_relative(clist, gcluster,
\r
296 clist= eina_list_prepend(clist, gcluster);
\r
298 ugd->cluster_list->clist = clist;
\r
299 ge_dbg("Cluster All added!");
\r
305 static int __ge_data_get_selected_item_id_list(Eina_List **sel_id_list)
\r
307 GE_CHECK_VAL(sel_id_list, -1);
\r
308 GE_CHECK_VAL(ge_item_selected_list, -1);
\r
309 ge_item *gitem = NULL;
\r
310 char *item_id = NULL;
\r
312 /* Save ID of selected items */
\r
313 EINA_LIST_FREE(ge_item_selected_list, gitem) {
\r
314 if (gitem && gitem->item && gitem->item->uuid) {
\r
315 item_id = strdup(gitem->item->uuid);
\r
316 //ge_dbg("Append item ID: %s", item_id);
\r
317 *sel_id_list = eina_list_append(*sel_id_list,
\r
322 _ge_data_selected_list_finalize();
\r
326 /* Free list of selected IDs */
\r
327 static int __ge_data_free_selected_id_list(Eina_List **sel_id_list)
\r
329 GE_CHECK_VAL(sel_id_list, -1);
\r
330 if (*sel_id_list == NULL) {
\r
331 ge_dbg("sel_id_list is empty!");
\r
336 EINA_LIST_FREE(*sel_id_list, p_id) {
\r
337 if (p_id == NULL) {
\r
338 ge_dbgE("Invalid p_id!");
\r
344 *sel_id_list = NULL;
\r
348 /* Check ID is in the list or not */
\r
349 static bool __ge_data_check_selected_id(Eina_List **sel_id_list, const char *id)
\r
351 GE_CHECK_FALSE(sel_id_list);
\r
352 GE_CHECK_FALSE(id);
\r
353 Eina_List *tmp_elist = NULL;
\r
356 if (eina_list_count(*sel_id_list) == 0) {
\r
357 ge_dbgE("sel_id_list is empty!");
\r
361 EINA_LIST_FOREACH(*sel_id_list, tmp_elist, p_id) {
\r
362 if (p_id == NULL) {
\r
363 ge_dbgE("Invalid p_id!");
\r
366 if (g_strcmp0(id, p_id)) {
\r
371 *sel_id_list = eina_list_remove(*sel_id_list, p_id);
\r
379 int _ge_data_update_items_cnt(ge_ugdata* ugd, ge_cluster *album)
\r
381 GE_CHECK_VAL(album, -1);
\r
382 GE_CHECK_VAL(album->cluster, -1);
\r
383 GE_CHECK_VAL(album->cluster->uuid, -1);
\r
384 GE_CHECK_VAL(ugd, -1);
\r
386 int item_count = 0;
\r
388 ge_filter_s filter;
\r
389 memset(&filter, 0x00, sizeof(ge_filter_s));
\r
390 filter.sort_type = MEDIA_CONTENT_ORDER_DESC;
\r
391 g_strlcpy(filter.sort_keyword, MEDIA_MODIFIED_TIME, KEYWORD_LENGTH);
\r
392 filter.collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;
\r
393 filter.offset = GE_GET_ALL_RECORDS;
\r
394 filter.count = GE_GET_ALL_RECORDS;
\r
395 g_strlcpy(filter.cond, GE_CONDITION_IMAGE_VIDEO, CONDITION_LENGTH);
\r
396 filter.with_meta = false;
\r
398 if(ugd->file_type_mode == GE_File_Select_Type_Image)
\r
399 g_strlcpy(filter.cond, GE_CONDITION_IMAGE, CONDITION_LENGTH);
\r
400 else if(ugd->file_type_mode == GE_File_Select_Type_Video)
\r
401 g_strlcpy(filter.cond, GE_CONDITION_VIDEO, CONDITION_LENGTH);
\r
402 if(g_strcmp0(album->cluster->uuid, GE_ALBUM_ALL_ID)) {
\r
404 err = _ge_local_data_get_media_count(album->cluster->uuid,
\r
408 /* "All albums" album */
\r
409 ge_dbg("all media count");
\r
410 err = _ge_local_data_get_all_media_count(&filter, &item_count);
\r
413 ge_dbgE("Get item count failed(%d)!", err);
\r
417 ge_dbg("cluster media count : old=%d, new=%d", album->cluster->count,
\r
419 album->cluster->count = item_count;
\r
424 int _ge_data_get_clusters_list(ge_ugdata* ugd)
\r
426 GE_CHECK_VAL(ugd, -1);
\r
427 int n_entire_items = 0;
\r
429 __ge_data_free_clusters_list(ugd);
\r
431 ugd->cluster_list = __ge_data_calloc_clusters_list();
\r
432 GE_CHECK_VAL(ugd->cluster_list, -1);
\r
434 n_entire_items = __ge_data_get_clusters_list(ugd);
\r
435 ge_dbg("Total media items count:%d", n_entire_items);
\r
436 /* if error code is returned, negative value is possible */
\r
437 if(n_entire_items <= 0)
\r
443 /* Clear items list */
\r
444 int _ge_data_free_items_list(void)
\r
446 return __ge_data_free_items_list();
\r
449 int _ge_data_get_items_list(ge_ugdata* ugd, ge_cluster *album, int start_pos,
\r
452 GE_CHECK_VAL(album, -1);
\r
453 GE_CHECK_VAL(album->cluster, -1);
\r
454 GE_CHECK_VAL(album->cluster->uuid, -1);
\r
455 GE_CHECK_VAL(ugd, -1);
\r
456 Eina_List* itemlist = NULL;
\r
458 ge_filter_s filter;
\r
460 memset(&filter, 0, sizeof(ge_filter_s));
\r
461 ge_dbg("--start_pos[%d], end_pos[%d]--", start_pos, end_pos);
\r
462 if(ugd->file_type_mode == GE_File_Select_Type_Image) {
\r
463 g_strlcpy(filter.cond, GE_CONDITION_IMAGE, CONDITION_LENGTH);
\r
464 } else if (ugd->file_type_mode == GE_File_Select_Type_Video) {
\r
465 g_strlcpy(filter.cond, GE_CONDITION_VIDEO, CONDITION_LENGTH);
\r
467 g_strlcpy(filter.cond, GE_CONDITION_IMAGE_VIDEO,
\r
471 filter.collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;
\r
472 filter.sort_type = MEDIA_CONTENT_ORDER_DESC;
\r
473 g_strlcpy(filter.sort_keyword, MEDIA_MODIFIED_TIME, KEYWORD_LENGTH);
\r
474 filter.offset = start_pos;
\r
475 filter.count = end_pos - start_pos + 1;
\r
476 filter.with_meta = true;
\r
478 if (start_pos == (GE_FIRST_VIEW_END_POS+1) &&
\r
479 end_pos == GE_GET_UNTIL_LAST_RECORD) {
\r
480 /* Keep medias_elist and medias_cnt unchanged */
\r
481 ge_dbg("Gridview append idler; Keep ge_db_item_list unchanged.");
\r
483 /*Clear item list before new one got */
\r
484 __ge_data_free_items_list();
\r
487 if(g_strcmp0(album->cluster->uuid, GE_ALBUM_ALL_ID)) {
\r
489 ge_dbg("--Real album--");
\r
490 err = _ge_local_data_get_album_media_list(album->cluster->uuid,
\r
491 &filter, &itemlist);
\r
493 /* add "All" album */
\r
494 ge_dbg("--Album All--");
\r
495 err = _ge_local_data_get_all_albums_media_list(&filter,
\r
499 if((err == 0) && (itemlist != NULL)) {
\r
500 ge_media_s *item = NULL;
\r
501 ge_item* gitem = NULL;
\r
502 EINA_LIST_FREE(itemlist, item)
\r
504 if (item == NULL || item->uuid == NULL) {
\r
505 ge_dbgE("Invalid item!");
\r
509 gitem = __ge_data_calloc_geitem();
\r
510 if(gitem == NULL) {
\r
511 ge_dbgE("__ge_data_calloc_geitem() failed");
\r
512 _ge_data_type_free_geitem((void **)&item);
\r
516 gitem->item = item;
\r
518 ge_db_item_list = eina_list_append(ge_db_item_list,
\r
524 ge_all_count = eina_list_count(ge_db_item_list);
\r
528 __ge_data_free_mtype_items_list(&itemlist);
\r
530 if (start_pos == (GE_FIRST_VIEW_END_POS+1) &&
\r
531 end_pos == GE_GET_UNTIL_LAST_RECORD) {
\r
532 /* Keep medias_elist and medias_cnt unchanged */
\r
533 ge_all_count = eina_list_count(ge_db_item_list);
\r
534 ge_dbg("Gridview append idler.");
\r
539 ge_dbg("DB all count : %d, ge_db_item_list=%p", ge_all_count,
\r
545 /* Update items list, especially used in thumbnails edit view */
\r
546 int _ge_data_update_items_list(ge_ugdata* ugd, ge_cluster *album)
\r
548 GE_CHECK_VAL(album, -1);
\r
549 GE_CHECK_VAL(album->cluster, -1);
\r
550 GE_CHECK_VAL(album->cluster->uuid, -1);
\r
551 GE_CHECK_VAL(ugd, -1);
\r
552 Eina_List* itemlist = NULL;
\r
554 ge_dbg("Update content of %s", album->cluster->display_name);
\r
555 int view_mode = _ge_get_view_mode();
\r
556 Eina_List *sel_id_list = NULL;
\r
558 if (view_mode == GE_ThumbnailEdit_Mode &&
\r
559 ugd->file_select_mode != GE_File_Select_One) {
\r
560 ge_dbg("Edit view for multiple selection.");
\r
561 /* Get ID list of selected items */
\r
562 __ge_data_get_selected_item_id_list(&sel_id_list);
\r
564 ge_filter_s filter;
\r
565 memset(&filter, 0x00, sizeof(ge_filter_s));
\r
567 if(ugd->file_type_mode == GE_File_Select_Type_Image) {
\r
568 g_strlcpy(filter.cond, GE_CONDITION_IMAGE, CONDITION_LENGTH);
\r
569 } else if (ugd->file_type_mode == GE_File_Select_Type_Video) {
\r
570 g_strlcpy(filter.cond, GE_CONDITION_VIDEO, CONDITION_LENGTH);
\r
572 g_strlcpy(filter.cond, GE_CONDITION_IMAGE_VIDEO,
\r
576 filter.collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;
\r
577 filter.sort_type = MEDIA_CONTENT_ORDER_DESC;
\r
578 g_strlcpy(filter.sort_keyword, MEDIA_MODIFIED_TIME, KEYWORD_LENGTH);
\r
579 filter.offset = GE_GET_ALL_RECORDS;
\r
580 filter.count = GE_GET_ALL_RECORDS;
\r
581 filter.with_meta = true;
\r
583 /*Clear item list before new one got */
\r
584 __ge_data_free_items_list();
\r
586 if(g_strcmp0(album->cluster->uuid, GE_ALBUM_ALL_ID)) {
\r
587 err = _ge_local_data_get_album_media_list(album->cluster->uuid,
\r
588 &filter, &itemlist);
\r
590 err = _ge_local_data_get_all_albums_media_list(&filter,
\r
594 if ((err != 0) || (itemlist == NULL)) {
\r
595 ge_dbgE("(err != 0) || (itemlist == NULL)");
\r
598 __ge_data_free_mtype_items_list(&itemlist);
\r
603 bool b_selected = false;
\r
604 ge_media_s *item = NULL;
\r
605 ge_item* gitem = NULL;
\r
606 EINA_LIST_FREE(itemlist, item) {
\r
607 if (item == NULL || item->uuid == NULL) {
\r
608 ge_dbgE("Invalid item!");
\r
611 gitem = __ge_data_calloc_geitem();
\r
612 if(gitem == NULL) {
\r
613 ge_dbgE("__ge_data_calloc_geitem() failed");
\r
614 _ge_data_type_free_geitem((void **)&item);
\r
618 gitem->item = item;
\r
620 ge_db_item_list = eina_list_append(ge_db_item_list, gitem);
\r
623 b_selected = __ge_data_check_selected_id(&sel_id_list,
\r
626 b_selected = false;
\r
627 /* Set checkbox state */
\r
628 gitem->checked = true;
\r
629 /* Append gitem to selected list */
\r
630 _ge_data_selected_list_append(gitem);
\r
638 /* Clear list of selected ID */
\r
640 __ge_data_free_selected_id_list(&sel_id_list);
\r
642 ge_all_count = eina_list_count(ge_db_item_list);
\r
643 ge_dbg("DB all count : %d, ge_db_item_list=%p", ge_all_count,
\r
649 int _ge_data_get_first_several_items(ge_ugdata* ugd, ge_cluster *album,
\r
650 ge_item* items[], int *item_count,
\r
651 media_content_order_e sort_type)
\r
653 GE_CHECK_VAL(item_count, -1);
\r
654 GE_CHECK_VAL(items, -1);
\r
655 GE_CHECK_VAL(album, -1);
\r
656 GE_CHECK_VAL(album->cluster, -1);
\r
657 GE_CHECK_VAL(album->cluster->uuid, -1);
\r
658 GE_CHECK_VAL(ugd, -1);
\r
660 Eina_List *item_list = NULL;
\r
661 int result_cnt = 0;
\r
662 ge_media_s *item = NULL;
\r
663 ge_item* gitem = NULL;
\r
666 if (*item_count <= 0) {
\r
667 ge_dbgE("*item_count <= 0");
\r
671 ge_filter_s filter;
\r
672 memset(&filter, 0x00, sizeof(ge_filter_s));
\r
674 if (ugd->file_type_mode == GE_File_Select_Type_Image) {
\r
675 g_strlcpy(filter.cond, GE_CONDITION_IMAGE, CONDITION_LENGTH);
\r
676 } else if (ugd->file_type_mode == GE_File_Select_Type_Video) {
\r
677 g_strlcpy(filter.cond, GE_CONDITION_VIDEO, CONDITION_LENGTH);
\r
679 g_strlcpy(filter.cond, GE_CONDITION_IMAGE_VIDEO,
\r
683 filter.collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;
\r
684 filter.sort_type = sort_type;
\r
685 g_strlcpy(filter.sort_keyword, MEDIA_MODIFIED_TIME, KEYWORD_LENGTH);
\r
687 filter.count = *item_count;
\r
688 filter.with_meta = false;
\r
690 if(g_strcmp0(album->cluster->uuid, GE_ALBUM_ALL_ID)) {
\r
692 err = _ge_local_data_get_album_media_list(album->cluster->uuid,
\r
695 if (err != 0 || item_list == NULL) {
\r
696 ge_dbgE("Get albums media list failed[%d]!", err);
\r
701 err = _ge_local_data_get_all_albums_media_list(&filter,
\r
703 if (err != 0 || item_list == NULL) {
\r
704 ge_dbgE("Get all albums media list failed[%d]!", err);
\r
709 EINA_LIST_FREE(item_list, item) {
\r
710 if (item == NULL) {
\r
711 ge_dbgE("Invalid ge_meida_s!");
\r
715 if(result_cnt <= *item_count) {
\r
717 gitem = __ge_data_calloc_geitem();
\r
718 if (gitem == NULL) {
\r
719 ge_dbgE("__ge_data_calloc_geitem failed!");
\r
720 _ge_data_type_free_geitem((void **)&item);
\r
724 gitem->item = item;
\r
725 items[result_cnt-1] = gitem;
\r
727 _ge_data_type_free_geitem((void **)&item);
\r
732 if(*item_count > result_cnt)
\r
733 *item_count = result_cnt;
\r
735 ge_dbg("First %d items of [%s]", *item_count,
\r
736 album->cluster->display_name);
\r
737 return *item_count;
\r
743 __ge_data_free_mtype_items_list(&item_list);
\r
747 int _ge_data_del_media_id(ge_ugdata* ugd, const char *media_id)
\r
749 GE_CHECK_VAL(media_id, -1);
\r
750 int ret = media_info_delete_from_db(media_id);
\r
752 ge_dbgE("Delete media failed[%d]!", ret);
\r
759 int _ge_data_item_list_remove(ge_item* gitem)
\r
761 GE_CHECK_VAL(gitem, -1);
\r
762 GE_CHECK_VAL(gitem->item, -1);
\r
763 GE_CHECK_VAL(gitem->item->uuid, -1);
\r
764 ge_item* current = NULL;
\r
765 Eina_List* l = NULL;
\r
767 EINA_LIST_FOREACH(ge_db_item_list, l, current) {
\r
769 if (current == NULL || current->item == NULL ||
\r
770 current->item->uuid == NULL) {
\r
771 ge_dbgE("Invalid gitem!");
\r
774 if (!g_strcmp0(current->item->uuid, gitem->item->uuid)) {
\r
775 ge_db_item_list = eina_list_remove(ge_db_item_list,
\r
778 __ge_data_free_geitem(current);
\r
786 int _ge_data_destroy_item(ge_item * gitem)
\r
788 GE_CHECK_VAL(gitem, -1);
\r
790 __ge_data_free_geitem(gitem);
\r
794 int _ge_data_get_item_by_index(ge_item** gitem, int idx)
\r
796 GE_CHECK_VAL(gitem, -1);
\r
798 if (idx > ge_all_count) {
\r
799 ge_dbgW("Get item(%d)failed!", idx);
\r
804 *gitem = eina_list_nth(ge_db_item_list, idx -1);
\r
808 int _ge_data_get_count_all(void)
\r
810 return ge_all_count;
\r
813 int _ge_data_get_selected_item_by_index(ge_item** gitem, int idx)
\r
815 GE_CHECK_VAL(gitem, -1);
\r
817 if (idx > _ge_data_selected_list_count()) {
\r
818 ge_dbgW("Get selected item(%d)failed!", idx);
\r
823 *gitem = eina_list_nth(ge_item_selected_list, idx -1);
\r
827 int _ge_data_selected_list_count(void)
\r
829 return eina_list_count(ge_item_selected_list);
\r
832 Eina_List* _ge_data_get_selected_list(void)
\r
834 return ge_item_selected_list;
\r
837 int _ge_data_selected_list_append(ge_item* gitem)
\r
839 GE_CHECK_VAL(gitem, -1);
\r
841 ge_item_selected_list = eina_list_append(ge_item_selected_list, gitem);
\r
845 int _ge_data_selected_list_remove(ge_item* gitem)
\r
847 GE_CHECK_VAL(gitem, -1);
\r
848 GE_CHECK_VAL(gitem->item, -1);
\r
849 GE_CHECK_VAL(gitem->item->uuid, -1);
\r
850 ge_item* current = NULL;
\r
851 Eina_List* l = NULL;
\r
853 EINA_LIST_FOREACH(ge_item_selected_list, l, current) {
\r
854 if(current == NULL || current->item == NULL ||
\r
855 current->item->uuid == NULL) {
\r
856 ge_dbgE("Invald gitem!");
\r
859 if(!g_strcmp0(current->item->uuid, gitem->item->uuid)) {
\r
860 ge_item_selected_list = eina_list_remove(ge_item_selected_list,
\r
868 int _ge_data_selected_list_finalize(void)
\r
870 ge_item* gitem = NULL;
\r
872 EINA_LIST_FREE(ge_item_selected_list, gitem) {
\r
874 gitem->checked = false;
\r
877 ge_item_selected_list = NULL;
\r
882 * Check it's default album[Camera shot] or not
\r
884 bool _ge_data_is_default_album(const char *match_folder, ge_album_s *album)
\r
886 GE_CHECK_FALSE(album);
\r
887 GE_CHECK_FALSE(album->display_name);
\r
888 GE_CHECK_FALSE(match_folder);
\r
891 /* Name is 'Camera shot' and folder locates in Phone */
\r
892 ret = g_strcmp0(album->display_name, match_folder);
\r
893 if (ret == 0 && album->type == GE_PHONE) {
\r
894 ge_dbg("Full path: %s", album->path);
\r
895 /* Get parent directory */
\r
896 char *parent_path = ecore_file_dir_get(album->path);
\r
897 GE_CHECK_FALSE(parent_path);
\r
898 ge_dbg("Parent path: %s", parent_path);
\r
900 /* Parent directory is same as Phone root path, it's default folder */
\r
901 ret = g_strcmp0(parent_path, GE_ROOT_PATH_PHONE);
\r
902 GE_IF_FREE_MEM(parent_path)
\r
905 ge_dbgW("Default folder!");
\r
913 bool _ge_data_is_root_path(const char *path)
\r
915 GE_CHECK_FALSE(path);
\r
917 if(!g_strcmp0(GE_ROOT_PATH_PHONE, path) ||
\r
918 !g_strcmp0(GE_ROOT_PATH_MMC, path)) {
\r
919 ge_dbg("Root path: %s", path);
\r
926 int _ge_data_init(ge_ugdata* ugd)
\r
928 ge_dbg("Connect to DB!");
\r
929 GE_CHECK_VAL(ugd, -1);
\r
930 int err = _ge_local_data_connect();
\r
932 ge_dbgE("Local connection failed[%d]!", err);
\r
939 int _ge_data_finalize(ge_ugdata* ugd)
\r
941 ge_dbg("Free memory and disconnect with DB!");
\r
942 GE_CHECK_VAL(ugd, -1);
\r
943 __ge_data_free_clusters_list(ugd);
\r
944 __ge_data_free_items_list();
\r
946 int err = _ge_local_data_disconnect();
\r
948 ge_dbgE("Local disconnection failed[%d]!", err);
\r