4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Hyunjun Ko <zzoon.ko@samsung.com>, Haejeong Kim <backto.kim@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
22 #include <glib-object.h>
23 #include <drm-service.h>
25 #include <sys/types.h>
27 #include <media-thumbnail.h>
28 #include "media-svc-debug.h"
29 #include "media-svc-api.h"
30 #include "media-svc-thumb.h"
31 #include "media-svc-db-util.h"
32 #include "visual-svc-debug.h"
33 #include "visual-svc-util.h"
34 #include "media-svc-db.h"
35 #include "media-svc-util.h"
36 #include "media-svc-types.h"
37 #include "visual-svc-error.h"
39 #ifdef _PERFORMANCE_CHECK_
40 double g_insertdb = 0;
43 long start = 0L, end = 0L;
46 static __thread GList *g_insert_sql_list = NULL;
47 static __thread GList *g_move_sql_list = NULL;
49 const char *mb_svc_media_order[5] = {
51 "display_name COLLATE NOCASE DESC",
52 "display_name COLLATE NOCASE ASC",
57 const char *mb_svc_folder_order[5] = {
59 "folder_name COLLATE NOCASE DESC",
60 "folder_name COLLATE NOCASE ASC",
68 char dir_full_path[MB_SVC_DIR_PATH_LEN_MAX+1];
69 } mb_svc_sync_param_s;
71 #define MB_SVC_DB_DEFAULT_GET_ALL_RECORDS -1 /* get all records, not limit on start position */
72 #define MB_SVC_DB_GET_UNTIL_LAST_RECORD -1 /* get all records until last item */
74 static int __mb_svc_folder_by_path_iter_start(MediaSvcHandle *mb_svc_handle, char *parent_path, mb_svc_iterator_s *mb_svc_iterator);
75 static int __mb_svc_get_folder_record_by_path_info(MediaSvcHandle *mb_svc_handle, const char *uri, char *display_name, minfo_store_type storage_type, mb_svc_folder_record_s *record);
76 static int __mb_svc_get_folder_record_by_full_path(MediaSvcHandle *mb_svc_handle, const char *folder_full_path, mb_svc_folder_record_s *folder_record);
77 static int __mb_svc_get_media_id_by_fid_name(MediaSvcHandle *mb_svc_handle, const char *folder_id, char *display_name, char *media_id);
78 static int __mb_svc_get_media_list_by_folder_id(MediaSvcHandle *mb_svc_handle, const char *folder_id, GList **p_record_list, int valid);
79 static int __mb_svc_delete_media_records_list(MediaSvcHandle *mb_svc_handle, GList *p_record_list);
80 static int __mb_svc_delete_tag_by_id(MediaSvcHandle *mb_svc_handle, const int tag_id);
81 static int __mb_svc_update_tag(MediaSvcHandle *mb_svc_handle, int tag_id, const char *tag_name);
82 static int __mb_svc_update_tagmap(MediaSvcHandle *mb_svc_handle, int src_tag_id, int dst_tag_id);
83 static int __mb_svc_update_tagmap_by_media_id(MediaSvcHandle *mb_svc_handle, const char *media_id, int src_tag_id, int dst_tag_id);
84 static int __mb_svc_get_media_cnt_by_tagid(MediaSvcHandle *mb_svc_handle, int tag_id);
86 int mb_svc_insert_items(MediaSvcHandle *mb_svc_handle)
90 int length = g_list_length(g_insert_sql_list);
92 for (i = 0; i < length; i++) {
93 char *sql = (char*)g_list_nth_data(g_insert_sql_list, i);
94 mb_svc_query_sql(mb_svc_handle, sql);
97 mb_svc_sql_list_release(&g_insert_sql_list);
102 int mb_svc_move_items(MediaSvcHandle *mb_svc_handle)
106 int length = g_list_length(g_move_sql_list);
108 for (i = 0; i < length; i++) {
109 char *sql = (char*)g_list_nth_data(g_move_sql_list, i);
110 mb_svc_query_sql(mb_svc_handle, sql);
113 mb_svc_sql_list_release(&g_move_sql_list);
119 mb_svc_insert_file_batch(MediaSvcHandle *mb_svc_handle, const char *file_full_path, minfo_file_type content_type)
121 char dir_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
122 char dir_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
123 char file_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
124 mb_svc_folder_record_s folder_record = {"",};
125 mb_svc_media_record_s media_record = {"",};
126 mb_svc_image_meta_record_s image_record = {0,};
127 mb_svc_video_meta_record_s video_record = {0,};
128 int folder_modified_date = 0;
133 char *folder_sql = NULL;
134 char *insert_sql = NULL;
135 char *meta_sql = NULL;
137 if (file_full_path == NULL ) {
138 mb_svc_debug("file_full_path == NULL || thumb_path == NULL\n");
139 return MB_SVC_ERROR_INVALID_PARAMETER;
142 mb_svc_debug("file_full_path is %s\n", file_full_path);
143 /* 1. get file detail */
144 _mb_svc_get_file_parent_path(file_full_path, dir_path);
145 mb_svc_debug("dir_path is %s\n", dir_path);
147 folder_modified_date = _mb_svc_get_file_dir_modified_date(dir_path);
148 mb_svc_debug("folder_modified_date is %d\n", folder_modified_date);
150 /* 2. insert or update folder table */
151 ret = __mb_svc_get_folder_record_by_full_path(mb_svc_handle, dir_path, &folder_record);
153 mb_svc_debug("no any record in %s", dir_path);
154 store_type = _mb_svc_get_store_type_by_full(file_full_path);
156 if (store_type == MB_SVC_ERROR_INTERNAL) {
157 mb_svc_debug("Failed to get storage type : %s",
159 return MB_SVC_ERROR_INVALID_PARAMETER;
161 mb_svc_debug("store_type is %d\n", store_type);
163 _mb_svc_get_dir_display_name(dir_path, dir_display_name);
164 mb_svc_debug("dir_display_name is %s\n", dir_display_name);
166 folder_record.modified_date = folder_modified_date;
167 folder_record.storage_type = store_type;
168 strncpy(folder_record.uri, dir_path, MB_SVC_DIR_PATH_LEN_MAX + 1);
169 strncpy(folder_record.display_name, dir_display_name,
170 MB_SVC_FILE_NAME_LEN_MAX + 1);
171 strncpy(folder_record.web_account_id, "", MB_SVC_ARRAY_LEN_MAX + 1);
172 strncpy(folder_record.web_album_id, "", MB_SVC_ARRAY_LEN_MAX + 1);
173 folder_record.lock_status = 0;
176 ("no record in %s, ready insert the folder record into db\n",
179 ret = mb_svc_insert_record_folder(mb_svc_handle, &folder_record);
182 ("mb_svc_insert_record_folder failed (%d)\n", ret);
186 /* there is already matched folder record in folder table, update it if the file is modified */
188 ("folder_record info: uuid is %s,uri is %s,display_name is %s,modified_date is %d,web_account_id is %s,store_type is %d\n",
189 folder_record.uuid, folder_record.uri,
190 folder_record.display_name, folder_record.modified_date,
191 folder_record.web_account_id, folder_record.storage_type);
193 ("existing file date in folder record is %d, new file date is %d",
194 folder_record.modified_date, folder_modified_date);
196 store_type = folder_record.storage_type;
197 if (folder_record.modified_date < folder_modified_date) { /* the file is updated */
198 mb_svc_debug("directory %s is modified", dir_path);
199 folder_record.modified_date = folder_modified_date;
200 ret = mb_svc_update_record_folder_sql(&folder_record, &folder_sql);
203 ("mb_svc_update_record_folder_sql fails(%d)",
207 mb_svc_sql_list_add(&g_insert_sql_list, &folder_sql);
211 /* 3. insert media table, before insert a record, check whether the same record has existed. */
212 mb_svc_debug("ready insert file info into media table\n");
213 mb_svc_debug("file_full_path is %s\n", file_full_path);
215 strncpy(media_record.path, file_full_path, sizeof(media_record.path));
216 _mb_svc_get_file_display_name(file_full_path, file_display_name);
217 mb_svc_debug("file_display_name is %s\n", file_display_name);
218 strncpy(media_record.display_name, file_display_name,
219 MB_SVC_FILE_NAME_LEN_MAX + 1);
221 media_record.content_type = content_type;
222 media_record.rate = 0;
224 ("ready get file date for insert file info into media table\n");
225 media_record.modified_date =
226 _mb_svc_get_file_dir_modified_date(file_full_path);
227 is_drm = (drm_svc_is_drm_file(file_full_path) == DRM_TRUE);
229 ret = _mb_svc_thumb_generate_hash_name(file_full_path,
230 media_record.thumbnail_path,
231 MB_SVC_FILE_PATH_LEN_MAX + 1);
234 mb_svc_debug("_mb_svc_thumb_generate_hash_name failed : %d", ret);
238 /* 4. if it's image file, insert into image_meta table */
239 if (media_record.content_type == MINFO_ITEM_IMAGE) { /* it's image file, insert into image_meta table */
241 ("ready insert file info into media table,file date is %d\n",
242 media_record.modified_date);
244 bool thumb_done = FALSE;
245 ret = mb_svc_get_image_meta(mb_svc_handle, file_full_path, &image_record, &thumb_done);
248 mb_svc_debug("mb_svc_get_image_meta failed\n");
252 strncpy(media_record.folder_uuid, folder_record.uuid, MB_SVC_UUID_LEN_MAX + 1);
254 ret = mb_svc_insert_record_media_sql(&media_record, store_type, &insert_sql);
257 mb_svc_debug("mb_svc_insert_record_media_sql fails(%d)",
262 mb_svc_sql_list_add(&g_insert_sql_list, &insert_sql);
264 strncpy(image_record.media_uuid, media_record.media_uuid, MB_SVC_UUID_LEN_MAX + 1);
267 mb_svc_insert_record_image_meta_sql(&image_record, store_type, &meta_sql);
270 mb_svc_debug("mb_svc_insert_record_image_meta_sql failed(%d)\n", ret);
274 mb_svc_sql_list_add(&g_insert_sql_list, &meta_sql);
276 /* 5 if video, insert video_meta and bookmark table */
277 else if (media_record.content_type == MINFO_ITEM_VIDEO) { /* it's video file, insert into vidoe table */
279 ("ready insert file info into media table,file date is %d\n",
280 media_record.modified_date);
282 video_record.last_played_time = 0;
283 video_record.latitude = 0.0;
284 video_record.longitude = 0.0;
286 ret = mb_svc_get_video_meta(mb_svc_handle, file_full_path, &video_record);
288 mb_svc_debug("mb_svc_get_video_meta failed\n");
292 strncpy(media_record.folder_uuid, folder_record.uuid, MB_SVC_UUID_LEN_MAX + 1);
294 ret = mb_svc_insert_record_media_sql(&media_record, store_type, &insert_sql);
296 mb_svc_debug("mb_svc_insert_record_media_sql fails(%d)",
300 mb_svc_sql_list_add(&g_insert_sql_list, &insert_sql);
302 strncpy(video_record.media_uuid, media_record.media_uuid, MB_SVC_UUID_LEN_MAX + 1);
305 mb_svc_insert_record_video_meta_sql(&video_record, store_type, &meta_sql);
308 ("mb_svc_insert_record_video_meta_sql failed(%d)\n", ret);
311 mb_svc_sql_list_add(&g_insert_sql_list, &meta_sql);
314 /* Extracting thumbnail */
315 ret = thumbnail_request_from_db(file_full_path, media_record.thumbnail_path, sizeof(media_record.thumbnail_path));
317 mb_svc_debug("thumbnail_request_from_db failed: %d", ret);
319 mb_svc_debug("thumbnail_request_from_db success: %s", media_record.thumbnail_path);
326 mb_svc_insert_file(MediaSvcHandle *mb_svc_handle, const char *file_full_path, minfo_file_type content_type)
328 char dir_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
329 char thumb_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
330 char dir_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
331 char file_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
332 mb_svc_folder_record_s folder_record = {"",};
333 mb_svc_media_record_s media_record = {"",};
334 mb_svc_image_meta_record_s image_record = {0,};
335 mb_svc_video_meta_record_s video_record = {0,};
336 int folder_modified_date = 0;
340 GList *insert_sql_list = NULL;
341 char *folder_sql = NULL;
342 char *insert_sql = NULL;
343 char *meta_sql = NULL;
344 int insert_new_folder = 0;
346 if (file_full_path == NULL ) {
347 mb_svc_debug("file_full_path == NULL || thumb_path == NULL\n");
348 return MB_SVC_ERROR_INVALID_PARAMETER;
351 mb_svc_debug("file_full_path is %s\n", file_full_path);
352 /* 1. get file detail */
353 _mb_svc_get_file_parent_path(file_full_path, dir_path);
354 mb_svc_debug("dir_path is %s\n", dir_path);
356 folder_modified_date = _mb_svc_get_file_dir_modified_date(dir_path);
357 mb_svc_debug("folder_modified_date is %d\n", folder_modified_date);
359 /* 2. insert or update folder table */
360 ret = __mb_svc_get_folder_record_by_full_path(mb_svc_handle, dir_path, &folder_record);
362 mb_svc_debug("no any record in %s", dir_path);
363 store_type = _mb_svc_get_store_type_by_full(file_full_path);
365 if (store_type == MB_SVC_ERROR_INTERNAL) {
366 mb_svc_debug("Failed to get storage type : %s",
368 return MB_SVC_ERROR_INVALID_PARAMETER;
370 mb_svc_debug("store_type is %d\n", store_type);
372 _mb_svc_get_dir_display_name(dir_path, dir_display_name);
373 mb_svc_debug("dir_display_name is %s\n", dir_display_name);
375 folder_record.modified_date = folder_modified_date;
376 folder_record.storage_type = store_type;
377 strncpy(folder_record.uri, dir_path, MB_SVC_DIR_PATH_LEN_MAX + 1);
378 strncpy(folder_record.display_name, dir_display_name,
379 MB_SVC_FILE_NAME_LEN_MAX + 1);
380 strncpy(folder_record.web_account_id, "", MB_SVC_ARRAY_LEN_MAX + 1);
381 strncpy(folder_record.web_album_id, "", MB_SVC_ARRAY_LEN_MAX + 1);
382 folder_record.lock_status = 0;
385 ("no record in %s, ready insert the folder record into db\n",
388 insert_new_folder = 1;
390 /* there is already matched folder record in folder table, update it if the file is modified */
392 ("folder_record info: uuid is %s,uri is %s,display_name is %s,modified_date is %d,web_account_id is %s,store_type is %d\n",
393 folder_record.uuid, folder_record.uri,
394 folder_record.display_name, folder_record.modified_date,
395 folder_record.web_account_id, folder_record.storage_type);
397 ("existing file date in folder record is %d, new file date is %d",
398 folder_record.modified_date, folder_modified_date);
400 store_type = folder_record.storage_type;
401 if (folder_record.modified_date < folder_modified_date) { /* the file is updated */
402 mb_svc_debug("directory %s is modified", dir_path);
403 folder_record.modified_date = folder_modified_date;
404 ret = mb_svc_update_record_folder_sql(&folder_record, &folder_sql);
407 ("mb_svc_update_record_folder_sql fails(%d)",
411 mb_svc_sql_list_add(&insert_sql_list, &folder_sql);
415 /* 3. insert media table, before insert a record, check whether the same record has existed. */
416 mb_svc_debug("ready insert file info into media table\n");
417 mb_svc_debug("file_full_path is %s\n", file_full_path);
419 strncpy(media_record.path, file_full_path, sizeof(media_record.path));
420 _mb_svc_get_file_display_name(file_full_path, file_display_name);
421 mb_svc_debug("file_display_name is %s\n", file_display_name);
422 strncpy(media_record.display_name, file_display_name,
423 MB_SVC_FILE_NAME_LEN_MAX + 1);
425 media_record.content_type = content_type;
426 media_record.rate = 0;
428 ("ready get file date for insert file info into media table\n");
429 media_record.modified_date =
430 _mb_svc_get_file_dir_modified_date(file_full_path);
431 is_drm = (drm_svc_is_drm_file(file_full_path) == DRM_TRUE);
433 /* 4. if it's image file, insert into image_meta table */
434 if (media_record.content_type == MINFO_ITEM_IMAGE) { /* it's image file, insert into image_meta table */
436 ("ready insert file info into media table,file date is %d\n",
437 media_record.modified_date);
439 #ifdef _PERFORMANCE_CHECK_
440 start = mediainfo_get_debug_time();
443 bool thumb_done = FALSE;
444 ret = mb_svc_get_image_meta(mb_svc_handle, file_full_path, &image_record, &thumb_done);
446 #ifdef _PERFORMANCE_CHECK_
447 end = mediainfo_get_debug_time();
449 g_meta += ((double)(end - start) / (double)CLOCKS_PER_SEC);
450 mb_svc_debug("Meta : %f", g_meta);
454 mb_svc_debug("mb_svc_get_image_meta failed\n");
455 mb_svc_sql_list_release(&insert_sql_list);
459 ret = mb_svc_sqlite3_begin_trans(mb_svc_handle);
461 mb_svc_debug("mb_svc_sqlite3_begin_trans failed\n");
462 mb_svc_sql_list_release(&insert_sql_list);
466 if (insert_new_folder == 1) {
468 ret = mb_svc_insert_record_folder_sql(&folder_record, &folder_sql);
471 ("mb_svc_insert_record_folder_sql failed (%d)\n", ret);
475 mb_svc_sql_list_add(&insert_sql_list, &folder_sql);
478 strncpy(media_record.folder_uuid, folder_record.uuid, MB_SVC_UUID_LEN_MAX + 1);
480 ret = mb_svc_insert_record_media_sql(&media_record, store_type, &insert_sql);
483 mb_svc_debug("mb_svc_insert_record_media_sql fails(%d)",
485 mb_svc_sql_list_release(&insert_sql_list);
489 mb_svc_sql_list_add(&insert_sql_list, &insert_sql);
491 strncpy(image_record.media_uuid, media_record.media_uuid, MB_SVC_UUID_LEN_MAX + 1);
494 mb_svc_insert_record_image_meta_sql(&image_record, store_type, &meta_sql);
497 mb_svc_debug("mb_svc_insert_record_image_meta_sql failed(%d)\n", ret);
498 mb_svc_sql_list_release(&insert_sql_list);
502 mb_svc_sql_list_add(&insert_sql_list, &meta_sql);
505 /* 5 if video, insert video_meta and bookmark table */
506 else if (media_record.content_type == MINFO_ITEM_VIDEO) { /* it's video file, insert into vidoe table */
509 ("ready insert file info into media table,file date is %d\n",
510 media_record.modified_date);
512 video_record.last_played_time = 0;
513 video_record.latitude = 0.0;
514 video_record.longitude = 0.0;
516 ret = mb_svc_get_video_meta(mb_svc_handle, file_full_path, &video_record);
518 mb_svc_debug("mb_svc_get_video_meta failed\n");
519 mb_svc_sql_list_release(&insert_sql_list);
523 ret = mb_svc_sqlite3_begin_trans(mb_svc_handle);
525 mb_svc_debug("mb_svc_sqlite3_begin_trans failed\n");
526 mb_svc_sql_list_release(&insert_sql_list);
530 if (insert_new_folder == 1) {
532 ret = mb_svc_insert_record_folder_sql(&folder_record, &folder_sql);
535 ("mb_svc_insert_record_folder_sql failed (%d)\n", ret);
539 mb_svc_sql_list_add(&insert_sql_list, &folder_sql);
542 strncpy(media_record.folder_uuid, folder_record.uuid, MB_SVC_UUID_LEN_MAX + 1);
544 ret = mb_svc_insert_record_media_sql(&media_record, store_type, &insert_sql);
546 mb_svc_debug("mb_svc_insert_record_media_sql fails(%d)",
548 mb_svc_sql_list_release(&insert_sql_list);
551 mb_svc_sql_list_add(&insert_sql_list, &insert_sql);
553 strncpy(video_record.media_uuid, media_record.media_uuid, MB_SVC_UUID_LEN_MAX + 1);
556 mb_svc_insert_record_video_meta_sql(&video_record, store_type, &meta_sql);
559 ("mb_svc_insert_record_video_meta_sql failed(%d)\n", ret);
560 mb_svc_sql_list_release(&insert_sql_list);
563 mb_svc_sql_list_add(&insert_sql_list, &meta_sql);
566 /* Start transaction */
568 int length = g_list_length(insert_sql_list);
570 #ifdef _PERFORMANCE_CHECK_
571 start = mediainfo_get_debug_time();
574 for (i = 0; i < length; i++) {
575 char *sql = (char *)g_list_nth_data(insert_sql_list, i);
576 ret = mb_svc_query_sql(mb_svc_handle, sql);
580 ("mb_svc_query_sql failed.. Now start to rollback\n");
581 mb_svc_sqlite3_rollback_trans(mb_svc_handle);
582 mb_svc_sql_list_release(&insert_sql_list);
587 ret = mb_svc_sqlite3_commit_trans(mb_svc_handle);
590 ("mb_svc_sqlite3_commit_trans failed.. Now start to rollback\n");
591 mb_svc_sqlite3_rollback_trans(mb_svc_handle);
592 mb_svc_sql_list_release(&insert_sql_list);
596 /* Extracting thumbnail */
597 ret = thumbnail_request_from_db(file_full_path, thumb_path, sizeof(thumb_path));
599 mb_svc_debug("thumbnail_request_from_db failed: %d", ret);
601 mb_svc_debug("thumbnail_request_from_db success: %s", thumb_path);
604 #ifdef _PERFORMANCE_CHECK_
605 end = mediainfo_get_debug_time();
607 g_insertdb += ((double)(end - start) / (double)CLOCKS_PER_SEC);
608 mb_svc_debug("Insert : %f", g_insertdb);
610 ("========== End of Performance check of one item ==============\n\n");
613 /* Release sql list */
614 mb_svc_sql_list_release(&insert_sql_list);
620 int mb_svc_delete_file(MediaSvcHandle *mb_svc_handle, const char *file_full_path)
622 char dir_full_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
623 char file_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
624 mb_svc_folder_record_s folder_record = {"",};
625 mb_svc_media_record_s media_record = {"",};
628 int media_record_cnt = 0;
629 int folder_modified_date = 0;
631 if (file_full_path == NULL) {
632 mb_svc_debug("file_full_path == NULL \n");
633 return MB_SVC_ERROR_INVALID_PARAMETER;
636 mb_svc_debug("Delete start : %s", file_full_path);
638 _mb_svc_get_file_parent_path(file_full_path, dir_full_path);
639 ret = __mb_svc_get_folder_record_by_full_path(mb_svc_handle, dir_full_path, &folder_record);
641 mb_svc_debug(" file directory %s doesn't exist ",
643 return MB_SVC_ERROR_DIR_NOT_EXSITED;
646 _mb_svc_get_file_display_name(file_full_path, file_display_name);
647 /* if the folder has at least one file */
649 mb_svc_get_media_record_by_full_path(mb_svc_handle, file_full_path, &media_record);
653 ("mb_svc_get_media_record_by_full_path fail:file_full_path is %s ",
658 /* delete the matched file info in media table */
659 ret = mb_svc_delete_record_media_by_id(mb_svc_handle, media_record.media_uuid);
662 ("mb_svc_delete_record_media fail:folder id is %s,file name is %s ",
663 media_record.folder_uuid, file_display_name);
667 ("mb_svc_delete_record_media sccceed,media_id is %s,file type is %d, path is %s\n",
668 media_record.media_uuid, media_record.content_type, media_record.path);
670 #ifdef DELETE_FOLDER_RECORD_IF_NO_FILE_IN /* the media file is deleted succeed, then verify if the folder has no left files */
671 media_record_cnt = mb_svc_get_folder_content_count_by_folder_id(mb_svc_handle, media_record.folder_uuid); /* after delete the media file,get the left media file count in the specified folder */
672 mb_svc_debug("media_record_cnt after delete the media file is %d\n",
674 if (media_record_cnt == 0) { /* the folder has no left files, so delete the folder record */
675 ret = mb_svc_delete_record_folder_by_id(mb_svc_handle, folder_record.uuid);
677 mb_svc_debug("mb_svc_delete_record_older fail:%s\n",
681 } else { /* update old folder modified date */
682 folder_modified_date =
683 _mb_svc_get_file_dir_modified_date(dir_full_path);
684 mb_svc_debug("folder_modified_date is %d\n",
685 folder_modified_date);
686 if (folder_record.modified_date < folder_modified_date) {
687 mb_svc_debug("directory %s is modified", dir_full_path);
688 folder_record.modified_date = folder_modified_date;
689 mb_svc_update_record_folder(mb_svc_handle, &folder_record);
694 /* delete thumbnail file */
695 _mb_svc_thumb_delete(file_full_path);
697 /* delete file info in image_meta table & (video_meta table and bookmark table if it's video file) */
699 mb_svc_delete_bookmark_meta_by_media_id(mb_svc_handle, media_record.media_uuid,
700 media_record.content_type);
703 ("mb_svc_delete_record_video_or_image_by_media_id fail:media id is %d\n",
711 mb_svc_rename_file(MediaSvcHandle *mb_svc_handle,
712 const char *old_file_full_path,
713 const char *new_file_full_path,
714 minfo_file_type content_type,
719 char old_file_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
720 char new_file_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
721 char old_dir_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
722 mb_svc_media_record_s media_record = {"",};
723 mb_svc_folder_record_s folder_record = {"",};
725 int folder_modified_date = 0;
726 char old_media_uuid[MB_SVC_UUID_LEN_MAX + 1] = {0,};
728 if (old_file_full_path == NULL || new_file_full_path == NULL) {
730 ("old_file_full_path==NULL || new_file_full_path==NULL\n");
731 return MB_SVC_ERROR_INVALID_PARAMETER;
734 mb_svc_debug("old file_full_path is %s, new file full path is %s\n",
735 old_file_full_path, new_file_full_path);
737 _mb_svc_get_file_display_name(old_file_full_path,
738 old_file_display_name);
739 _mb_svc_get_file_parent_path(old_file_full_path, old_dir_path);
741 ret = __mb_svc_get_folder_record_by_full_path(mb_svc_handle, old_dir_path, &folder_record);
743 mb_svc_debug(" file directory %s doesn't exist ", old_dir_path);
744 return MB_SVC_ERROR_DIR_NOT_EXSITED;
748 mb_svc_get_media_record_by_fid_name(mb_svc_handle, folder_record.uuid,
749 old_file_display_name,
752 strncpy(old_media_uuid, media_record.media_uuid, MB_SVC_UUID_LEN_MAX + 1);
754 _mb_svc_get_file_display_name(new_file_full_path,
755 new_file_display_name);
756 mb_svc_debug("new file_display_name is %s\n",
757 new_file_display_name);
759 snprintf(media_record.path, sizeof(media_record.path), "%s/%s",
760 folder_record.uri, new_file_display_name);
761 strncpy(media_record.display_name, new_file_display_name,
762 MB_SVC_FILE_NAME_LEN_MAX + 1);
764 media_record.modified_date =
765 _mb_svc_get_file_dir_modified_date(new_file_full_path);
767 /* thumb file rename */
768 _mb_svc_thumb_rename(old_file_full_path, new_file_full_path,
770 strncpy(media_record.thumbnail_path, thumb_path,
771 MB_SVC_FILE_PATH_LEN_MAX + 1);
773 mb_svc_update_record_media(mb_svc_handle, &media_record);
776 folder_modified_date = _mb_svc_get_file_dir_modified_date(old_dir_path);
777 mb_svc_debug("folder_modified_date is %d\n", folder_modified_date);
778 if (folder_record.modified_date < folder_modified_date) {
779 mb_svc_debug("directory %s is modified", old_dir_path);
780 folder_record.modified_date = folder_modified_date;
781 mb_svc_update_record_folder(mb_svc_handle, &folder_record);
788 mb_svc_move_file(MediaSvcHandle *mb_svc_handle,
789 const char *old_file_full_path,
790 const char *new_file_full_path,
791 minfo_file_type content_type,
798 if (old_file_full_path == NULL || new_file_full_path == NULL
799 || thumb_path == NULL) {
801 ("old_file_full_path==NULL || new_file_full_path==NULL || thumb_path == NULL\n");
802 return MB_SVC_ERROR_INVALID_PARAMETER;
804 mb_svc_debug("old file_full_path is %s, new file full path is %s\n",
805 old_file_full_path, new_file_full_path);
807 char old_file_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
808 char new_file_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
809 char old_dir_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
810 char new_dir_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
812 mb_svc_folder_record_s src_folder_record = {"",};
813 mb_svc_folder_record_s dst_folder_record = {"",};
814 mb_svc_media_record_s media_record = {"",};
815 int src_clus_cont_cnt = 0;
816 int src_clus_modified_date = 0;
817 int dst_clus_modified_date = 0;
818 char src_cluster_uuid[MB_SVC_UUID_LEN_MAX + 1] = {0,};
820 GList *move_sql_list = NULL;
821 char *insert_new_folder_sql = NULL;
822 char *update_old_folder_sql = NULL;
823 char *update_new_folder_sql = NULL;
824 char *delete_folder_sql = NULL;
825 char *media_sql = NULL;
826 int insert_new_folder = 0;
828 _mb_svc_get_file_display_name(old_file_full_path, old_file_display_name);
829 _mb_svc_get_file_parent_path(old_file_full_path, old_dir_path);
831 _mb_svc_get_file_display_name(new_file_full_path, new_file_display_name);
832 _mb_svc_get_file_parent_path(new_file_full_path, new_dir_path);
834 ret = __mb_svc_get_folder_record_by_full_path(mb_svc_handle, new_dir_path, &dst_folder_record);
836 mb_svc_debug("Directory %s is NOT in DB", new_dir_path);
837 mb_svc_debug("Now making new dir %s", new_dir_path);
840 char new_dir_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
841 int folder_modified_date = 0;
843 store_type = _mb_svc_get_store_type_by_full(new_file_full_path);
845 if (store_type == MB_SVC_ERROR_INTERNAL) {
846 mb_svc_debug("Failed to get storage type : %s",
848 return MB_SVC_ERROR_INVALID_PARAMETER;
851 _mb_svc_get_dir_display_name(new_dir_path, new_dir_display_name);
852 mb_svc_debug("dir_display_name is %s\n", new_dir_display_name);
854 folder_modified_date = _mb_svc_get_file_dir_modified_date(new_dir_path);
856 dst_folder_record.modified_date = folder_modified_date;
857 dst_folder_record.storage_type = store_type;
858 strncpy(dst_folder_record.uri, new_dir_path, MB_SVC_DIR_PATH_LEN_MAX + 1);
859 strncpy(dst_folder_record.display_name, new_dir_display_name,
860 MB_SVC_FILE_NAME_LEN_MAX + 1);
861 strncpy(dst_folder_record.web_account_id, "", MB_SVC_ARRAY_LEN_MAX + 1);
862 strncpy(dst_folder_record.web_album_id, "", MB_SVC_ARRAY_LEN_MAX + 1);
863 dst_folder_record.lock_status = 0;
865 insert_new_folder = 1;
868 ret = mb_svc_get_media_record_by_full_path(mb_svc_handle, old_file_full_path, &media_record);
870 mb_svc_debug("mb_svc_get_media_record_by_full_path fails : %d", ret);
874 strncpy(src_cluster_uuid, media_record.folder_uuid, MB_SVC_UUID_LEN_MAX + 1);
876 strncpy(media_record.folder_uuid, dst_folder_record.uuid, MB_SVC_UUID_LEN_MAX + 1);
877 strncpy(media_record.path, new_file_full_path, sizeof(media_record.path));
878 strncpy(media_record.display_name, new_file_display_name, sizeof(media_record.display_name));
879 media_record.modified_date = _mb_svc_get_file_dir_modified_date(new_file_full_path);
881 _mb_svc_thumb_move(old_file_full_path, new_file_full_path, thumb_path);
883 strncpy(media_record.thumbnail_path, thumb_path, sizeof(media_record.thumbnail_path));
885 /* verify if the old folder has no files left */
887 mb_svc_get_folder_content_count_by_folder_id(mb_svc_handle, src_cluster_uuid);
889 if (src_clus_cont_cnt == 1) {
891 ret = mb_svc_delete_record_folder_sql(src_cluster_uuid, &delete_folder_sql);
893 mb_svc_debug("mb_svc_delete_record_folder_sql fail:%d\n",
897 mb_svc_sql_list_add(&move_sql_list, &delete_folder_sql);
898 } else { /* update modified date */
899 src_clus_modified_date =
900 _mb_svc_get_file_dir_modified_date(old_dir_path);
901 mb_svc_get_folder_record_by_id(mb_svc_handle, src_cluster_uuid, &src_folder_record);
902 mb_svc_debug("src cluster modified_date is %d\n",
903 src_clus_modified_date);
904 if (src_folder_record.modified_date < src_clus_modified_date) {
905 src_folder_record.modified_date = src_clus_modified_date;
907 ret = mb_svc_update_record_folder_sql(&src_folder_record, &update_old_folder_sql);
909 mb_svc_debug("mb_svc_delete_record_folder_sql fail:%d\n",
914 mb_svc_sql_list_add(&move_sql_list, &update_old_folder_sql);
918 ret = mb_svc_sqlite3_begin_trans(mb_svc_handle);
920 mb_svc_debug("mb_svc_sqlite3_begin_trans failed\n");
924 if (insert_new_folder == 1) {
925 ret = mb_svc_insert_record_folder_sql(&dst_folder_record, &insert_new_folder_sql);
927 mb_svc_debug("mb_svc_insert_record_folder_sql fails : %d", ret);
931 mb_svc_sql_list_add(&move_sql_list, &insert_new_folder_sql);
933 strncpy(media_record.folder_uuid, dst_folder_record.uuid, MB_SVC_UUID_LEN_MAX + 1);
936 dst_clus_modified_date =
937 _mb_svc_get_file_dir_modified_date(new_dir_path);
939 mb_svc_debug("dst cluster modified_date is %d\n",
940 dst_clus_modified_date);
941 if (dst_folder_record.modified_date < dst_clus_modified_date) {
942 dst_folder_record.modified_date = dst_clus_modified_date;
944 ret = mb_svc_update_record_folder_sql(&dst_folder_record, &update_new_folder_sql);
946 mb_svc_debug("mb_svc_delete_record_folder_sql fail:%d\n",
951 mb_svc_sql_list_add(&move_sql_list, &update_new_folder_sql);
955 ret = mb_svc_update_record_media_sql(&media_record, &media_sql);
957 mb_svc_debug("mb_svc_update_record_media fails : %d", ret);
961 mb_svc_sql_list_add(&move_sql_list, &media_sql);
963 /* Start transaction */
965 int length = g_list_length(move_sql_list);
967 for (i = 0; i < length; i++) {
968 char *sql = (char *)g_list_nth_data(move_sql_list, i);
969 ret = mb_svc_query_sql(mb_svc_handle, sql);
973 ("mb_svc_query_sql failed.. Now start to rollback\n");
974 mb_svc_sqlite3_rollback_trans(mb_svc_handle);
975 mb_svc_sql_list_release(&move_sql_list);
980 ret = mb_svc_sqlite3_commit_trans(mb_svc_handle);
983 ("mb_svc_sqlite3_commit_trans failed.. Now start to rollback\n");
984 mb_svc_sqlite3_rollback_trans(mb_svc_handle);
992 mb_svc_move_file_batch(MediaSvcHandle *mb_svc_handle,
993 const char *old_file_full_path,
994 const char *new_file_full_path,
995 minfo_file_type content_type,
1002 if (old_file_full_path == NULL || new_file_full_path == NULL
1003 || thumb_path == NULL) {
1005 ("old_file_full_path==NULL || new_file_full_path==NULL || thumb_path == NULL\n");
1006 return MB_SVC_ERROR_INVALID_PARAMETER;
1008 mb_svc_debug("old file_full_path is %s, new file full path is %s\n",
1009 old_file_full_path, new_file_full_path);
1011 char old_file_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
1012 char new_file_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
1013 char old_dir_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
1014 char new_dir_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
1016 mb_svc_folder_record_s src_folder_record = {"",};
1017 mb_svc_folder_record_s dst_folder_record = {"",};
1018 mb_svc_media_record_s media_record = {"",};
1019 int src_clus_cont_cnt = 0;
1020 int src_clus_modified_date = 0;
1021 int dst_clus_modified_date = 0;
1022 char src_cluster_uuid[MB_SVC_UUID_LEN_MAX + 1] = {0,};
1024 char *update_old_folder_sql = NULL;
1025 char *update_new_folder_sql = NULL;
1026 char *delete_folder_sql = NULL;
1027 char *media_sql = NULL;
1028 int insert_new_folder = 0;
1030 _mb_svc_get_file_display_name(old_file_full_path,
1031 old_file_display_name);
1032 _mb_svc_get_file_parent_path(old_file_full_path, old_dir_path);
1034 _mb_svc_get_file_display_name(new_file_full_path,
1035 new_file_display_name);
1036 _mb_svc_get_file_parent_path(new_file_full_path, new_dir_path);
1038 ret = __mb_svc_get_folder_record_by_full_path(mb_svc_handle, new_dir_path, &dst_folder_record);
1040 mb_svc_debug("Directory %s is NOT in DB", new_dir_path);
1041 mb_svc_debug("Now making new dir %s", new_dir_path);
1044 char new_dir_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
1045 int folder_modified_date = 0;
1047 store_type = _mb_svc_get_store_type_by_full(new_file_full_path);
1049 if (store_type == MB_SVC_ERROR_INTERNAL) {
1050 mb_svc_debug("Failed to get storage type : %s",
1051 new_file_full_path);
1052 return MB_SVC_ERROR_INVALID_PARAMETER;
1055 _mb_svc_get_dir_display_name(new_dir_path, new_dir_display_name);
1056 mb_svc_debug("dir_display_name is %s\n", new_dir_display_name);
1058 folder_modified_date = _mb_svc_get_file_dir_modified_date(new_dir_path);
1060 dst_folder_record.modified_date = folder_modified_date;
1061 dst_folder_record.storage_type = store_type;
1062 strncpy(dst_folder_record.uri, new_dir_path, MB_SVC_DIR_PATH_LEN_MAX + 1);
1063 strncpy(dst_folder_record.display_name, new_dir_display_name,
1064 MB_SVC_FILE_NAME_LEN_MAX + 1);
1065 strncpy(dst_folder_record.web_account_id, "", MB_SVC_ARRAY_LEN_MAX + 1);
1066 strncpy(dst_folder_record.web_album_id, "", MB_SVC_ARRAY_LEN_MAX + 1);
1067 dst_folder_record.lock_status = 0;
1069 insert_new_folder = 1;
1072 ret = mb_svc_get_media_record_by_full_path(mb_svc_handle, old_file_full_path, &media_record);
1074 mb_svc_debug("mb_svc_get_media_record_by_full_path fails : %d", ret);
1078 strncpy(src_cluster_uuid, media_record.folder_uuid, MB_SVC_UUID_LEN_MAX + 1);
1080 strncpy(media_record.folder_uuid, dst_folder_record.uuid, MB_SVC_UUID_LEN_MAX + 1);
1081 strncpy(media_record.path, new_file_full_path, sizeof(media_record.path));
1082 strncpy(media_record.display_name, new_file_display_name, sizeof(media_record.display_name));
1083 media_record.modified_date = _mb_svc_get_file_dir_modified_date(new_file_full_path);
1085 _mb_svc_thumb_move(old_file_full_path, new_file_full_path, thumb_path);
1087 strncpy(media_record.thumbnail_path, thumb_path, sizeof(media_record.thumbnail_path));
1089 /* verify if the old folder has no files left */
1091 mb_svc_get_folder_content_count_by_folder_id(mb_svc_handle, src_cluster_uuid);
1093 if (src_clus_cont_cnt == 1) {
1095 ret = mb_svc_delete_record_folder_sql(src_cluster_uuid, &delete_folder_sql);
1097 mb_svc_debug("mb_svc_delete_record_folder_sql fail:%d\n",
1101 mb_svc_sql_list_add(&g_move_sql_list, &delete_folder_sql);
1102 } else { /* update modified date */
1103 src_clus_modified_date =
1104 _mb_svc_get_file_dir_modified_date(old_dir_path);
1105 mb_svc_get_folder_record_by_id(mb_svc_handle, src_cluster_uuid, &src_folder_record);
1106 mb_svc_debug("src cluster modified_date is %d\n",
1107 src_clus_modified_date);
1108 if (src_folder_record.modified_date < src_clus_modified_date) {
1109 src_folder_record.modified_date = src_clus_modified_date;
1111 ret = mb_svc_update_record_folder_sql(&src_folder_record, &update_old_folder_sql);
1113 mb_svc_debug("mb_svc_delete_record_folder_sql fail:%d\n",
1118 mb_svc_sql_list_add(&g_move_sql_list, &update_old_folder_sql);
1122 if (insert_new_folder == 1) {
1123 ret = mb_svc_insert_record_folder(mb_svc_handle, &dst_folder_record);
1125 mb_svc_debug("mb_svc_insert_record_folder_sql fails : %d", ret);
1129 strncpy(media_record.folder_uuid, dst_folder_record.uuid, MB_SVC_UUID_LEN_MAX + 1);
1132 dst_clus_modified_date =
1133 _mb_svc_get_file_dir_modified_date(new_dir_path);
1135 mb_svc_debug("dst cluster modified_date is %d\n",
1136 dst_clus_modified_date);
1137 if (dst_folder_record.modified_date < dst_clus_modified_date) {
1138 dst_folder_record.modified_date = dst_clus_modified_date;
1140 ret = mb_svc_update_record_folder_sql(&dst_folder_record, &update_new_folder_sql);
1142 mb_svc_debug("mb_svc_delete_record_folder_sql fail:%d\n",
1147 mb_svc_sql_list_add(&g_move_sql_list, &update_new_folder_sql);
1151 ret = mb_svc_update_record_media_sql(&media_record, &media_sql);
1153 mb_svc_debug("mb_svc_update_record_media fails : %d", ret);
1157 mb_svc_sql_list_add(&g_move_sql_list, &media_sql);
1162 int mb_svc_move_file_by_id(MediaSvcHandle *mb_svc_handle, const char *src_media_id, const char *dst_cluster_id)
1167 mb_svc_media_record_s media_record = {"",};
1168 int src_clus_cont_cnt = 0;
1169 int src_clus_modified_date = 0;
1170 char src_clus_path[MB_SVC_FILE_PATH_LEN_MAX + 1] = { 0 };
1171 int dst_clus_modified_date = 0;
1172 char dst_clus_path[MB_SVC_FILE_PATH_LEN_MAX + 1] = { 0 };
1173 mb_svc_folder_record_s folder_record = {"",};
1174 char thumb_path[MB_SVC_FILE_PATH_LEN_MAX + 1] = { 0 };
1175 char dst_file_full_path[MB_SVC_FILE_PATH_LEN_MAX + 1] = { 0 };
1176 char src_cluster_uuid[MB_SVC_UUID_LEN_MAX + 1] = {0,};
1178 mb_svc_debug("minfo_mv_media#src_media_id: %s", src_media_id);
1179 mb_svc_debug("minfo_mv_media#dst_cluster_id: %s", dst_cluster_id);
1181 ret = mb_svc_get_media_record_by_id(mb_svc_handle, src_media_id, &media_record);
1183 mb_svc_debug("mb_svc_get_media_record_by_id failed\n");
1187 strncpy(src_cluster_uuid, media_record.folder_uuid, MB_SVC_UUID_LEN_MAX + 1);
1189 mb_svc_get_folder_fullpath_by_folder_id(mb_svc_handle, dst_cluster_id, dst_clus_path,
1190 sizeof(dst_clus_path));
1191 snprintf(dst_file_full_path, MB_SVC_FILE_PATH_LEN_MAX + 1, "%s/%s",
1192 dst_clus_path, media_record.display_name);
1194 strncpy(media_record.path, dst_file_full_path, MB_SVC_FILE_PATH_LEN_MAX + 1);
1196 _mb_svc_thumb_move(media_record.path, dst_file_full_path, thumb_path);
1198 media_record.modified_date =
1199 _mb_svc_get_file_dir_modified_date(dst_file_full_path);
1200 strncpy(media_record.thumbnail_path, thumb_path,
1201 MB_SVC_FILE_PATH_LEN_MAX + 1);
1202 //media_record.folder_id = dst_cluster_id;
1203 strncpy(media_record.folder_uuid, dst_cluster_id, MB_SVC_UUID_LEN_MAX + 1);
1205 mb_svc_update_record_media(mb_svc_handle, &media_record);
1207 /* verify if the old folder has no files left */
1209 mb_svc_get_folder_content_count_by_folder_id(mb_svc_handle, src_cluster_uuid);
1210 if (src_clus_cont_cnt == 0) {
1211 ret = mb_svc_delete_record_folder_by_id(mb_svc_handle, src_cluster_uuid);
1213 mb_svc_debug("mb_svc_delete_record_older fail:%d\n",
1217 } else { /* update modified date */
1218 mb_svc_get_folder_fullpath_by_folder_id(mb_svc_handle, src_cluster_uuid,
1220 sizeof(src_clus_path));
1221 src_clus_modified_date =
1222 _mb_svc_get_file_dir_modified_date(src_clus_path);
1223 mb_svc_get_folder_record_by_id(mb_svc_handle, src_cluster_uuid, &folder_record);
1224 mb_svc_debug("src cluster modified_date is %d\n",
1225 src_clus_modified_date);
1226 if (folder_record.modified_date < src_clus_modified_date) {
1227 mb_svc_debug("src cluster directory %s is modified",
1229 folder_record.modified_date = src_clus_modified_date;
1230 mb_svc_update_record_folder(mb_svc_handle, &folder_record);
1234 mb_svc_get_folder_fullpath_by_folder_id(mb_svc_handle, dst_cluster_id, dst_clus_path,
1235 sizeof(dst_clus_path));
1236 dst_clus_modified_date =
1237 _mb_svc_get_file_dir_modified_date(dst_clus_path);
1238 mb_svc_get_folder_record_by_id(mb_svc_handle, dst_cluster_id, &folder_record);
1239 mb_svc_debug("src cluster modified_date is %d\n",
1240 dst_clus_modified_date);
1241 if (folder_record.modified_date < dst_clus_modified_date) {
1242 mb_svc_debug("src cluster directory %s is modified",
1244 folder_record.modified_date = dst_clus_modified_date;
1245 mb_svc_update_record_folder(mb_svc_handle, &folder_record);
1252 mb_svc_copy_file(MediaSvcHandle *mb_svc_handle,
1253 const char *old_file_full_path,
1254 const char *new_file_full_path,
1255 minfo_file_type content_type,
1258 char new_file_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
1259 char new_dir_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
1260 char dir_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
1261 mb_svc_media_record_s media_record = {"",};
1262 mb_svc_folder_record_s folder_record = {"",};
1263 mb_svc_image_meta_record_s image_record = {0,};
1264 mb_svc_video_meta_record_s video_record = {0,};
1265 int folder_modified_date = 0;
1268 char old_media_uuid[MB_SVC_UUID_LEN_MAX + 1] = {0,};
1269 bool is_new_folder = FALSE;
1271 if (old_file_full_path == NULL || new_file_full_path == NULL
1272 || thumb_path == NULL) {
1274 ("old_file_full_path==NULL || new_file_full_path==NULL || thumb_path == NULL\n");
1275 return MB_SVC_ERROR_INVALID_PARAMETER;
1277 mb_svc_debug("old file_full_path is %s, new file full path is %s\n",
1278 old_file_full_path, new_file_full_path);
1280 /* 1. copy to dest dir */
1282 /* 1.1. get old media record info */
1284 mb_svc_get_media_record_by_full_path(mb_svc_handle, old_file_full_path,
1289 ("mb_svc_get_media_record_by_fid_name fail: %d\n", ret);
1293 /* 1.2. check new dir */
1294 _mb_svc_get_file_parent_path(new_file_full_path, new_dir_path);
1295 folder_modified_date = _mb_svc_get_file_dir_modified_date(new_dir_path);
1296 mb_svc_debug("folder_modified_date is %d\n", folder_modified_date);
1298 ret = __mb_svc_get_folder_record_by_full_path(mb_svc_handle, new_dir_path, &folder_record);
1300 if (ret < 0 && ret == MB_SVC_ERROR_DB_INTERNAL) {
1302 is_new_folder = TRUE;
1303 mb_svc_debug("no any record in %s", new_dir_path);
1305 store_type = _mb_svc_get_store_type_by_full(new_file_full_path);
1306 if (store_type == MB_SVC_ERROR_INTERNAL) {
1307 mb_svc_debug("Failed to get storage type : %s",
1308 new_file_full_path);
1309 return MB_SVC_ERROR_INVALID_PARAMETER;
1311 mb_svc_debug("store_type is %d\n", store_type);
1313 _mb_svc_get_dir_display_name(new_dir_path, dir_display_name);
1314 mb_svc_debug("dir_display_name is %s\n", dir_display_name);
1316 /* _mb_svc_get_rel_path_by_full(new_dir_path, rel_path);
1317 mb_svc_debug("rel path is %s\n", rel_path);
1318 _mb_svc_get_dir_parent_path(rel_path, uri);
1319 mb_svc_debug("uri is %s\n", uri); */
1321 folder_record.modified_date = folder_modified_date;
1322 folder_record.storage_type = store_type;
1323 strncpy(folder_record.uri, new_dir_path,
1324 MB_SVC_DIR_PATH_LEN_MAX + 1);
1325 strncpy(folder_record.display_name, dir_display_name,
1326 MB_SVC_FILE_NAME_LEN_MAX + 1);
1327 strncpy(folder_record.web_account_id, "", MB_SVC_ARRAY_LEN_MAX + 1);
1328 strncpy(folder_record.web_album_id, "", MB_SVC_ARRAY_LEN_MAX + 1);
1329 folder_record.lock_status = 0;
1332 ("no record in %s, ready insert the folder record into db\n",
1335 ret = mb_svc_insert_record_folder(mb_svc_handle, &folder_record);
1338 ("insert file info into folder table failed. Trying to get folder record again.\n");
1339 memset(&folder_record, 0x00,
1340 sizeof(mb_svc_folder_record_s));
1341 ret = __mb_svc_get_folder_record_by_full_path(mb_svc_handle, new_dir_path,
1344 mb_svc_debug("__mb_svc_get_folder_record_by_full_path failed again.");
1347 is_new_folder = FALSE;
1349 mb_svc_debug("folder record id of new inserted is %s\n",
1350 folder_record.uuid);
1353 ("folder_record info: uuid is %s,uri is %s,display_name is %s,modified_date is %d,web_account_id is %s,store_type is %d\n",
1354 folder_record.uuid, folder_record.uri,
1355 folder_record.display_name, folder_record.modified_date,
1356 folder_record.web_account_id, folder_record.storage_type);
1358 if (folder_record.modified_date < folder_modified_date) {
1359 mb_svc_debug("directory %s is modified", new_dir_path);
1360 folder_record.modified_date = folder_modified_date;
1361 mb_svc_update_record_folder(mb_svc_handle, &folder_record);
1365 strncpy(old_media_uuid, media_record.media_uuid, MB_SVC_UUID_LEN_MAX + 1);
1367 /* 2.3. set new values, take care of file rename */
1368 _mb_svc_get_file_display_name(new_file_full_path,
1369 new_file_display_name);
1370 mb_svc_debug("new file_display_name is %s\n", new_file_display_name);
1371 strncpy(media_record.display_name, new_file_display_name,
1372 MB_SVC_FILE_NAME_LEN_MAX + 1);
1373 strncpy(media_record.path, new_file_full_path,
1374 MB_SVC_FILE_PATH_LEN_MAX + 1);
1376 strncpy(media_record.folder_uuid, folder_record.uuid, MB_SVC_UUID_LEN_MAX + 1);
1377 media_record.modified_date =
1378 _mb_svc_get_file_dir_modified_date(new_file_full_path);
1380 _mb_svc_thumb_generate_hash_name(new_file_full_path, thumb_path,
1381 MB_SVC_FILE_PATH_LEN_MAX + 1);
1382 strncpy(media_record.thumbnail_path, thumb_path,
1383 MB_SVC_FILE_PATH_LEN_MAX + 1);
1385 ret = mb_svc_insert_record_media(mb_svc_handle, &media_record, store_type);
1387 if (is_new_folder == TRUE) {
1389 mb_svc_delete_record_folder_by_id(mb_svc_handle, folder_record.uuid);
1392 ("mb_svc_delete_record_older fail:%s\n",
1393 folder_record.uuid);
1399 /* 2.4. copy image_meta record or video_meta record */
1400 if (content_type == MINFO_ITEM_IMAGE) {
1401 mb_svc_debug("update image record\n");
1403 mb_svc_get_image_record_by_media_id(mb_svc_handle, old_media_uuid,
1406 mb_svc_debug("get image record by media id failed\n");
1410 strncpy(image_record.media_uuid, media_record.media_uuid, MB_SVC_UUID_LEN_MAX + 1);
1413 mb_svc_insert_record_image_meta(mb_svc_handle, &image_record, store_type);
1416 ("mb_svc_insert_record_image_meta failed\n");
1420 } else if (content_type == MINFO_ITEM_VIDEO) {
1421 mb_svc_debug("update video record\n");
1423 mb_svc_get_video_record_by_media_id(mb_svc_handle, old_media_uuid,
1426 mb_svc_debug("get video record by media id failed\n");
1430 strncpy(video_record.media_uuid, media_record.media_uuid, MB_SVC_UUID_LEN_MAX + 1);
1433 mb_svc_insert_record_video_meta(mb_svc_handle, &video_record, store_type);
1436 ("mb_svc_insert_record_video_meta failed\n");
1440 /* Get bookmark list and update them */
1441 mb_svc_bookmark_record_s bookmark_record = { 0 };
1442 mb_svc_iterator_s mb_svc_bm_iterator = { 0 };
1446 mb_svc_bookmark_iter_start(mb_svc_handle, old_media_uuid,
1447 &mb_svc_bm_iterator);
1449 mb_svc_debug("mb-svc iterator start failed");
1450 return MB_SVC_ERROR_DB_INTERNAL;
1455 mb_svc_bookmark_iter_next(&mb_svc_bm_iterator,
1458 if (ret == MB_SVC_NO_RECORD_ANY_MORE)
1463 ("mb-svc iterator get next recrod failed");
1464 mb_svc_iter_finish(&mb_svc_bm_iterator);
1470 strncpy(bookmark_record.media_uuid, media_record.media_uuid, MB_SVC_UUID_LEN_MAX + 1);
1472 ret = mb_svc_insert_record_bookmark(mb_svc_handle, &bookmark_record);
1475 ("mb_svc_insert_record_bookmark failed\n");
1480 mb_svc_iter_finish(&mb_svc_bm_iterator);
1483 /* 2.5 copy thumnail file */
1485 _mb_svc_thumb_copy(old_file_full_path, new_file_full_path,
1488 mb_svc_debug("thumb copy fails [%d]", ret);
1495 int mb_svc_copy_file_by_id(MediaSvcHandle *mb_svc_handle, const char *src_media_id, const char *dst_cluster_id)
1498 mb_svc_media_record_s media_record = {"",};
1499 mb_svc_image_meta_record_s image_record = {0,};
1500 mb_svc_video_meta_record_s video_record = {0,};
1501 mb_svc_folder_record_s folder_record = {"",};
1502 char dst_clus_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
1503 char dst_file_full_path[MB_SVC_FILE_PATH_LEN_MAX + 1] = { 0 };
1504 int dst_clus_modified_date = 0;
1505 char thumb_path[MB_SVC_FILE_PATH_LEN_MAX + 1] = { 0 };
1506 minfo_store_type store_type = MINFO_SYSTEM;
1508 ret = mb_svc_get_media_record_by_id(mb_svc_handle, src_media_id, &media_record);
1510 mb_svc_debug("mb_svc_get_media_record_by_id failed\n");
1514 mb_svc_get_folder_fullpath_by_folder_id(mb_svc_handle, dst_cluster_id, dst_clus_path,
1515 sizeof(dst_clus_path));
1516 snprintf(dst_file_full_path, MB_SVC_FILE_PATH_LEN_MAX + 1, "%s/%s",
1517 dst_clus_path, media_record.display_name);
1519 store_type = _mb_svc_get_store_type_by_full(dst_file_full_path);
1520 if (store_type == MB_SVC_ERROR_INTERNAL) {
1521 mb_svc_debug("Failed to get storage type : %s",
1522 dst_file_full_path);
1523 return MB_SVC_ERROR_INVALID_PARAMETER;
1526 _mb_svc_thumb_generate_hash_name(dst_file_full_path, thumb_path,
1527 MB_SVC_FILE_PATH_LEN_MAX + 1);
1529 media_record.modified_date =
1530 _mb_svc_get_file_dir_modified_date(dst_file_full_path);
1531 strncpy(media_record.path, dst_file_full_path,
1532 MB_SVC_FILE_PATH_LEN_MAX + 1);
1533 strncpy(media_record.thumbnail_path, thumb_path,
1534 MB_SVC_FILE_PATH_LEN_MAX + 1);
1535 //media_record.folder_id = dst_cluster_id;
1536 strncpy(media_record.folder_uuid, dst_cluster_id, MB_SVC_UUID_LEN_MAX + 1);
1538 mb_svc_insert_record_media(mb_svc_handle, &media_record, store_type);
1540 if (media_record.content_type == MINFO_ITEM_IMAGE) {
1541 mb_svc_debug("update image record\n");
1543 mb_svc_get_image_record_by_media_id(mb_svc_handle, src_media_id,
1546 mb_svc_debug("get image record by media id failed\n");
1550 strncpy(image_record.media_uuid, media_record.media_uuid, MB_SVC_UUID_LEN_MAX + 1);
1553 mb_svc_insert_record_image_meta(mb_svc_handle, &image_record, store_type);
1556 ("mb_svc_insert_record_image_meta failed\n");
1559 } else if (media_record.content_type == MINFO_ITEM_VIDEO) {
1560 mb_svc_debug("update video record\n");
1562 mb_svc_get_video_record_by_media_id(mb_svc_handle, src_media_id,
1565 mb_svc_debug("get video record by media id failed\n");
1569 strncpy(video_record.media_uuid, media_record.media_uuid, MB_SVC_UUID_LEN_MAX + 1);
1570 mb_svc_insert_record_video_meta(mb_svc_handle, &video_record, store_type);
1573 mb_svc_get_folder_fullpath_by_folder_id(mb_svc_handle, dst_cluster_id, dst_clus_path,
1574 sizeof(dst_clus_path));
1575 dst_clus_modified_date =
1576 _mb_svc_get_file_dir_modified_date(dst_clus_path);
1577 mb_svc_get_folder_record_by_id(mb_svc_handle, dst_cluster_id, &folder_record);
1578 mb_svc_debug("src cluster modified_date is %d\n",
1579 dst_clus_modified_date);
1580 if (folder_record.modified_date < dst_clus_modified_date) {
1581 mb_svc_debug("src cluster directory %s is modified",
1583 folder_record.modified_date = dst_clus_modified_date;
1584 mb_svc_update_record_folder(mb_svc_handle, &folder_record);
1588 _mb_svc_thumb_copy(media_record.path, dst_file_full_path,
1591 mb_svc_debug("thumb copy fails [%d]", ret);
1598 int mb_svc_update_cluster_name(MediaSvcHandle *mb_svc_handle, const char *cluster_id, const char *new_name)
1602 mb_svc_folder_record_s folder_record = {"",};
1603 char old_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
1604 char dir_full_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
1605 char src_parent_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
1606 char src_full_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
1607 char dst_full_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
1610 if (new_name == NULL) {
1611 mb_svc_debug(" new name is NULL");
1612 return MB_SVC_ERROR_INVALID_PARAMETER;
1615 mb_svc_debug("minfo_update_cluster_name#cluster_id: %s", cluster_id);
1616 mb_svc_debug("minfo_update_cluster_name#new_name: %s", new_name);
1618 ret = mb_svc_get_folder_record_by_id(mb_svc_handle, cluster_id, &folder_record);
1621 ("minfo_update_cluster_name: no folder record matched with the folder id\n");
1625 strncpy(old_name, folder_record.display_name, sizeof(old_name));
1626 strncpy(folder_record.display_name, new_name,
1627 sizeof(folder_record.display_name));
1628 _mb_svc_get_file_parent_path(folder_record.uri, dir_full_path);
1629 snprintf(src_parent_path, sizeof(src_parent_path), "%s/",
1632 len = g_strlcat(dir_full_path, "/", sizeof(dir_full_path));
1633 if (len >= sizeof(dir_full_path)) {
1634 mb_svc_debug("strlcat returns failure ( %d )", len);
1635 return MB_SVC_ERROR_INVALID_PARAMETER;
1638 len = g_strlcat(dir_full_path, new_name, sizeof(dir_full_path));
1639 if (len >= sizeof(dir_full_path)) {
1640 mb_svc_debug("strlcat returns failure ( %d )", len);
1641 return MB_SVC_ERROR_INVALID_PARAMETER;
1644 strncpy(folder_record.uri, dir_full_path, sizeof(folder_record.uri));
1645 mb_svc_debug("uri: %s", folder_record.uri);
1647 len = g_strlcat(dir_full_path, "/", sizeof(dir_full_path));
1648 if (len >= sizeof(dir_full_path)) {
1649 mb_svc_debug("strlcat returns failure ( %d )", len);
1650 return MB_SVC_ERROR_INVALID_PARAMETER;
1653 /* Update all folder record's path, which are matched by old parent path */
1654 ret = mb_svc_update_record_folder_path(mb_svc_handle, src_parent_path, dir_full_path);
1656 mb_svc_debug("mb_svc_update_record_folder_path failed\n");
1661 folder_record.modified_date = date;
1663 /* Update all folder record's modified date, which are changed above */
1665 mb_svc_update_folder_modified_date(mb_svc_handle, dir_full_path,
1666 folder_record.modified_date);
1668 mb_svc_debug("mb_svc_update_folder_modified_date failed\n");
1672 ret = mb_svc_update_record_folder(mb_svc_handle, &folder_record);
1675 ("minfo_update_cluster_name: update cluster name failed\n");
1679 mb_svc_folder_record_s matched_folder_record = {"",};
1680 mb_svc_media_record_s media_record = {"",};
1681 mb_svc_iterator_s mb_svc_folder_iterator = { 0 };
1682 mb_svc_iterator_s mb_svc_media_iterator = { 0 };
1683 minfo_item_filter filter = { 0 };
1684 filter.favorite = MINFO_MEDIA_FAV_ALL;
1685 filter.start_pos = -1;
1686 filter.sort_type = MINFO_MEDIA_SORT_BY_NONE;
1687 filter.file_type = MINFO_ITEM_ALL;
1688 char old_media_uuid[MB_SVC_UUID_LEN_MAX + 1] = {0,};
1690 ret = __mb_svc_folder_by_path_iter_start(mb_svc_handle, folder_record.uri, &mb_svc_folder_iterator);
1693 mb_svc_debug("mb-svc iterator start failed");
1699 mb_svc_folder_iter_next(&mb_svc_folder_iterator,
1700 &matched_folder_record);
1702 if (ret == MB_SVC_NO_RECORD_ANY_MORE) {
1707 ("mb_svc_folder_iterator get next recrod failed");
1708 mb_svc_iter_finish(&mb_svc_folder_iterator);
1713 mb_svc_media_iter_start_new(mb_svc_handle, matched_folder_record.uuid,
1714 &filter, MINFO_CLUSTER_TYPE_ALL,
1716 &mb_svc_media_iterator);
1719 mb_svc_debug("mb-svc iterator start failed");
1720 mb_svc_iter_finish(&mb_svc_folder_iterator);
1726 mb_svc_media_iter_next(&mb_svc_media_iterator,
1729 if (ret == MB_SVC_NO_RECORD_ANY_MORE) {
1735 ("mb-svc iterator get next recrod failed");
1736 mb_svc_iter_finish(&mb_svc_folder_iterator);
1737 mb_svc_iter_finish(&mb_svc_media_iterator);
1741 strncpy(old_media_uuid, media_record.media_uuid, MB_SVC_UUID_LEN_MAX + 1);
1743 snprintf(src_full_path, sizeof(src_full_path), "%s",
1746 memset(media_record.path, 0x00,
1747 sizeof(media_record.path));
1748 snprintf(media_record.path, sizeof(media_record.path),
1749 "%s/%s", matched_folder_record.uri,
1750 media_record.display_name);
1752 snprintf(dst_full_path, sizeof(dst_full_path), "%s",
1756 ("_mb_svc_thumb_move : src[ %s ], dst[ %s ]",
1757 src_full_path, dst_full_path);
1759 _mb_svc_thumb_move(src_full_path, dst_full_path,
1760 media_record.thumbnail_path);
1763 ("_mb_svc_thumb_move fails.. so use default thumbnail");
1764 snprintf(media_record.thumbnail_path,
1765 sizeof(media_record.thumbnail_path),
1766 "%s", DEFAULT_IMAGE_THUMB);
1769 ret = mb_svc_update_record_media(mb_svc_handle, &media_record);
1772 ("Error : mb_svc_update_record_media path : %s",
1774 mb_svc_iter_finish(&mb_svc_folder_iterator);
1775 mb_svc_iter_finish(&mb_svc_media_iterator);
1780 mb_svc_iter_finish(&mb_svc_media_iterator);
1783 mb_svc_iter_finish(&mb_svc_folder_iterator);
1789 long mb_svc_get_clock(void)
1794 gettimeofday(&tv, NULL);
1795 curtime = tv.tv_sec * USEC_PER_SEC + tv.tv_usec;
1797 /* int curtime = time((time_t*)NULL); */
1801 int mb_svc_table_member_count(MediaSvcHandle *mb_svc_handle, char *table_name)
1803 char q_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
1805 sqlite3_stmt *stmt = NULL;
1809 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
1810 if (handle == NULL) {
1811 mb_svc_debug("handle is NULL");
1812 return MB_SVC_ERROR_DB_INTERNAL;
1815 if (table_name == NULL) {
1816 mb_svc_debug("Error:table_name == NULL\n");
1817 return MB_SVC_ERROR_INVALID_PARAMETER;
1820 snprintf(q_string, sizeof(q_string), MB_SVC_TABLE_COUNT_QUERY_STRING,
1824 sqlite3_prepare_v2(handle, q_string, strlen(q_string), &stmt, NULL);
1825 if (SQLITE_OK != err) {
1826 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
1827 mb_svc_debug("query string is %s\n", q_string);
1828 return MB_SVC_ERROR_DB_INTERNAL;
1830 rc = sqlite3_step(stmt);
1831 while (rc == SQLITE_ROW) {
1832 count = sqlite3_column_int(stmt, 0);
1833 rc = sqlite3_step(stmt);
1835 sqlite3_finalize(stmt);
1838 mb_svc_debug("record count of table %s is %d\n", table_name, count);
1843 mb_svc_check_exist_by_path(MediaSvcHandle *mb_svc_handle, const char *path, const char *table_name)
1847 sqlite3_stmt *stmt = NULL;
1851 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
1852 if (handle == NULL) {
1853 mb_svc_debug("handle is NULL");
1854 return MB_SVC_ERROR_DB_INTERNAL;
1857 query = sqlite3_mprintf(MB_SVC_TABLE_COUNT_BY_PATH_QUERY_STRING, table_name, path);
1859 err = sqlite3_prepare_v2(handle, query, strlen(query), &stmt, NULL);
1861 if (SQLITE_OK != err) {
1862 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
1863 mb_svc_debug("query string is %s\n", query);
1864 sqlite3_free(query);
1865 return MB_SVC_ERROR_DB_INTERNAL;
1868 rc = sqlite3_step(stmt);
1869 while (rc == SQLITE_ROW) {
1870 count = sqlite3_column_int(stmt, 0);
1871 rc = sqlite3_step(stmt);
1874 sqlite3_finalize(stmt);
1875 sqlite3_free(query);
1876 mb_svc_debug("record count of table %s is %d\n", table_name, count);
1879 return MB_SVC_ERROR_NONE;
1881 return MB_SVC_ERROR_DB_NO_RECORD;
1886 mb_svc_geo_media_iter_start(MediaSvcHandle *mb_svc_handle,
1887 const char *folder_id,
1888 minfo_folder_type store_filter,
1889 minfo_item_filter *filter,
1890 mb_svc_iterator_s *mb_svc_iterator,
1891 double min_longitude,
1892 double max_longitude,
1893 double min_latitude, double max_latitude)
1898 char *table_name = MB_SVC_TBL_NAME_MEDIA;
1899 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
1900 char query_complete_string[MB_SVC_DEFAULT_QUERY_SIZE * 3 + 1] = { 0 };
1901 char query_where[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
1902 char tmp_str[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
1904 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
1905 if (handle == NULL) {
1906 mb_svc_debug("handle is NULL");
1907 return MB_SVC_ERROR_DB_INTERNAL;
1909 /* mb_svc_debug ("mb_svc_media_iter_start--enter\n"); */
1911 if (mb_svc_iterator == NULL || filter == NULL) {
1912 mb_svc_debug("Error:mb_svc_iterator == NULL || filter == NULL");
1913 return MB_SVC_ERROR_INVALID_PARAMETER;
1915 if (filter->start_pos >= 0 && filter->start_pos > filter->end_pos) {
1916 mb_svc_debug(" filter->start_pos (%d) > filter->end_pos (%d) = %d\n",
1917 filter->start_pos, filter->end_pos);
1918 return MB_SVC_ERROR_INVALID_PARAMETER;
1920 strncpy(query_where, "", MB_SVC_DEFAULT_QUERY_SIZE);
1922 if (store_filter != MINFO_CLUSTER_TYPE_ALL) {
1923 switch (store_filter) {
1924 case MINFO_CLUSTER_TYPE_LOCAL_ALL:
1925 snprintf(tmp_str, sizeof(tmp_str),
1926 " and (storage_type = %d or storage_type = %d)",
1927 MINFO_PHONE, MINFO_MMC);
1929 case MINFO_CLUSTER_TYPE_LOCAL_PHONE:
1930 snprintf(tmp_str, sizeof(tmp_str),
1931 " and storage_type = %d ", MINFO_PHONE);
1933 case MINFO_CLUSTER_TYPE_LOCAL_MMC:
1934 snprintf(tmp_str, sizeof(tmp_str),
1935 " and storage_type = %d ", MINFO_MMC);
1937 case MINFO_CLUSTER_TYPE_WEB:
1938 snprintf(tmp_str, sizeof(tmp_str),
1939 " and storage_type = %d ", MINFO_WEB);
1941 case MINFO_CLUSTER_TYPE_STREAMING:
1942 snprintf(tmp_str, sizeof(tmp_str),
1943 " and storage_type = %d ",
1944 MINFO_WEB_STREAMING);
1951 snprintf(query_string, MB_SVC_DEFAULT_QUERY_SIZE + 1,
1952 MB_SVC_TABLE_SELECT_GEO_LIST, table_name, min_longitude,
1953 max_longitude, min_latitude, max_latitude, min_longitude,
1954 max_longitude, min_latitude, max_latitude, tmp_str);
1956 memset(tmp_str, 0x00, sizeof(tmp_str));
1958 mb_svc_debug("Query string: %s", query_string);
1960 if (filter->favorite == MINFO_MEDIA_FAV_ONLY) {
1961 strncat(query_where, " and a.rating = 1",
1962 MB_SVC_DEFAULT_QUERY_SIZE + 1);
1963 } else if (filter->favorite == MINFO_MEDIA_UNFAV_ONLY) {
1964 strncat(query_where, " and a.rating = 0",
1965 MB_SVC_DEFAULT_QUERY_SIZE + 1);
1968 /* set to get only unlocked items */
1969 strncat(query_where, " and b.lock_status = 0",
1970 MB_SVC_DEFAULT_QUERY_SIZE + 1);
1972 if (folder_id != NULL) {
1973 snprintf(tmp_str, MB_SVC_DEFAULT_QUERY_SIZE + 1,
1974 " and a.folder_uuid = '%s'", folder_id);
1975 strncat(query_where, tmp_str, MB_SVC_DEFAULT_QUERY_SIZE + 1);
1978 snprintf(tmp_str, MB_SVC_DEFAULT_QUERY_SIZE + 1,
1979 " and (a.content_type = 0");
1980 strncat(query_where, tmp_str, MB_SVC_DEFAULT_QUERY_SIZE + 1);
1982 if (filter->file_type & MINFO_ITEM_ALL) {
1983 filter->file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO;
1986 if (filter->file_type & MINFO_ITEM_IMAGE) {
1987 snprintf(tmp_str, sizeof(tmp_str), " or a.content_type = %d",
1989 strncat(query_where, tmp_str, MB_SVC_DEFAULT_QUERY_SIZE + 1);
1992 if (filter->file_type & MINFO_ITEM_VIDEO) {
1993 snprintf(tmp_str, sizeof(tmp_str), " or a.content_type = %d",
1995 strncat(query_where, tmp_str, MB_SVC_DEFAULT_QUERY_SIZE + 1);
1998 strncat(query_where, ")", MB_SVC_DEFAULT_QUERY_SIZE + 1);
2000 if (filter->sort_type == MINFO_MEDIA_SORT_BY_NONE)
2001 filter->sort_type = MINFO_MEDIA_SORT_BY_NAME_ASC;
2003 snprintf(query_complete_string, MB_SVC_DEFAULT_QUERY_SIZE * 3 + 1,
2004 "%s %s ORDER BY a.%s", query_string, query_where,
2005 mb_svc_media_order[filter->sort_type]);
2007 if (filter->start_pos != MB_SVC_DB_DEFAULT_GET_ALL_RECORDS) { /* -1 get all record */
2008 int length = filter->end_pos - filter->start_pos + 1;
2011 ("start position and end position is invalid ( start:%d, end:%d )",
2012 filter->start_pos, filter->end_pos);
2013 return MB_SVC_ERROR_INVALID_PARAMETER;
2016 snprintf(tmp_str, sizeof(tmp_str), " LIMIT %d,%d",
2017 filter->start_pos, length);
2018 strncat(query_complete_string, tmp_str,
2019 sizeof(query_complete_string));
2022 mb_svc_debug("############### SQL: %s\n", query_complete_string);
2024 mb_svc_iterator->current_position = 0;
2027 sqlite3_prepare_v2(handle, query_complete_string,
2028 strlen(query_complete_string),
2029 &mb_svc_iterator->stmt, NULL);
2030 if (SQLITE_OK != err) {
2031 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
2032 mb_svc_debug("query string is %s\n", query_complete_string);
2033 return MB_SVC_ERROR_DB_INTERNAL;
2040 mb_svc_media_iter_start_new(MediaSvcHandle *mb_svc_handle,
2041 const char *folder_id,
2042 minfo_item_filter *filter,
2043 minfo_folder_type folder_type,
2045 GList *p_folder_id_list,
2046 mb_svc_iterator_s *mb_svc_iterator)
2049 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2050 char query_complete_string[MB_SVC_DEFAULT_QUERY_SIZE * 3 + 1] = { 0 };
2051 char query_where[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2052 char condition_str[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2055 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
2056 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
2057 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
2058 MB_SVC_TBL_NAME_MEDIA);
2060 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
2061 if (handle == NULL) {
2062 mb_svc_debug("handle is NULL");
2063 return MB_SVC_ERROR_DB_INTERNAL;
2066 if (mb_svc_iterator == NULL || filter == NULL) {
2067 mb_svc_debug("Error:mb_svc_iterator == NULL || filter == NULL");
2068 return MB_SVC_ERROR_INVALID_PARAMETER;
2070 if (filter->start_pos >= 0 && filter->start_pos > filter->end_pos) {
2071 mb_svc_debug(" filter->start_pos (%d) > filter->end_pos (%d)",
2072 filter->start_pos, filter->end_pos);
2073 return MB_SVC_ERROR_INVALID_PARAMETER;
2076 snprintf(query_string, sizeof(query_string), MB_SVC_SELECT_ALL_MEDIA,
2080 strncpy(query_where,
2081 " f.folder_uuid = m.folder_uuid and m.valid=1 and f.valid=1 ",
2082 sizeof(query_where));
2084 strncpy(query_where,
2085 " f.folder_uuid = m.folder_uuid and m.valid=0 and f.valid=0 ",
2086 sizeof(query_where));
2089 if (filter->favorite == MINFO_MEDIA_FAV_ONLY) {
2091 g_strlcat(query_where, " and m.rating = 1 ",
2092 sizeof(query_where));
2093 if (len >= sizeof(query_where)) {
2094 mb_svc_debug("strlcat returns failure ( %d )", len);
2095 return MB_SVC_ERROR_INVALID_PARAMETER;
2097 } else if (filter->favorite == MINFO_MEDIA_UNFAV_ONLY) {
2099 g_strlcat(query_where, " and m.rating = 0 ",
2100 sizeof(query_where));
2101 if (len >= sizeof(query_where)) {
2102 mb_svc_debug("strlcat returns failure ( %d )", len);
2103 return MB_SVC_ERROR_INVALID_PARAMETER;
2107 memset(condition_str, 0x00, sizeof(condition_str));
2109 if (folder_id != NULL) {
2111 snprintf(condition_str, sizeof(condition_str),
2112 " and m.folder_uuid = '%s' ", folder_id);
2114 mb_svc_debug("snprintf returns failure ( %d )", len);
2115 condition_str[0] = '\0';
2117 condition_str[len] = '\0';
2121 g_strlcat(query_where, condition_str, sizeof(query_where));
2122 if (len >= sizeof(query_where)) {
2123 mb_svc_debug("strlcat returns failure ( %d )", len);
2124 return MB_SVC_ERROR_INVALID_PARAMETER;
2128 snprintf(condition_str, sizeof(condition_str),
2129 " and lock_status = 0 ");
2131 mb_svc_debug("snprintf returns failure ( %d )", len);
2132 condition_str[0] = '\0';
2134 condition_str[len] = '\0';
2138 g_strlcat(query_where, condition_str, sizeof(query_where));
2139 if (len >= sizeof(query_where)) {
2140 mb_svc_debug("strlcat returns failure ( %d )", len);
2141 return MB_SVC_ERROR_INVALID_PARAMETER;
2145 memset(condition_str, 0x00, sizeof(condition_str));
2147 if (folder_type != MINFO_CLUSTER_TYPE_ALL) {
2148 switch (folder_type) {
2149 case MINFO_CLUSTER_TYPE_LOCAL_ALL:
2150 snprintf(condition_str, sizeof(condition_str),
2151 " and (storage_type = %d or storage_type = %d)",
2152 MINFO_PHONE, MINFO_MMC);
2154 case MINFO_CLUSTER_TYPE_LOCAL_PHONE:
2155 snprintf(condition_str, sizeof(condition_str),
2156 " and storage_type = %d ", MINFO_PHONE);
2158 case MINFO_CLUSTER_TYPE_LOCAL_MMC:
2159 snprintf(condition_str, sizeof(condition_str),
2160 " and storage_type = %d ", MINFO_MMC);
2162 case MINFO_CLUSTER_TYPE_WEB:
2163 snprintf(condition_str, sizeof(condition_str),
2164 " and storage_type = %d ", MINFO_WEB);
2166 case MINFO_CLUSTER_TYPE_STREAMING:
2167 snprintf(condition_str, sizeof(condition_str),
2168 " and storage_type = %d ",
2169 MINFO_WEB_STREAMING);
2176 g_strlcat(query_where, condition_str, sizeof(query_where));
2177 if (len >= sizeof(query_where)) {
2178 mb_svc_debug("strlcat returns failure ( %d )", len);
2179 return MB_SVC_ERROR_INVALID_PARAMETER;
2183 memset(condition_str, 0x00, sizeof(condition_str));
2185 snprintf(condition_str, sizeof(condition_str),
2186 " and (content_type = 0");
2188 mb_svc_debug("snprintf returns failure ( %d )", len);
2189 condition_str[0] = '\0';
2191 condition_str[len] = '\0';
2194 len = g_strlcat(query_where, condition_str, sizeof(query_where));
2195 if (len >= sizeof(query_where)) {
2196 mb_svc_debug("strlcat returns failure ( %d )", len);
2197 return MB_SVC_ERROR_INVALID_PARAMETER;
2200 memset(condition_str, 0x00, sizeof(condition_str));
2201 if (filter->file_type & MINFO_ITEM_ALL) {
2202 filter->file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO;
2205 if (filter->file_type & MINFO_ITEM_IMAGE) {
2207 snprintf(condition_str, sizeof(condition_str),
2208 " or content_type = %d", MINFO_ITEM_IMAGE);
2210 mb_svc_debug("snprintf returns failure ( %d )", len);
2211 condition_str[0] = '\0';
2213 condition_str[len] = '\0';
2217 len = g_strlcat(query_where, condition_str, sizeof(query_where));
2218 if (len >= sizeof(query_where)) {
2219 mb_svc_debug("strlcat returns failure ( %d )", len);
2220 return MB_SVC_ERROR_INVALID_PARAMETER;
2223 memset(condition_str, 0x00, sizeof(condition_str));
2224 if (filter->file_type & MINFO_ITEM_VIDEO) {
2226 snprintf(condition_str, sizeof(condition_str),
2227 " or content_type = %d", MINFO_ITEM_VIDEO);
2229 mb_svc_debug("snprintf returns failure ( %d )", len);
2230 condition_str[0] = '\0';
2232 condition_str[len] = '\0';
2236 len = g_strlcat(condition_str, ")", sizeof(condition_str));
2237 if (len >= sizeof(condition_str)) {
2238 mb_svc_debug("strlcat returns failure ( %d )", len);
2239 return MB_SVC_ERROR_INVALID_PARAMETER;
2242 len = g_strlcat(query_where, condition_str, sizeof(query_where));
2243 if (len >= sizeof(query_where)) {
2244 mb_svc_debug("strlcat returns failure ( %d )", len);
2245 return MB_SVC_ERROR_INVALID_PARAMETER;
2249 snprintf(query_complete_string, sizeof(query_complete_string),
2250 "%s %s ORDER BY m.%s", query_string, query_where,
2251 mb_svc_media_order[filter->sort_type]);
2253 mb_svc_debug("snprintf returns failure ( %d )", len);
2254 query_complete_string[0] = '\0';
2256 query_complete_string[len] = '\0';
2259 memset(condition_str, 0x00, sizeof(condition_str));
2261 if (filter->start_pos != MB_SVC_DB_DEFAULT_GET_ALL_RECORDS) {/* -1 get all record */
2262 int length = filter->end_pos - filter->start_pos + 1;
2265 ("start position and end position is invalid ( start:%d, end:%d )",
2266 filter->start_pos, filter->end_pos);
2267 return MB_SVC_ERROR_INVALID_PARAMETER;
2271 snprintf(condition_str, sizeof(condition_str),
2272 " LIMIT %d,%d", filter->start_pos, length);
2274 mb_svc_debug("snprintf returns failure ( %d )", len);
2275 condition_str[0] = '\0';
2277 condition_str[len] = '\0';
2280 g_strlcat(query_complete_string, condition_str,
2281 sizeof(query_complete_string));
2282 if (len >= sizeof(query_complete_string)) {
2283 mb_svc_debug("strlcat returns failure ( %d )", len);
2284 return MB_SVC_ERROR_INVALID_PARAMETER;
2288 mb_svc_debug("############### SQL: %s\n", query_complete_string);
2290 mb_svc_iterator->current_position = 0;
2293 sqlite3_prepare_v2(handle, query_complete_string,
2294 strlen(query_complete_string),
2295 &mb_svc_iterator->stmt, NULL);
2296 if (SQLITE_OK != err) {
2297 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
2298 mb_svc_debug("query string is %s\n", query_complete_string);
2299 return MB_SVC_ERROR_DB_INTERNAL;
2306 mb_svc_media_search_iter_start(MediaSvcHandle *mb_svc_handle,
2307 minfo_search_field_t search_field,
2308 const char *search_str,
2309 minfo_folder_type folder_type,
2310 minfo_item_filter filter,
2311 mb_svc_iterator_s *mb_svc_iterator)
2314 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2315 char query_complete_string[MB_SVC_DEFAULT_QUERY_SIZE * 3 + 1] = { 0 };
2316 char query_where[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2317 char condition_str[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2319 char *like_str = NULL;
2320 char *escaped_search_str = NULL;
2321 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
2322 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
2323 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
2324 MB_SVC_TBL_NAME_MEDIA);
2326 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
2327 if (handle == NULL) {
2328 mb_svc_debug("handle is NULL");
2329 return MB_SVC_ERROR_DB_INTERNAL;
2332 if (mb_svc_iterator == NULL) {
2333 mb_svc_debug("Error:mb_svc_iterator == NULL");
2334 return MB_SVC_ERROR_INVALID_PARAMETER;
2337 if (filter.start_pos >= 0 && filter.start_pos > filter.end_pos) {
2338 mb_svc_debug(" filter.start_pos (%d) > filter.end_pos (%d) = %d\n",
2339 filter.start_pos, filter.end_pos);
2340 return MB_SVC_ERROR_INVALID_PARAMETER;
2343 snprintf(query_string, sizeof(query_string), MB_SVC_SELECT_ALL_MEDIA,
2346 strncpy(query_where,
2347 " f.folder_uuid = m.folder_uuid and m.valid=1 and f.valid=1 ",
2348 sizeof(query_where));
2350 if (filter.favorite == MINFO_MEDIA_FAV_ONLY) {
2352 g_strlcat(query_where, " and m.rating = 1 ",
2353 sizeof(query_where));
2354 if (len >= sizeof(query_where)) {
2355 mb_svc_debug("strlcat returns failure ( %d )", len);
2356 return MB_SVC_ERROR_INVALID_PARAMETER;
2358 } else if (filter.favorite == MINFO_MEDIA_UNFAV_ONLY) {
2360 g_strlcat(query_where, " and m.rating = 0 ",
2361 sizeof(query_where));
2362 if (len >= sizeof(query_where)) {
2363 mb_svc_debug("strlcat returns failure ( %d )", len);
2364 return MB_SVC_ERROR_INVALID_PARAMETER;
2368 memset(condition_str, 0x00, sizeof(condition_str));
2370 if (folder_type != MINFO_CLUSTER_TYPE_ALL) {
2371 switch (folder_type) {
2372 case MINFO_CLUSTER_TYPE_LOCAL_ALL:
2373 snprintf(condition_str, sizeof(condition_str),
2374 " and (storage_type = %d or storage_type = %d)",
2375 MINFO_PHONE, MINFO_MMC);
2377 case MINFO_CLUSTER_TYPE_LOCAL_PHONE:
2378 snprintf(condition_str, sizeof(condition_str),
2379 " and storage_type = %d ", MINFO_PHONE);
2381 case MINFO_CLUSTER_TYPE_LOCAL_MMC:
2382 snprintf(condition_str, sizeof(condition_str),
2383 " and storage_type = %d ", MINFO_MMC);
2385 case MINFO_CLUSTER_TYPE_WEB:
2386 snprintf(condition_str, sizeof(condition_str),
2387 " and storage_type = %d ", MINFO_WEB);
2389 case MINFO_CLUSTER_TYPE_STREAMING:
2390 snprintf(condition_str, sizeof(condition_str),
2391 " and storage_type = %d ",
2392 MINFO_WEB_STREAMING);
2399 g_strlcat(query_where, condition_str, sizeof(query_where));
2400 if (len >= sizeof(query_where)) {
2401 mb_svc_debug("strlcat returns failure ( %d )", len);
2402 return MB_SVC_ERROR_INVALID_PARAMETER;
2406 memset(condition_str, 0x00, sizeof(condition_str));
2408 snprintf(condition_str, sizeof(condition_str),
2409 " and (content_type = 0");
2411 mb_svc_debug("snprintf returns failure ( %d )", len);
2412 condition_str[0] = '\0';
2414 condition_str[len] = '\0';
2417 len = g_strlcat(query_where, condition_str, sizeof(query_where));
2418 if (len >= sizeof(query_where)) {
2419 mb_svc_debug("strlcat returns failure ( %d )", len);
2420 return MB_SVC_ERROR_INVALID_PARAMETER;
2423 memset(condition_str, 0x00, sizeof(condition_str));
2424 if (filter.file_type & MINFO_ITEM_ALL) {
2425 filter.file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO;
2428 if (filter.file_type & MINFO_ITEM_IMAGE) {
2430 snprintf(condition_str, sizeof(condition_str),
2431 " or content_type = %d", MINFO_ITEM_IMAGE);
2433 mb_svc_debug("snprintf returns failure ( %d )", len);
2434 condition_str[0] = '\0';
2436 condition_str[len] = '\0';
2440 len = g_strlcat(query_where, condition_str, sizeof(query_where));
2441 if (len >= sizeof(query_where)) {
2442 mb_svc_debug("strlcat returns failure ( %d )", len);
2443 return MB_SVC_ERROR_INVALID_PARAMETER;
2446 memset(condition_str, 0x00, sizeof(condition_str));
2447 if (filter.file_type & MINFO_ITEM_VIDEO) {
2449 snprintf(condition_str, sizeof(condition_str),
2450 " or content_type = %d", MINFO_ITEM_VIDEO);
2452 mb_svc_debug("snprintf returns failure ( %d )", len);
2453 condition_str[0] = '\0';
2455 condition_str[len] = '\0';
2459 len = g_strlcat(condition_str, ") ", sizeof(condition_str));
2460 if (len >= sizeof(condition_str)) {
2461 mb_svc_debug("strlcat returns failure ( %d )", len);
2462 return MB_SVC_ERROR_INVALID_PARAMETER;
2465 len = g_strlcat(query_where, condition_str, sizeof(query_where));
2466 if (len >= sizeof(query_where)) {
2467 mb_svc_debug("strlcat returns failure ( %d )", len);
2468 return MB_SVC_ERROR_INVALID_PARAMETER;
2471 switch (search_field) {
2472 case MINFO_SEARCH_BY_NAME:
2473 like_str = sqlite3_mprintf("and display_name like '%%%s%%' ", search_str);
2475 case MINFO_SEARCH_BY_PATH:
2476 like_str = sqlite3_mprintf("and path like '%%%s%%' ", search_str);
2478 case MINFO_SEARCH_BY_HTTP_URL:
2479 like_str = sqlite3_mprintf("and http_url like '%%%s%%' ", search_str);
2486 if (search_field & MINFO_SEARCH_BY_NAME) {
2487 like_str = sqlite3_mprintf("and (display_name like '%%%q%%' ", search_str);
2489 len = g_strlcat(query_where, like_str, sizeof(query_where));
2490 sqlite3_free(like_str);
2492 if (len >= sizeof(query_where)) {
2493 mb_svc_debug("strlcat returns failure ( %d )", len);
2494 return MB_SVC_ERROR_INVALID_PARAMETER;
2498 if (search_field & MINFO_SEARCH_BY_PATH) {
2499 if (search_field & MINFO_SEARCH_BY_NAME) {
2500 like_str = sqlite3_mprintf("or m.path like '%%%q%%' ", search_str);
2502 like_str = sqlite3_mprintf("and (m.path like '%%%q%%' ", search_str);
2505 len = g_strlcat(query_where, like_str, sizeof(query_where));
2506 sqlite3_free(like_str);
2508 if (len >= sizeof(query_where)) {
2509 mb_svc_debug("strlcat returns failure ( %d )", len);
2510 return MB_SVC_ERROR_INVALID_PARAMETER;
2514 if (search_field & MINFO_SEARCH_BY_HTTP_URL) {
2515 if ((search_field & MINFO_SEARCH_BY_NAME) || (search_field & MINFO_SEARCH_BY_PATH)) {
2516 like_str = sqlite3_mprintf("or http_url like '%%%q%%' ", search_str);
2518 like_str = sqlite3_mprintf("and (http_url like '%%%q%%' ", search_str);
2521 len = g_strlcat(query_where, like_str, sizeof(query_where));
2522 sqlite3_free(like_str);
2524 if (len >= sizeof(query_where)) {
2525 mb_svc_debug("strlcat returns failure ( %d )", len);
2526 return MB_SVC_ERROR_INVALID_PARAMETER;
2530 escaped_search_str = _media_svc_escape_str((char *)search_str, strlen(search_str));
2531 if (escaped_search_str == NULL) {
2532 mb_svc_debug("Failed to escape");
2533 return MB_SVC_ERROR_INVALID_PARAMETER;
2536 if (search_field & MINFO_SEARCH_BY_NAME) {
2537 like_str = sqlite3_mprintf("and (display_name like '%%%q%%' ESCAPE('#') ", escaped_search_str);
2539 len = g_strlcat(query_where, like_str, sizeof(query_where));
2540 sqlite3_free(like_str);
2542 if (len >= sizeof(query_where)) {
2543 mb_svc_debug("strlcat returns failure ( %d )", len);
2544 return MB_SVC_ERROR_INVALID_PARAMETER;
2548 if (search_field & MINFO_SEARCH_BY_PATH) {
2549 if (search_field & MINFO_SEARCH_BY_NAME) {
2550 like_str = sqlite3_mprintf("or m.path like '%%%q%%' ESCAPE('#') ", escaped_search_str);
2552 like_str = sqlite3_mprintf("and (m.path like '%%%q%%' ESCAPE('#') ", escaped_search_str);
2555 len = g_strlcat(query_where, like_str, sizeof(query_where));
2556 sqlite3_free(like_str);
2558 if (len >= sizeof(query_where)) {
2559 mb_svc_debug("strlcat returns failure ( %d )", len);
2560 return MB_SVC_ERROR_INVALID_PARAMETER;
2564 if (search_field & MINFO_SEARCH_BY_HTTP_URL) {
2565 if ((search_field & MINFO_SEARCH_BY_NAME) || (search_field & MINFO_SEARCH_BY_PATH)) {
2566 like_str = sqlite3_mprintf("or http_url like '%%%q%%' ESCAPE('#') ", escaped_search_str);
2568 like_str = sqlite3_mprintf("and (http_url like '%%%q%%' ESCAPE('#') ", escaped_search_str);
2571 len = g_strlcat(query_where, like_str, sizeof(query_where));
2572 sqlite3_free(like_str);
2574 if (len >= sizeof(query_where)) {
2575 mb_svc_debug("strlcat returns failure ( %d )", len);
2576 return MB_SVC_ERROR_INVALID_PARAMETER;
2580 if (escaped_search_str) free(escaped_search_str);
2582 len = g_strlcat(query_where, ") ", sizeof(query_where));
2584 if (len >= sizeof(query_where)) {
2585 mb_svc_debug("strlcat returns failure ( %d )", len);
2586 return MB_SVC_ERROR_INVALID_PARAMETER;
2590 snprintf(query_complete_string, sizeof(query_complete_string),
2591 "%s %s ORDER BY m.%s", query_string, query_where,
2592 mb_svc_media_order[filter.sort_type]);
2594 mb_svc_debug("snprintf returns failure ( %d )", len);
2595 query_complete_string[0] = '\0';
2597 query_complete_string[len] = '\0';
2600 memset(condition_str, 0x00, sizeof(condition_str));
2602 if (filter.start_pos != MB_SVC_DB_DEFAULT_GET_ALL_RECORDS) {/* -1 get all record */
2603 int length = filter.end_pos - filter.start_pos + 1;
2606 ("start position and end position is invalid ( start:%d, end:%d )",
2607 filter.start_pos, filter.end_pos);
2608 return MB_SVC_ERROR_INVALID_PARAMETER;
2612 snprintf(condition_str, sizeof(condition_str),
2613 " LIMIT %d,%d", filter.start_pos, length);
2615 mb_svc_debug("snprintf returns failure ( %d )", len);
2616 condition_str[0] = '\0';
2618 condition_str[len] = '\0';
2621 g_strlcat(query_complete_string, condition_str,
2622 sizeof(query_complete_string));
2623 if (len >= sizeof(query_complete_string)) {
2624 mb_svc_debug("strlcat returns failure ( %d )", len);
2625 return MB_SVC_ERROR_INVALID_PARAMETER;
2629 mb_svc_debug("############### SQL: %s\n", query_complete_string);
2631 mb_svc_iterator->current_position = 0;
2634 sqlite3_prepare_v2(handle, query_complete_string,
2635 strlen(query_complete_string),
2636 &mb_svc_iterator->stmt, NULL);
2637 if (SQLITE_OK != err) {
2638 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
2639 mb_svc_debug("query string is %s\n", query_complete_string);
2640 return MB_SVC_ERROR_DB_INTERNAL;
2647 mb_svc_media_iter_next(mb_svc_iterator_s *mb_svc_iterator,
2648 mb_svc_media_record_s *record)
2652 /* mb_svc_debug ("mb_svc_media_iter_next--enter\n"); */
2654 if (mb_svc_iterator == NULL) {
2655 mb_svc_debug("mb_svc_iterator == NULL || record == NULL\n");
2656 return MB_SVC_ERROR_INVALID_PARAMETER;
2659 err = sqlite3_step(mb_svc_iterator->stmt);
2660 if (err != SQLITE_ROW) {
2661 mb_svc_debug("end of iteration : count = %d\n",
2662 mb_svc_iterator->current_position);
2663 return MB_SVC_NO_RECORD_ANY_MORE;
2667 err = mb_svc_load_record_media(mb_svc_iterator->stmt, record);
2669 mb_svc_debug("failed to load item\n");
2670 sqlite3_finalize(mb_svc_iterator->stmt);
2671 mb_svc_iterator->current_position = -1;
2672 return MB_SVC_ERROR_DB_INTERNAL;
2675 mb_svc_iterator->current_position++;
2680 int mb_svc_iter_finish(mb_svc_iterator_s *mb_svc_iterator)
2684 /* mb_svc_debug ("mb_svc_iter_finish---enter\n"); */
2686 if (mb_svc_iterator == NULL) {
2687 mb_svc_debug("Error:mb_svc_iterator == NULL \n");
2688 return MB_SVC_ERROR_INVALID_PARAMETER;
2691 err = sqlite3_finalize(mb_svc_iterator->stmt);
2692 if (SQLITE_OK != err) {
2693 mb_svc_debug("failed to clear row\n");
2694 return MB_SVC_ERROR_DB_INTERNAL;
2697 mb_svc_iterator->current_position = -1;
2698 mb_svc_iterator->total_count = -1;
2699 mb_svc_iterator->stmt = NULL;
2701 /* mb_svc_debug ("mb_svc_iter_finish---leave\n"); */
2706 mb_svc_get_video_record_by_media_id(MediaSvcHandle *mb_svc_handle,
2707 const char *media_id,
2708 mb_svc_video_meta_record_s *
2713 char *table_name = MB_SVC_TBL_NAME_VIDEO_META;
2714 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2715 sqlite3_stmt *p_Stmt_mb = NULL;
2717 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
2718 if (handle == NULL) {
2719 mb_svc_debug("handle is NULL");
2720 return MB_SVC_ERROR_DB_INTERNAL;
2723 if (video_meta_record == NULL) {
2724 mb_svc_debug("folder path is null \n");
2725 return MB_SVC_ERROR_INVALID_PARAMETER;
2728 snprintf(query_string, sizeof(query_string),
2729 MB_SVC_TABLE_SELECT_VIDEO_BY_MUUID, table_name,
2732 mb_svc_debug("Query: %s", query_string);
2735 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
2737 if (SQLITE_OK != err) {
2738 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
2739 return MB_SVC_ERROR_DB_INTERNAL;
2741 err = sqlite3_step(p_Stmt_mb);
2742 if (err != SQLITE_ROW) {
2743 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
2744 sqlite3_finalize(p_Stmt_mb);
2745 return MB_SVC_ERROR_DB_INTERNAL;
2747 mb_svc_load_record_video_meta(p_Stmt_mb, video_meta_record);
2749 sqlite3_finalize(p_Stmt_mb);
2757 * get video by media_id from "video_meta" table,
2758 * condition: each video_meta record mapped to media_id one by one
2761 mb_svc_get_image_record_by_media_id(MediaSvcHandle *mb_svc_handle,
2762 const char *media_id,
2763 mb_svc_image_meta_record_s *
2768 char *table_name = MB_SVC_TBL_NAME_IMAGE_META;
2769 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2770 sqlite3_stmt *stmt = NULL;
2772 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
2773 if (handle == NULL) {
2774 mb_svc_debug("handle is NULL");
2775 return MB_SVC_ERROR_DB_INTERNAL;
2778 if (image_meta_record == NULL) {
2779 mb_svc_debug("folder path is null \n");
2780 return MB_SVC_ERROR_INVALID_PARAMETER;
2783 snprintf(query_string, sizeof(query_string),
2784 MB_SVC_TABLE_SELECT_IMAGE_BY_MUUID, table_name,
2787 mb_svc_debug("Query: %s", query_string);
2790 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
2792 if (SQLITE_OK != err) {
2793 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
2794 return MB_SVC_ERROR_DB_INTERNAL;
2796 err = sqlite3_step(stmt);
2797 if (err != SQLITE_ROW) {
2798 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
2799 sqlite3_finalize(stmt);
2800 return MB_SVC_ERROR_DB_INTERNAL;
2802 mb_svc_load_record_image_meta(stmt, image_meta_record);
2804 sqlite3_finalize(stmt);
2811 mb_svc_get_folder_fullpath_by_folder_id(MediaSvcHandle *mb_svc_handle, const char *folder_id, char *folder_fullpath,
2815 char *table_name = MB_SVC_TBL_NAME_FOLDER;
2816 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2817 sqlite3_stmt *stmt = NULL;
2818 char uri[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
2822 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
2823 if (handle == NULL) {
2824 mb_svc_debug("handle is NULL");
2825 return MB_SVC_ERROR_DB_INTERNAL;
2828 if (folder_fullpath == NULL) {
2829 mb_svc_debug("folder path is null \n");
2830 return MB_SVC_ERROR_INVALID_PARAMETER;
2834 snprintf(query_string, sizeof(query_string),
2835 MB_SVC_TABLE_SELECT_FOLDER_URI_BY_FUUID,
2836 table_name, folder_id);
2838 if (ret_len >= sizeof(query_string)) {
2839 mb_svc_debug("the query string's length is violation!\n");
2840 return MB_SVC_ERROR_INTERNAL;
2841 } else if (ret_len < 0) {
2842 mb_svc_debug("snprintf failed!\n");
2843 return MB_SVC_ERROR_INTERNAL;
2846 mb_svc_debug("Query : %s", query_string);
2849 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
2851 if (SQLITE_OK != err) {
2852 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
2853 mb_svc_debug("query string is %s\n", query_string);
2854 return MB_SVC_ERROR_DB_INTERNAL;
2856 err = sqlite3_step(stmt);
2857 if (err != SQLITE_ROW) {
2858 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
2859 sqlite3_finalize(stmt);
2860 return MB_SVC_ERROR_DB_INTERNAL;
2863 /* only one field(uri) selected, so the second para of *_text is int 0, means the first one of the selected result. */
2864 tmp = (char *)sqlite3_column_text(stmt, 0);
2865 if (strlen(tmp) >= sizeof(uri)) {
2866 mb_svc_debug("real uri's length is violation!\n");
2867 return MB_SVC_ERROR_INTERNAL;
2870 strncpy(uri, (const char *)tmp, sizeof(uri)); /* get path of folder */
2871 strncpy(folder_fullpath, uri, max_length);
2872 mb_svc_debug("Full path : %s", folder_fullpath);
2874 sqlite3_finalize(stmt);
2880 mb_svc_get_media_fullpath(MediaSvcHandle *mb_svc_handle, const char *folder_id, char *media_display_name,
2881 char *media_fullpath)
2884 char folder_fullpath[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
2886 if (media_display_name == NULL || media_fullpath == NULL) {
2887 mb_svc_debug("Error: NULL pointer \n");
2888 return MB_SVC_ERROR_INVALID_PARAMETER;
2891 mb_svc_get_folder_fullpath_by_folder_id(mb_svc_handle, folder_id, folder_fullpath,
2892 sizeof(folder_fullpath));
2894 mb_svc_debug("get folder fullpath error\n");
2898 strncat(folder_fullpath, "/",
2899 MB_SVC_FILE_PATH_LEN_MAX - strlen(folder_fullpath));
2900 strncat(folder_fullpath, media_display_name,
2901 MB_SVC_FILE_PATH_LEN_MAX - strlen(folder_fullpath));
2902 strncpy(media_fullpath, folder_fullpath, MB_SVC_FILE_PATH_LEN_MAX);
2908 mb_svc_folder_iter_start(MediaSvcHandle *mb_svc_handle, minfo_cluster_filter *cluster_filter,
2909 mb_svc_iterator_s *mb_svc_iterator)
2912 char *table_name = MB_SVC_TBL_NAME_FOLDER;
2913 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2914 char query_where[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2915 char tmp_str[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2917 mb_svc_debug("mb_svc_folder_iter_start--enter\n");
2919 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
2920 if (handle == NULL) {
2921 mb_svc_debug("handle is NULL");
2922 return MB_SVC_ERROR_DB_INTERNAL;
2925 if (cluster_filter == NULL || mb_svc_iterator == NULL) {
2927 ("cluster_filter == NULL || mb_svc_iterator == NULL\n");
2928 return MB_SVC_ERROR_INVALID_PARAMETER;
2931 if (cluster_filter->start_pos >= 0
2932 && cluster_filter->start_pos > cluster_filter->end_pos) {
2933 mb_svc_debug(" cluster_filter->start_pos (%d) > cluster_filter->end_pos (%d) = %d\n",
2934 cluster_filter->start_pos, cluster_filter->end_pos);
2935 return MB_SVC_ERROR_INVALID_PARAMETER;
2937 strncpy(query_where, " WHERE valid = 1 ", MB_SVC_DEFAULT_QUERY_SIZE);
2939 snprintf(query_string, MB_SVC_DEFAULT_QUERY_SIZE,
2940 MB_SVC_TABLE_SELECT_FOLDER_ALL_QUERY_STRING, table_name);
2942 if (cluster_filter->cluster_type != MINFO_CLUSTER_TYPE_ALL) {
2943 switch (cluster_filter->cluster_type) {
2944 case MINFO_CLUSTER_TYPE_LOCAL_ALL:
2945 snprintf(tmp_str, sizeof(tmp_str),
2946 " and (storage_type = %d or storage_type = %d)",
2947 MINFO_PHONE, MINFO_MMC);
2949 case MINFO_CLUSTER_TYPE_LOCAL_PHONE:
2950 snprintf(tmp_str, sizeof(tmp_str),
2951 " and storage_type = %d ", MINFO_PHONE);
2953 case MINFO_CLUSTER_TYPE_LOCAL_MMC:
2954 snprintf(tmp_str, sizeof(tmp_str),
2955 " and storage_type = %d ", MINFO_MMC);
2957 case MINFO_CLUSTER_TYPE_WEB:
2958 snprintf(tmp_str, sizeof(tmp_str),
2959 " and storage_type = %d ", MINFO_WEB);
2961 case MINFO_CLUSTER_TYPE_STREAMING:
2962 snprintf(tmp_str, sizeof(tmp_str),
2963 " and storage_type = %d ",
2964 MINFO_WEB_STREAMING);
2969 strncat(query_where, tmp_str,
2970 MB_SVC_DEFAULT_QUERY_SIZE - strlen(tmp_str));
2972 strncat(query_string, query_where,
2973 MB_SVC_DEFAULT_QUERY_SIZE - strlen(query_string));
2974 strncat(query_string, " ORDER BY ",
2975 MB_SVC_DEFAULT_QUERY_SIZE - strlen(query_string));
2976 strncat(query_string, mb_svc_folder_order[cluster_filter->sort_type],
2977 MB_SVC_DEFAULT_QUERY_SIZE - strlen(query_string));
2979 if (cluster_filter->start_pos != MB_SVC_DB_DEFAULT_GET_ALL_RECORDS) {/* -1 get all record */
2981 cluster_filter->end_pos - cluster_filter->start_pos + 1;
2984 ("start position and end position is invalid ( start:%d, end:%d )",
2985 cluster_filter->start_pos,
2986 cluster_filter->end_pos);
2987 return MB_SVC_ERROR_INVALID_PARAMETER;
2990 snprintf(tmp_str, sizeof(tmp_str), " LIMIT %d,%d",
2991 cluster_filter->start_pos, length);
2992 strcat(query_string, tmp_str);
2995 mb_svc_debug("############### SQL: %s\n", query_string);
2997 mb_svc_iterator->current_position = 0;
3000 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
3001 &mb_svc_iterator->stmt, NULL);
3002 if (SQLITE_OK != err) {
3003 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
3004 mb_svc_debug("query string is %s\n", query_string);
3005 return MB_SVC_ERROR_DB_INTERNAL;
3011 static int __mb_svc_folder_by_path_iter_start(MediaSvcHandle *mb_svc_handle, char *parent_path, mb_svc_iterator_s *mb_svc_iterator)
3015 if (parent_path == NULL || mb_svc_iterator == NULL) {
3016 mb_svc_debug("parent_path == NULL || mb_svc_iterator == NULL");
3017 return MB_SVC_ERROR_INVALID_PARAMETER;
3021 char *query_string = NULL;
3022 char path_like[MB_SVC_FILE_PATH_LEN_MAX + 1];
3024 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
3025 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
3026 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
3027 MB_SVC_TBL_NAME_FOLDER);
3028 snprintf(path_like, sizeof(path_like), "%s/%%", parent_path);
3030 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3031 if (handle == NULL) {
3032 mb_svc_debug("handle is NULL");
3033 return MB_SVC_ERROR_DB_INTERNAL;
3037 sqlite3_mprintf(MB_SVC_SELECT_FOLDER_BY_PATH, table_name,
3038 parent_path, path_like);
3039 mb_svc_debug("############### SQL: %s\n", query_string);
3041 mb_svc_iterator->current_position = 0;
3044 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
3045 &mb_svc_iterator->stmt, NULL);
3046 if (SQLITE_OK != err) {
3047 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
3048 mb_svc_debug("query string is %s\n", query_string);
3049 return MB_SVC_ERROR_DB_INTERNAL;
3056 mb_svc_folder_iter_next(mb_svc_iterator_s *mb_svc_iterator,
3057 mb_svc_folder_record_s *record)
3061 if (mb_svc_iterator == NULL) {
3062 mb_svc_debug("pointer mb_svc_iterator is null\n");
3063 return MB_SVC_ERROR_INVALID_PARAMETER;
3066 err = sqlite3_step(mb_svc_iterator->stmt);
3067 if (err != SQLITE_ROW) {
3068 mb_svc_debug("end of iteration : count = %d\n",
3069 mb_svc_iterator->current_position);
3070 return MB_SVC_NO_RECORD_ANY_MORE;
3074 err = mb_svc_load_record_folder(mb_svc_iterator->stmt, record);
3076 mb_svc_debug("failed to load item\n");
3077 sqlite3_finalize(mb_svc_iterator->stmt);
3078 mb_svc_iterator->current_position = -1;
3079 return MB_SVC_ERROR_DB_INTERNAL;
3083 mb_svc_iterator->current_position++;
3090 * get folder content count from media table according to specified folder ID
3092 int mb_svc_get_folder_content_count_by_folder_id(MediaSvcHandle *mb_svc_handle, const char *folder_id)
3094 char q_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
3096 sqlite3_stmt *stmt = NULL;
3100 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3101 if (handle == NULL) {
3102 mb_svc_debug("handle is NULL");
3103 return MB_SVC_ERROR_DB_INTERNAL;
3106 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
3107 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
3110 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
3111 MB_SVC_TBL_NAME_MEDIA);
3113 snprintf(q_string, sizeof(q_string),
3114 MB_SVC_FOLDER_CONTENT_COUNT_BY_FUUID, table_name,
3117 mb_svc_debug("Query : %s", q_string);
3120 sqlite3_prepare_v2(handle, q_string, strlen(q_string), &stmt, NULL);
3121 if (SQLITE_OK != err) {
3122 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3123 mb_svc_debug("query string is %s\n", q_string);
3124 return MB_SVC_ERROR_DB_INTERNAL;
3127 rc = sqlite3_step(stmt);
3128 while (rc == SQLITE_ROW) {
3129 count = sqlite3_column_int(stmt, 0);
3130 rc = sqlite3_step(stmt);
3132 sqlite3_finalize(stmt);
3135 mb_svc_debug("record count of table %s is %d\n", table_name, count);
3140 * caller need to provide memory space for storing bookmark_record
3143 mb_svc_get_bookmark_record_by_id(MediaSvcHandle *mb_svc_handle,
3145 mb_svc_bookmark_record_s *record)
3147 sqlite3_stmt *stmt = NULL;
3149 char *table_name = MB_SVC_TBL_NAME_BOOKMARK;
3150 char q_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
3152 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3153 if (handle == NULL) {
3154 mb_svc_debug("handle is NULL");
3155 return MB_SVC_ERROR_DB_INTERNAL;
3158 if (record == NULL) {
3159 mb_svc_debug(" record pointer is null\n");
3160 return MB_SVC_ERROR_INVALID_PARAMETER;
3164 snprintf(q_string, sizeof(q_string),
3165 MB_SVC_TABLE_SELECT_BOOKMARK_BY_BID_QUERY_STRING,
3166 table_name, record_id);
3168 mb_svc_debug("snprintf returns failure ( %d )", len);
3171 q_string[len] = '\0';
3174 mb_svc_debug("Query: %s", q_string);
3177 sqlite3_prepare_v2(handle, q_string, strlen(q_string), &stmt, NULL);
3178 if (SQLITE_OK != err) {
3179 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3180 mb_svc_debug("query string is %s\n", q_string);
3181 return MB_SVC_ERROR_DB_INTERNAL;
3183 err = sqlite3_step(stmt);
3184 if (err != SQLITE_ROW) {
3185 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
3186 mb_svc_debug("query string is %s\n", q_string);
3187 sqlite3_finalize(stmt);
3188 return MB_SVC_ERROR_DB_INTERNAL;
3190 mb_svc_load_record_bookmark(stmt, record);
3191 mb_svc_debug(" bookmark record thumbnail path = %s\n",
3192 record->thumbnail_path);
3194 sqlite3_finalize(stmt);
3201 * caller need to provide memory space for storing bookmark_record
3203 int mb_svc_get_media_tag_by_id(MediaSvcHandle *mb_svc_handle, int _id, mb_svc_tag_record_s *mtag_record)
3205 sqlite3_stmt *stmt = NULL;
3207 char *table_name = MB_SVC_TBL_NAME_TAG;
3208 char q_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
3210 if (mtag_record == NULL) {
3211 mb_svc_debug(" record pointer is null\n");
3212 return MB_SVC_ERROR_INVALID_PARAMETER;
3215 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3216 if (handle == NULL) {
3217 mb_svc_debug("handle is NULL");
3218 return MB_SVC_ERROR_DB_INTERNAL;
3221 snprintf(q_string, sizeof(q_string),
3222 MB_SVC_TABLE_SELECT_TAG_BY_TID_QUERY_STRING, table_name, _id);
3223 mb_svc_debug("Query: %s", q_string);
3226 sqlite3_prepare_v2(handle, q_string, strlen(q_string), &stmt, NULL);
3227 if (SQLITE_OK != err) {
3228 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3229 mb_svc_debug("query string is %s\n", q_string);
3230 return MB_SVC_ERROR_DB_INTERNAL;
3232 err = sqlite3_step(stmt);
3233 if (err != SQLITE_ROW) {
3234 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
3235 mb_svc_debug("query string is %s\n", q_string);
3236 sqlite3_finalize(stmt);
3237 return MB_SVC_ERROR_DB_INTERNAL;
3239 mb_svc_load_record_tag(stmt, mtag_record);
3240 mb_svc_debug(" tag record tag name = %s and media_id is %s!\n",
3241 mtag_record->tag_name, mtag_record->media_uuid);
3243 sqlite3_finalize(stmt);
3250 mb_svc_get_web_album_cluster_record(MediaSvcHandle *mb_svc_handle,
3253 const char *account_id,
3254 const char *album_id,
3255 mb_svc_folder_record_s *folder_record)
3258 sqlite3_stmt *stmt = NULL;
3259 char *table_name = MB_SVC_TBL_NAME_FOLDER;
3260 char *query_string = NULL;
3262 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3263 if (handle == NULL) {
3264 mb_svc_debug("handle is NULL");
3265 return MB_SVC_ERROR_DB_INTERNAL;
3268 if(album_id == NULL) {
3269 query_string = sqlite3_mprintf(MB_SVC_TABLE_SELECT_WEB_CLUSTER_RECORD_QUERY_STRING,
3270 table_name, sns_type, name, account_id);
3272 query_string = sqlite3_mprintf(MB_SVC_TABLE_SELECT_WEB_ALBUM_CLUSTER_RECORD_QUERY_STRING,
3273 table_name, sns_type, name, account_id, album_id);
3276 err = sqlite3_prepare_v2(handle, query_string, strlen(query_string), &stmt, NULL);
3277 if (SQLITE_OK != err) {
3278 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3279 mb_svc_debug("query string is %s\n", query_string);
3280 sqlite3_free(query_string);
3281 return MB_SVC_ERROR_DB_INTERNAL;
3283 err = sqlite3_step(stmt);
3284 if (err != SQLITE_ROW) {
3285 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
3286 mb_svc_debug("query string is %s\n", query_string);
3287 sqlite3_free(query_string);
3288 sqlite3_finalize(stmt);
3289 return MB_SVC_ERROR_DB_INTERNAL;
3291 err = mb_svc_load_record_folder(stmt, folder_record);
3293 mb_svc_debug("mb-svc load data failed");
3294 sqlite3_free(query_string);
3295 sqlite3_finalize(stmt);
3296 return MB_SVC_ERROR_DB_INTERNAL;
3299 sqlite3_free(query_string);
3300 sqlite3_finalize(stmt);
3306 mb_svc_get_folder_list_by_web_account_id(MediaSvcHandle *mb_svc_handle,
3308 GList **p_record_list)
3311 mb_svc_folder_record_s *fd_record;
3313 GList *l_record_list = NULL;
3314 mb_svc_iterator_s mb_svc_iterator;
3315 minfo_cluster_filter cluster_filter = { 0 };
3317 if (web_account == NULL || p_record_list == NULL) {
3319 ("Error: web_account == NULL || p_record_list == NULL\n");
3320 return MB_SVC_ERROR_INVALID_PARAMETER;
3323 cluster_filter.cluster_type = MINFO_CLUSTER_TYPE_WEB;
3324 cluster_filter.sort_type = MINFO_CLUSTER_SORT_BY_NONE;
3325 cluster_filter.start_pos = MB_SVC_DB_DEFAULT_GET_ALL_RECORDS;
3327 err = mb_svc_folder_iter_start(mb_svc_handle, &cluster_filter, &mb_svc_iterator);
3329 if (err == MB_SVC_ERROR_DB_NO_RECORD) {
3331 } else if (err < 0) {
3332 mb_svc_debug("mb-svc iterator start failed\n");
3333 return MB_SVC_ERROR_DB_INTERNAL;
3338 (mb_svc_folder_record_s *)
3339 malloc(sizeof(mb_svc_folder_record_s));
3340 if (fd_record == NULL) {
3341 mb_svc_debug("allocate memory failed\n");
3342 mb_svc_iter_finish(&mb_svc_iterator);
3343 return MB_SVC_ERROR_OUT_OF_MEMORY;
3345 memset(fd_record, 0x00, sizeof(mb_svc_folder_record_s));
3347 err = mb_svc_folder_iter_next(&mb_svc_iterator, fd_record);
3348 if (err == MB_SVC_NO_RECORD_ANY_MORE) {
3356 ("mb-svc iterator get next recrod failed\n");
3357 mb_svc_iter_finish(&mb_svc_iterator);
3362 if (strcmp(fd_record->web_account_id, web_account)) {
3365 ("mb-svc iterator -------different get next\n ");
3370 l_record_list = g_list_append(l_record_list, fd_record);
3373 mb_svc_iter_finish(&mb_svc_iterator);
3374 *p_record_list = l_record_list;
3376 if (record_cnt == 0)
3377 return MB_SVC_ERROR_DB_NO_RECORD;
3382 static int __mb_svc_get_folder_record_by_path_info(MediaSvcHandle *mb_svc_handle,
3385 minfo_store_type storage_type,
3386 mb_svc_folder_record_s *record)
3389 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
3390 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
3391 char *query_string = NULL;
3393 sqlite3_stmt *stmt = NULL;
3394 if (record == NULL || uri == NULL || display_name == NULL) {
3395 mb_svc_debug("pointer image_meta_record is null\n");
3396 return MB_SVC_ERROR_INVALID_PARAMETER;
3399 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3400 if (handle == NULL) {
3401 mb_svc_debug("handle is NULL");
3402 return MB_SVC_ERROR_DB_INTERNAL;
3405 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
3406 MB_SVC_TBL_NAME_FOLDER);
3408 query_string = sqlite3_mprintf(MB_SVC_TABLE_SELECT_FOLDER_BY_PATH_INFO,
3409 table_name, uri, display_name, storage_type);
3412 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
3414 if (SQLITE_OK != err) {
3415 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3416 mb_svc_debug("query string is %s\n", query_string);
3417 sqlite3_free(query_string);
3418 return MB_SVC_ERROR_DB_INTERNAL;
3420 err = sqlite3_step(stmt);
3421 if (err != SQLITE_ROW) {
3422 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
3423 mb_svc_debug("query string is %s\n", query_string);
3424 sqlite3_free(query_string);
3425 sqlite3_finalize(stmt);
3426 return MB_SVC_ERROR_DB_INTERNAL;
3428 err = mb_svc_load_record_folder(stmt, record);
3430 mb_svc_debug("mb-svc load data failed");
3431 sqlite3_free(query_string);
3432 sqlite3_finalize(stmt);
3433 return MB_SVC_ERROR_DB_INTERNAL;
3436 sqlite3_free(query_string);
3437 sqlite3_finalize(stmt);
3442 static int __mb_svc_get_folder_record_by_full_path(
3443 MediaSvcHandle *mb_svc_handle,
3444 const char *folder_full_path,
3445 mb_svc_folder_record_s *folder_record)
3447 minfo_store_type store_type = MINFO_SYSTEM;
3449 char display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
3451 if (folder_full_path == NULL || folder_record == NULL) {
3453 ("Error:folder_full_path == NULL || folder_record == NULL\n");
3454 return MB_SVC_ERROR_INVALID_PARAMETER;
3457 store_type = _mb_svc_get_store_type_by_full(folder_full_path);
3458 if (store_type == MB_SVC_ERROR_INTERNAL) {
3459 mb_svc_debug("Failed to get storage type : %s",
3461 return MB_SVC_ERROR_INVALID_PARAMETER;
3464 _mb_svc_get_dir_display_name(folder_full_path, display_name);
3466 err = __mb_svc_get_folder_record_by_path_info(mb_svc_handle, folder_full_path, display_name, store_type, folder_record);
3469 ("Error:get folder record via uri and display name failed\n");
3477 mb_svc_get_folder_id_by_full_path(MediaSvcHandle *mb_svc_handle, const char *folder_full_path, char *folder_id, int max_length)
3479 minfo_store_type store_type = MINFO_SYSTEM;
3481 char display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
3482 char rel_path[MB_SVC_FILE_PATH_LEN_MAX + 1] = { 0 };
3483 char *table_name = MB_SVC_TBL_NAME_FOLDER;
3484 char *query_string = NULL;
3485 sqlite3_stmt *stmt = NULL;
3487 if (folder_full_path == NULL || folder_id == NULL) {
3489 ("Error:folder_full_path == NULL || folder_id == NULL\n");
3490 return MB_SVC_ERROR_INVALID_PARAMETER;
3493 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3494 if (handle == NULL) {
3495 mb_svc_debug("handle is NULL");
3496 return MB_SVC_ERROR_DB_INTERNAL;
3499 store_type = _mb_svc_get_store_type_by_full(folder_full_path);
3500 if (store_type == MB_SVC_ERROR_INTERNAL) {
3501 mb_svc_debug("Failed to get storage type : %s",
3503 return MB_SVC_ERROR_INVALID_PARAMETER;
3506 _mb_svc_get_rel_path_by_full(folder_full_path, rel_path);
3507 _mb_svc_get_dir_display_name(rel_path, display_name);
3509 query_string = sqlite3_mprintf(MB_SVC_TABLE_SELECT_FOLDER_UUID_BY_PATH_INFO,
3510 table_name, folder_full_path, display_name, store_type);
3512 mb_svc_debug("Query : %s", query_string);
3515 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
3517 if (SQLITE_OK != err) {
3518 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3519 mb_svc_debug("query string is %s\n", query_string);
3520 sqlite3_free(query_string);
3521 return MB_SVC_ERROR_DB_INTERNAL;
3523 err = sqlite3_step(stmt);
3524 if (err != SQLITE_ROW) {
3525 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
3526 mb_svc_debug("query string is %s\n", query_string);
3527 sqlite3_free(query_string);
3528 sqlite3_finalize(stmt);
3529 return MB_SVC_ERROR_DB_INTERNAL;
3532 strncpy(folder_id, (const char *)sqlite3_column_text(stmt, 0), max_length);
3534 sqlite3_free(query_string);
3535 sqlite3_finalize(stmt);
3541 mb_svc_get_folder_id_by_web_album_id(MediaSvcHandle *mb_svc_handle, const char *web_album_id, char *folder_id)
3544 char *table_name = MB_SVC_TBL_NAME_FOLDER;
3545 char *query_string = NULL;
3546 sqlite3_stmt *stmt = NULL;
3548 if (web_album_id == NULL || folder_id == NULL) {
3550 ("Error:web_album_id == NULL || folder_id == NULL\n");
3551 return MB_SVC_ERROR_INVALID_PARAMETER;
3554 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3555 if (handle == NULL) {
3556 mb_svc_debug("handle is NULL");
3557 return MB_SVC_ERROR_DB_INTERNAL;
3560 query_string = sqlite3_mprintf(MB_SVC_TABLE_SELECT_FOLDER_UUID_BY_WEB_ALBUM_ID_QUERY_STRING,
3561 table_name, web_album_id);
3564 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
3566 if (SQLITE_OK != err) {
3567 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3568 mb_svc_debug("query string is %s\n", query_string);
3569 sqlite3_free(query_string);
3570 return MB_SVC_ERROR_DB_INTERNAL;
3572 err = sqlite3_step(stmt);
3573 if (err != SQLITE_ROW) {
3574 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
3575 mb_svc_debug("query string is %s\n", query_string);
3576 sqlite3_free(query_string);
3577 sqlite3_finalize(stmt);
3578 return MB_SVC_ERROR_DB_INTERNAL;
3581 strncpy(folder_id, (const char *)sqlite3_column_text(stmt, 0), MB_SVC_UUID_LEN_MAX + 1);
3583 sqlite3_free(query_string);
3584 sqlite3_finalize(stmt);
3588 static int __mb_svc_get_media_id_by_fid_name(MediaSvcHandle *mb_svc_handle, const char *folder_id, char *display_name, char *media_id)
3591 char *query_string = NULL;
3592 sqlite3_stmt *stmt = NULL;
3593 char *table_name = MB_SVC_TBL_NAME_MEDIA;
3595 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3596 if (handle == NULL) {
3597 mb_svc_debug("handle is NULL");
3598 return MB_SVC_ERROR_DB_INTERNAL;
3601 query_string = sqlite3_mprintf(MB_SVC_SELECT_MEDIA_ID_BY_FOLDER_UUID_AND_DISPLAY_NAME,
3602 table_name, folder_id, display_name);
3604 mb_svc_debug("Query: %s", query_string);
3607 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
3609 if (SQLITE_OK != err) {
3610 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3611 mb_svc_debug("query string is %s\n", query_string);
3612 sqlite3_free(query_string);
3613 return MB_SVC_ERROR_DB_INTERNAL;
3616 err = sqlite3_step(stmt);
3617 if (err != SQLITE_ROW) {
3618 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
3619 mb_svc_debug("query string is %s\n", query_string);
3620 sqlite3_free(query_string);
3621 sqlite3_finalize(stmt);
3622 return MB_SVC_ERROR_DB_INTERNAL;
3625 strncpy(media_id, (const char *)sqlite3_column_text(stmt, 0), MB_SVC_UUID_LEN_MAX + 1);
3627 sqlite3_free(query_string);
3628 sqlite3_finalize(stmt);
3634 mb_svc_get_media_record_by_fid_name(MediaSvcHandle *mb_svc_handle, const char *folder_id, const char *display_name,
3635 mb_svc_media_record_s *m_record)
3638 char *query_string = NULL;
3639 sqlite3_stmt *stmt = NULL;
3640 char *table_name = MB_SVC_TBL_NAME_MEDIA;
3642 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3643 if (handle == NULL) {
3644 mb_svc_debug("handle is NULL");
3645 return MB_SVC_ERROR_DB_INTERNAL;
3648 query_string = sqlite3_mprintf(MB_SVC_SELECT_MEDIA_RECORD_BY_FOLDER_ID_AND_DISPLAY_NAME,
3649 table_name, folder_id, display_name);
3652 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
3654 if (SQLITE_OK != err) {
3655 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3656 mb_svc_debug("query string is %s\n", query_string);
3657 sqlite3_free(query_string);
3658 return MB_SVC_ERROR_DB_INTERNAL;
3660 err = sqlite3_step(stmt);
3661 if (err != SQLITE_ROW) {
3662 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
3663 mb_svc_debug("query string is %s\n", query_string);
3664 sqlite3_free(query_string);
3665 sqlite3_finalize(stmt);
3666 return MB_SVC_ERROR_DB_INTERNAL;
3668 mb_svc_load_record_media(stmt, m_record);
3670 sqlite3_free(query_string);
3671 sqlite3_finalize(stmt);
3676 int mb_svc_update_favorite_by_media_id(MediaSvcHandle *mb_svc_handle, const char *media_id, int favorite)
3678 int err = mb_svc_update_favorite_by_id(mb_svc_handle, media_id, favorite);
3684 mb_svc_get_media_record_by_id(MediaSvcHandle *mb_svc_handle,
3685 const char *media_id,
3686 mb_svc_media_record_s *media_record)
3689 char *table_name = MB_SVC_TBL_NAME_MEDIA;
3690 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
3691 sqlite3_stmt *p_Stmt_mb = NULL;
3693 if (media_id == NULL || media_record == NULL) {
3694 mb_svc_debug("media_id == NULL || media_record == NULL");
3695 return MB_SVC_ERROR_INVALID_PARAMETER;
3698 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3699 if (handle == NULL) {
3700 mb_svc_debug("handle is NULL");
3701 return MB_SVC_ERROR_DB_INTERNAL;
3704 snprintf(query_string, sizeof(query_string),
3705 MB_SVC_TABLE_SELECT_MEDIA_BY_MEDIA_UUID, table_name, media_id);
3707 mb_svc_debug("Query: %s", query_string);
3710 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
3712 if (SQLITE_OK != err) {
3713 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3714 return MB_SVC_ERROR_DB_INTERNAL;
3716 err = sqlite3_step(p_Stmt_mb);
3717 if (err != SQLITE_ROW) {
3718 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
3719 sqlite3_finalize(p_Stmt_mb);
3720 return MB_SVC_ERROR_DB_INTERNAL;
3722 mb_svc_load_record_media(p_Stmt_mb, media_record);
3724 mb_svc_debug("Path : %s", media_record->path);
3725 mb_svc_debug("Thumb : %s", media_record->thumbnail_path);
3726 sqlite3_finalize(p_Stmt_mb);
3731 mb_svc_get_folder_name_by_id(MediaSvcHandle *mb_svc_handle, const char *folder_id, char *folder_name, int max_length)
3734 char *table_name = MB_SVC_TBL_NAME_FOLDER;
3735 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
3737 sqlite3_stmt *stmt = NULL;
3739 if (folder_id == NULL) {
3740 mb_svc_debug("folder_id is NULL");
3741 return MB_SVC_ERROR_INVALID_PARAMETER;
3744 if (folder_name == NULL) {
3745 mb_svc_debug("pointer folder_name is null\n");
3746 return MB_SVC_ERROR_INVALID_PARAMETER;
3749 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3750 if (handle == NULL) {
3751 mb_svc_debug("handle is NULL");
3752 return MB_SVC_ERROR_DB_INTERNAL;
3755 snprintf(query_string, sizeof(query_string),
3756 MB_SVC_TABLE_SELECT_FOLDER_NAME_BY_UUID, table_name, folder_id);
3759 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
3761 if (SQLITE_OK != err) {
3762 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3763 mb_svc_debug("query string is %s\n", query_string);
3764 return MB_SVC_ERROR_DB_INTERNAL;
3766 err = sqlite3_step(stmt);
3767 if (err != SQLITE_ROW) {
3768 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
3769 mb_svc_debug("query string is %s\n", query_string);
3770 sqlite3_finalize(stmt);
3771 return MB_SVC_ERROR_DB_INTERNAL;
3774 err = mb_svc_load_record_folder_name(stmt, folder_name, max_length);
3777 mb_svc_debug("mb-svc load data failed");
3778 sqlite3_finalize(stmt);
3779 return MB_SVC_ERROR_DB_INTERNAL;
3782 sqlite3_finalize(stmt);
3789 mb_svc_get_folder_record_by_id(MediaSvcHandle *mb_svc_handle,
3790 const char *folder_id,
3791 mb_svc_folder_record_s *folder_record)
3794 char *table_name = MB_SVC_TBL_NAME_FOLDER;
3795 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
3796 sqlite3_stmt *stmt = NULL;
3798 if (folder_record == NULL) {
3799 mb_svc_debug("pointer folder_record is null\n");
3800 return MB_SVC_ERROR_INVALID_PARAMETER;
3803 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3804 if (handle == NULL) {
3805 mb_svc_debug("handle is NULL");
3806 return MB_SVC_ERROR_DB_INTERNAL;
3809 snprintf(query_string, sizeof(query_string),
3810 MB_SVC_TABLE_SELECT_FOLDER_RECORD_BY_UUID, table_name,
3814 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
3816 if (SQLITE_OK != err) {
3817 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3818 mb_svc_debug("query string is %s\n", query_string);
3819 return MB_SVC_ERROR_DB_INTERNAL;
3821 err = sqlite3_step(stmt);
3822 if (err != SQLITE_ROW) {
3823 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
3824 mb_svc_debug("query string is %s\n", query_string);
3825 sqlite3_finalize(stmt);
3826 return MB_SVC_ERROR_DB_INTERNAL;
3828 err = mb_svc_load_record_folder(stmt, folder_record);
3830 mb_svc_debug("mb-svc load data failed");
3831 sqlite3_finalize(stmt);
3832 return MB_SVC_ERROR_DB_INTERNAL;
3835 sqlite3_finalize(stmt);
3842 mb_svc_get_web_streaming_record_by_id(MediaSvcHandle *mb_svc_handle,
3843 int webstreaming_id,
3844 mb_svc_web_streaming_record_s *
3845 webstreaming_record)
3848 char *table_name = MB_SVC_TBL_NAME_WEB_STREAMING;
3849 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
3851 sqlite3_stmt *stmt = NULL;
3852 if (webstreaming_record == NULL) {
3853 mb_svc_debug("pointer webstreaming_record is null\n");
3854 return MB_SVC_ERROR_INVALID_PARAMETER;
3857 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3858 if (handle == NULL) {
3859 mb_svc_debug("handle is NULL");
3860 return MB_SVC_ERROR_DB_INTERNAL;
3863 snprintf(query_string, sizeof(query_string),
3864 MB_SVC_TABLE_SELECT_WEBSTREAMING_RECORD_BY_ID, table_name,
3867 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
3869 if (SQLITE_OK != err) {
3870 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
3871 mb_svc_debug("query string is %s\n", query_string);
3872 return MB_SVC_ERROR_DB_INTERNAL;
3874 err = sqlite3_step(stmt);
3875 if (err != SQLITE_ROW) {
3876 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
3877 mb_svc_debug("query string is %s\n", query_string);
3878 sqlite3_finalize(stmt);
3879 return MB_SVC_ERROR_DB_INTERNAL;
3881 err = mb_svc_load_record_web_streaming(stmt, webstreaming_record);
3883 mb_svc_debug("mb-svc load data failed");
3884 sqlite3_finalize(stmt);
3885 return MB_SVC_ERROR_DB_INTERNAL;
3888 sqlite3_finalize(stmt);
3894 int mb_svc_webstreaming_iter_start(MediaSvcHandle *mb_svc_handle, mb_svc_iterator_s *mb_svc_iterator)
3897 char *table_name = MB_SVC_TBL_NAME_FOLDER;
3898 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
3900 if (mb_svc_iterator == NULL) {
3901 mb_svc_debug("mb_svc_iterator == NULL\n");
3902 return MB_SVC_ERROR_INVALID_PARAMETER;
3905 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
3906 if (handle == NULL) {
3907 mb_svc_debug("handle is NULL");
3908 return MB_SVC_ERROR_DB_INTERNAL;
3911 snprintf(query_string, sizeof(query_string),
3912 MB_SVC_TABLE_SELECT_FOLDER_ALL_QUERY_STRING, table_name);
3914 mb_svc_iterator->current_position = 0;
3917 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
3918 &mb_svc_iterator->stmt, NULL);
3919 if (SQLITE_OK != err) {
3920 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
3921 mb_svc_debug("query string is %s\n", query_string);
3922 return MB_SVC_ERROR_DB_INTERNAL;
3929 mb_svc_webstreaming_iter_next(mb_svc_iterator_s *mb_svc_iterator,
3930 mb_svc_web_streaming_record_s *
3931 webstreaming_record)
3935 if (webstreaming_record == NULL || mb_svc_iterator == NULL) {
3937 ("webstreaming_record == NULL || mb_svc_iterator == NULL\n");
3938 return MB_SVC_ERROR_INVALID_PARAMETER;
3941 if (mb_svc_iterator->current_position < -1 || mb_svc_iterator->current_position >= mb_svc_iterator->total_count - 1) {
3942 mb_svc_debug ("iteration is not started: %d\n", mb_svc_iterator->current_position);
3943 return MB_SVC_ERROR_DB_OUT_OF_RANGE;
3946 err = sqlite3_step(mb_svc_iterator->stmt);
3947 if (err != SQLITE_ROW) {
3948 mb_svc_debug("end of iteration : count = %d\n",
3949 mb_svc_iterator->current_position);
3950 return MB_SVC_NO_RECORD_ANY_MORE;
3953 memset(webstreaming_record, 0, sizeof(mb_svc_web_streaming_record_s));
3955 mb_svc_load_record_web_streaming(mb_svc_iterator->stmt,
3956 webstreaming_record);
3958 mb_svc_debug("failed to load item\n");
3959 sqlite3_finalize(mb_svc_iterator->stmt);
3960 mb_svc_iterator->current_position = -1;
3961 return MB_SVC_ERROR_DB_INTERNAL;
3964 mb_svc_iterator->current_position++;
3969 static int __mb_svc_get_media_list_by_folder_id(MediaSvcHandle *mb_svc_handle,
3970 const char *folder_id,
3971 GList **p_record_list,
3975 mb_svc_media_record_s *md_record;
3977 GList *l_record_list = NULL;
3978 mb_svc_iterator_s mb_svc_iterator = { 0 };
3980 if (p_record_list == NULL) {
3981 mb_svc_debug("p_record_list is null \n");
3982 return MB_SVC_ERROR_INVALID_PARAMETER;
3985 minfo_item_filter filter = { 0 };
3986 filter.favorite = MINFO_MEDIA_FAV_ALL;
3987 filter.start_pos = MB_SVC_DB_DEFAULT_GET_ALL_RECORDS;
3988 filter.sort_type = MINFO_MEDIA_SORT_BY_NONE;
3989 filter.file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO;
3992 mb_svc_media_iter_start_new(mb_svc_handle, folder_id, &filter,
3993 MINFO_CLUSTER_TYPE_ALL, valid, NULL,
3997 mb_svc_debug("mb-svc iterator start failed");
4003 (mb_svc_media_record_s *)
4004 malloc(sizeof(mb_svc_media_record_s));
4005 if (md_record == NULL) {
4006 mb_svc_debug("Error: memory allocation failed\n");
4007 mb_svc_iter_finish(&mb_svc_iterator);
4008 _mb_svc_glist_free(&l_record_list, true);
4009 return MB_SVC_ERROR_OUT_OF_MEMORY;
4011 memset(md_record, 0x00, sizeof(mb_svc_media_record_s));
4013 err = mb_svc_media_iter_next(&mb_svc_iterator, md_record);
4015 if (err == MB_SVC_NO_RECORD_ANY_MORE) {
4023 mb_svc_debug("mb-svc iterator get next recrod failed");
4024 mb_svc_iter_finish(&mb_svc_iterator);
4028 _mb_svc_glist_free(&l_record_list, true);
4034 l_record_list = g_list_append(l_record_list, md_record);
4037 mb_svc_iter_finish(&mb_svc_iterator);
4038 *p_record_list = l_record_list;
4040 if (record_cnt == 0)
4041 return MB_SVC_ERROR_DB_NO_RECORD;
4046 static int __mb_svc_get_all_media_list(MediaSvcHandle *mb_svc_handle, const minfo_store_type storage_type, GList **p_record_list)
4050 mb_svc_media_record_s *md_record;
4052 GList *l_record_list = NULL;
4053 mb_svc_iterator_s mb_svc_iterator = { 0 };
4055 if (p_record_list == NULL) {
4056 mb_svc_debug("p_record_list is null \n");
4057 return MB_SVC_ERROR_INVALID_PARAMETER;
4060 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
4061 if (handle == NULL) {
4062 mb_svc_debug("handle is NULL");
4063 return MB_SVC_ERROR_DB_INTERNAL;
4066 sql = sqlite3_mprintf(MB_SVC_SELECT_ALL_MEDIA_LIST_BY_STORAGE, storage_type);
4068 sqlite3_prepare_v2(handle, sql, strlen(sql), &mb_svc_iterator.stmt, NULL);
4072 if (SQLITE_OK != err) {
4073 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
4074 return MB_SVC_ERROR_DB_INTERNAL;
4079 (mb_svc_media_record_s *)
4080 malloc(sizeof(mb_svc_media_record_s));
4081 if (md_record == NULL) {
4082 mb_svc_debug("Error: memory allocation failed\n");
4083 mb_svc_iter_finish(&mb_svc_iterator);
4084 _mb_svc_glist_free(&l_record_list, true);
4085 return MB_SVC_ERROR_OUT_OF_MEMORY;
4087 memset(md_record, 0x00, sizeof(mb_svc_media_record_s));
4089 err = mb_svc_media_iter_next(&mb_svc_iterator, md_record);
4091 if (err == MB_SVC_NO_RECORD_ANY_MORE) {
4099 mb_svc_debug("mb-svc iterator get next recrod failed");
4100 mb_svc_iter_finish(&mb_svc_iterator);
4104 _mb_svc_glist_free(&l_record_list, true);
4110 l_record_list = g_list_append(l_record_list, md_record);
4113 mb_svc_iter_finish(&mb_svc_iterator);
4114 *p_record_list = l_record_list;
4116 if (record_cnt == 0)
4117 return MB_SVC_ERROR_DB_NO_RECORD;
4122 static int __mb_svc_get_invalid_media_list(MediaSvcHandle *mb_svc_handle, const minfo_store_type storage_type, GList **p_record_list)
4126 mb_svc_media_record_s *md_record;
4128 GList *l_record_list = NULL;
4129 mb_svc_iterator_s mb_svc_iterator = { 0 };
4131 if (p_record_list == NULL) {
4132 mb_svc_debug("p_record_list is null \n");
4133 return MB_SVC_ERROR_INVALID_PARAMETER;
4136 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
4137 if (handle == NULL) {
4138 mb_svc_debug("handle is NULL");
4139 return MB_SVC_ERROR_DB_INTERNAL;
4142 sql = sqlite3_mprintf(MB_SVC_SELECT_INVALID_MEDIA_LIST, storage_type);
4144 sqlite3_prepare_v2(handle, sql, strlen(sql), &mb_svc_iterator.stmt, NULL);
4148 if (SQLITE_OK != err) {
4149 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
4150 return MB_SVC_ERROR_DB_INTERNAL;
4155 (mb_svc_media_record_s *)
4156 malloc(sizeof(mb_svc_media_record_s));
4157 if (md_record == NULL) {
4158 mb_svc_debug("Error: memory allocation failed\n");
4159 mb_svc_iter_finish(&mb_svc_iterator);
4160 _mb_svc_glist_free(&l_record_list, true);
4161 return MB_SVC_ERROR_OUT_OF_MEMORY;
4163 memset(md_record, 0x00, sizeof(mb_svc_media_record_s));
4165 err = mb_svc_media_iter_next(&mb_svc_iterator, md_record);
4167 if (err == MB_SVC_NO_RECORD_ANY_MORE) {
4175 mb_svc_debug("mb-svc iterator get next recrod failed");
4176 mb_svc_iter_finish(&mb_svc_iterator);
4180 _mb_svc_glist_free(&l_record_list, true);
4186 l_record_list = g_list_append(l_record_list, md_record);
4189 mb_svc_iter_finish(&mb_svc_iterator);
4190 *p_record_list = l_record_list;
4192 if (record_cnt == 0)
4193 return MB_SVC_ERROR_DB_NO_RECORD;
4198 static int __mb_svc_delete_media_records_list(MediaSvcHandle *mb_svc_handle, GList *p_record_list)
4201 mb_svc_media_record_s *m_data = NULL;
4204 if (p_record_list != NULL) {
4206 GList *delete_sql_list = NULL;
4207 int trans_count = 30;
4208 int cur_trans_count = 0;
4209 int length = g_list_length(p_record_list);
4211 for (i = 0; i < length; i++) {
4214 (mb_svc_media_record_s *)
4215 g_list_nth_data(p_record_list, i);
4217 ret = mb_svc_delete_record_media_sql(m_data->media_uuid, &sql);
4220 ("mb_svc_delete_record_media_sql failed\n");
4223 mb_svc_sql_list_add(&delete_sql_list, &sql);
4225 if (m_data->content_type == MINFO_ITEM_IMAGE) {
4226 ret = mb_svc_delete_record_image_meta_sql(m_data->media_uuid, &sql);
4229 ("mb_svc_delete_record_image_meta_sql failed\n");
4232 mb_svc_sql_list_add(&delete_sql_list, &sql);
4234 } else if (m_data->content_type == MINFO_ITEM_VIDEO) {
4235 ret = mb_svc_delete_record_video_meta_sql(m_data->media_uuid, &sql);
4238 ("mb_svc_delete_record_video_meta_sql failed\n");
4241 mb_svc_sql_list_add(&delete_sql_list, &sql);
4244 mb_svc_delete_bookmark_meta_by_media_id_sql(m_data->media_uuid, &sql);
4247 ("mb_svc_delete_bookmark_meta_by_media_id_sql failed\n");
4250 mb_svc_sql_list_add(&delete_sql_list, &sql);
4254 mb_svc_delete_tagmap_by_media_id_sql(m_data->media_uuid, &sql);
4257 ("mb_svc_delete_tagmap_by_media_id_sql failed (%d)\n", ret);
4260 mb_svc_sql_list_add(&delete_sql_list, &sql);
4262 /* delete thumbnail file directly */
4263 if (strlen(m_data->http_url) == 0) {
4264 ret = _mb_svc_thumb_rm(m_data->thumbnail_path);
4268 ("_mb_svc_thumb_delete fail:file is %s\n",
4269 m_data->thumbnail_path);
4274 if (cur_trans_count >= trans_count) {
4275 cur_trans_count = 0;
4277 /* Start transaction */
4279 int length = g_list_length(delete_sql_list);
4281 ret = mb_svc_sqlite3_begin_trans(mb_svc_handle);
4283 mb_svc_debug("mb_svc_sqlite3_begin_trans failed\n");
4284 mb_svc_sql_list_release(&delete_sql_list);
4288 for (i = 0; i < length; i++) {
4289 char *sql = (char *)g_list_nth_data(delete_sql_list, i);
4290 ret = mb_svc_query_sql(mb_svc_handle, sql);
4294 ("mb_svc_query_sql failed.. Now start to rollback\n");
4295 mb_svc_sqlite3_rollback_trans(mb_svc_handle);
4296 mb_svc_sql_list_release(&delete_sql_list);
4301 ret = mb_svc_sqlite3_commit_trans(mb_svc_handle);
4304 ("mb_svc_sqlite3_commit_trans failed.. Now start to rollback\n");
4305 mb_svc_sqlite3_rollback_trans(mb_svc_handle);
4306 mb_svc_sql_list_release(&delete_sql_list);
4312 if (cur_trans_count > 0) {
4313 cur_trans_count = 0;
4315 /* Start transaction */
4317 int length = g_list_length(delete_sql_list);
4319 ret = mb_svc_sqlite3_begin_trans(mb_svc_handle);
4321 mb_svc_debug("mb_svc_sqlite3_begin_trans failed\n");
4322 mb_svc_sql_list_release(&delete_sql_list);
4326 for (i = 0; i < length; i++) {
4327 char *sql = (char *)g_list_nth_data(delete_sql_list, i);
4328 ret = mb_svc_query_sql(mb_svc_handle, sql);
4332 ("mb_svc_query_sql failed.. Now start to rollback\n");
4333 mb_svc_sqlite3_rollback_trans(mb_svc_handle);
4334 mb_svc_sql_list_release(&delete_sql_list);
4339 ret = mb_svc_sqlite3_commit_trans(mb_svc_handle);
4342 ("mb_svc_sqlite3_commit_trans failed.. Now start to rollback\n");
4343 mb_svc_sqlite3_rollback_trans(mb_svc_handle);
4344 mb_svc_sql_list_release(&delete_sql_list);
4349 mb_svc_sql_list_release(&delete_sql_list);
4355 int mb_svc_delete_folder(MediaSvcHandle *mb_svc_handle, const char *folder_id, minfo_store_type storage_type)
4358 GList *p_record_list = NULL;
4360 if (folder_id == NULL) {
4361 mb_svc_debug("folder_id is NULL");
4362 return MB_SVC_ERROR_INVALID_PARAMETER;
4365 ret = __mb_svc_get_media_list_by_folder_id(mb_svc_handle, folder_id, &p_record_list, TRUE);
4367 if (ret == MB_SVC_ERROR_DB_NO_RECORD) {
4368 mb_svc_debug("There's no item in the folder %s", folder_id);
4370 } else if (ret < 0) {
4371 mb_svc_debug("minfo_delete_cluster, __mb_svc_get_media_list_by_folder_id failed\n");
4375 ret = __mb_svc_delete_media_records_list(mb_svc_handle, p_record_list);
4376 _mb_svc_glist_free(&p_record_list, true);
4380 ("minfo_delete_cluster, delete media related records by folder_id failed\n");
4385 ret = mb_svc_delete_record_folder_by_id(mb_svc_handle, folder_id);
4389 ("minfo_delete_cluster, delete matched folder record failed\n");
4398 * caller need to provide the local statement--stmt
4401 mb_svc_bookmark_iter_start(MediaSvcHandle *mb_svc_handle, const char *media_id, mb_svc_iterator_s *mb_svc_iterator)
4404 char *table_name = MB_SVC_TBL_NAME_BOOKMARK;
4405 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
4407 if (mb_svc_iterator == NULL) {
4408 mb_svc_debug("mb_svc_iterator == NULL\n");
4409 return MB_SVC_ERROR_INVALID_PARAMETER;
4412 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
4413 if (handle == NULL) {
4414 mb_svc_debug("handle is NULL");
4415 return MB_SVC_ERROR_DB_INTERNAL;
4418 snprintf(query_string, sizeof(query_string),
4419 MB_SVC_TABLE_SELECT_BOOKMARK_ALL_BY_MUUID, table_name,
4422 mb_svc_debug("Query : %s", query_string);
4424 mb_svc_iterator->current_position = 0;
4427 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
4428 &mb_svc_iterator->stmt, NULL);
4429 if (SQLITE_OK != err) {
4430 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
4431 mb_svc_debug("query string is %s\n", query_string);
4432 return MB_SVC_ERROR_DB_INTERNAL;
4439 mb_svc_bookmark_iter_next(mb_svc_iterator_s *mb_svc_iterator,
4440 mb_svc_bookmark_record_s *record)
4444 if (record == NULL || mb_svc_iterator == NULL) {
4445 mb_svc_debug("pointer record is null\n");
4446 return MB_SVC_ERROR_INVALID_PARAMETER;
4448 err = sqlite3_step(mb_svc_iterator->stmt);
4449 if (err != SQLITE_ROW) {
4450 mb_svc_debug("end of iteration : count = %d\n",
4451 mb_svc_iterator->current_position);
4452 return MB_SVC_NO_RECORD_ANY_MORE;
4455 err = mb_svc_load_record_bookmark(mb_svc_iterator->stmt, record);
4457 mb_svc_debug("failed to load item\n");
4458 sqlite3_finalize(mb_svc_iterator->stmt);
4459 mb_svc_iterator->current_position = -1;
4460 return MB_SVC_ERROR_DB_INTERNAL;
4462 mb_svc_iterator->current_position++;
4469 * caller need to provide the local statement--stmt
4472 mb_svc_tag_iter_start(MediaSvcHandle *mb_svc_handle,
4473 const char *tag_name,
4474 const char *media_id,
4475 mb_svc_iterator_s *mb_svc_iterator)
4478 char query_string_with_lock_status[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
4481 if (mb_svc_iterator == NULL) {
4482 mb_svc_debug("mb_svc_iterator == NULL\n");
4483 return MB_SVC_ERROR_INVALID_PARAMETER;
4486 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
4487 if (handle == NULL) {
4488 mb_svc_debug("handle is NULL");
4489 return MB_SVC_ERROR_DB_INTERNAL;
4492 if (tag_name != NULL) {
4493 /* set to get only unlocked items */
4495 snprintf(query_string_with_lock_status,
4496 sizeof(query_string_with_lock_status),
4497 MB_SVC_TABLE_SELECT_TAG_ALL_QUERY_STRING_BY_TAG_NAME_WITH_LOCK_STATUS,
4499 } else if (media_id == NULL) {
4500 /* set to get only unlocked items */
4502 snprintf(query_string_with_lock_status,
4503 sizeof(query_string_with_lock_status),
4504 MB_SVC_TABLE_SELECT_TAG_ALL_QUERY_STRING_WITH_LOCK_STATUS,
4507 /* set to get only unlocked items */
4509 snprintf(query_string_with_lock_status,
4510 sizeof(query_string_with_lock_status),
4511 MB_SVC_TABLE_SELECT_TAG_ALL_QUERY_STRING_BY_MEDIA_ID_WITH_LOCK_STATUS,
4516 mb_svc_debug("snprintf returns failure ( %d )", len);
4517 query_string_with_lock_status[0] = '\0';
4519 query_string_with_lock_status[len] = '\0';
4522 mb_svc_debug("Query : %s", query_string_with_lock_status);
4524 mb_svc_iterator->current_position = 0;
4527 sqlite3_prepare_v2(handle, query_string_with_lock_status,
4528 strlen(query_string_with_lock_status),
4529 &mb_svc_iterator->stmt, NULL);
4530 if (SQLITE_OK != err) {
4531 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
4532 mb_svc_debug("query string is %s\n",
4533 query_string_with_lock_status);
4534 return MB_SVC_ERROR_DB_INTERNAL;
4541 mb_svc_tag_iter_with_filter_start(MediaSvcHandle *mb_svc_handle,
4542 const char *tag_name,
4543 minfo_tag_filter filter,
4544 mb_svc_iterator_s *mb_svc_iterator)
4547 char query_string_with_lock_status[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
4548 char condition_str[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
4551 if (mb_svc_iterator == NULL) {
4552 mb_svc_debug("mb_svc_iterator == NULL\n");
4553 return MB_SVC_ERROR_INVALID_PARAMETER;
4556 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
4557 if (handle == NULL) {
4558 mb_svc_debug("handle is NULL");
4559 return MB_SVC_ERROR_DB_INTERNAL;
4562 memset(condition_str, 0x00, sizeof(condition_str));
4563 if (!(filter.file_type & MINFO_ITEM_ALL)) {
4564 char content_str[MB_SVC_DEFAULT_QUERY_SIZE] = { 0 };
4567 snprintf(content_str, sizeof(content_str),
4568 " and ( m.content_type=%d ", 0);
4570 mb_svc_debug("snprintf returns failure ( %d )", len);
4571 content_str[0] = '\0';
4573 content_str[len] = '\0';
4577 g_strlcat(condition_str, content_str,
4578 sizeof(condition_str));
4579 if (len >= sizeof(condition_str)) {
4580 mb_svc_debug("strlcat returns failure ( %d )", len);
4581 return MB_SVC_ERROR_INVALID_PARAMETER;
4584 if (filter.file_type & MINFO_ITEM_IMAGE) {
4586 snprintf(content_str, sizeof(content_str),
4587 " or m.content_type=%d ",
4590 mb_svc_debug("snprintf returns failure ( %d )",
4592 content_str[0] = '\0';
4594 content_str[len] = '\0';
4598 g_strlcat(condition_str, content_str,
4599 sizeof(condition_str));
4600 if (len >= sizeof(condition_str)) {
4601 mb_svc_debug("strlcat returns failure ( %d )",
4603 return MB_SVC_ERROR_INVALID_PARAMETER;
4607 if (filter.file_type & MINFO_ITEM_VIDEO) {
4609 snprintf(content_str, sizeof(content_str),
4610 " or m.content_type=%d ",
4613 mb_svc_debug("snprintf returns failure ( %d )",
4615 content_str[0] = '\0';
4617 content_str[len] = '\0';
4621 g_strlcat(condition_str, content_str,
4622 sizeof(condition_str));
4623 if (len >= sizeof(condition_str)) {
4624 mb_svc_debug("strlcat returns failure ( %d )",
4626 return MB_SVC_ERROR_INVALID_PARAMETER;
4630 len = g_strlcat(condition_str, ") ", sizeof(condition_str));
4631 if (len >= sizeof(condition_str)) {
4632 mb_svc_debug("strlcat returns failure ( %d )", len);
4633 return MB_SVC_ERROR_INVALID_PARAMETER;
4637 if (filter.start_pos != MB_SVC_DB_DEFAULT_GET_ALL_RECORDS) { /* -1 get all record */
4638 int length = filter.end_pos - filter.start_pos + 1;
4641 ("start position and end position is invalid ( start:%d, end:%d )",
4642 filter.start_pos, filter.end_pos);
4643 return MB_SVC_ERROR_INVALID_PARAMETER;
4646 char limit_str[MB_SVC_DEFAULT_QUERY_SIZE] = { 0 };
4648 snprintf(limit_str, sizeof(limit_str), " LIMIT %d,%d",
4649 filter.start_pos, length);
4651 mb_svc_debug("snprintf returns failure ( %d )", len);
4652 limit_str[0] = '\0';
4654 limit_str[len] = '\0';
4658 g_strlcat(condition_str, limit_str, sizeof(condition_str));
4659 if (len >= sizeof(condition_str)) {
4660 mb_svc_debug("strlcat returns failure ( %d )", len);
4661 return MB_SVC_ERROR_INVALID_PARAMETER;
4665 /* set to get only unlocked items */
4667 snprintf(query_string_with_lock_status,
4668 sizeof(query_string_with_lock_status),
4669 MB_SVC_TABLE_SELECT_TAG_ALL_QUERY_STRING_BY_TAG_NAME_WITH_LOCK_STATUS_AND_FILTER,
4670 tag_name, 0, condition_str);
4673 mb_svc_debug("snprintf returns failure ( %d )", len);
4674 query_string_with_lock_status[0] = '\0';
4676 query_string_with_lock_status[len] = '\0';
4679 mb_svc_debug("Query : %s", query_string_with_lock_status);
4681 mb_svc_iterator->current_position = 0;
4684 sqlite3_prepare_v2(handle, query_string_with_lock_status,
4685 strlen(query_string_with_lock_status),
4686 &mb_svc_iterator->stmt, NULL);
4687 if (SQLITE_OK != err) {
4688 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
4689 mb_svc_debug("query string is %s\n",
4690 query_string_with_lock_status);
4691 return MB_SVC_ERROR_DB_INTERNAL;
4697 static int __mb_svc_delete_tag_by_id(MediaSvcHandle *mb_svc_handle, const int tag_id)
4700 char *query_string = NULL;
4701 char *table_name = MB_SVC_TBL_NAME_TAG;
4704 sqlite3_mprintf(MB_SVC_TABLE_DELETE_TAG_BY_TAGID, table_name,
4707 err = mb_svc_query_sql(mb_svc_handle, query_string);
4708 sqlite3_free(query_string);
4711 mb_svc_debug("failed to delete tagmap\n");
4712 return MB_SVC_ERROR_DB_INTERNAL;
4718 int mb_svc_delete_tagmap_by_media_id(MediaSvcHandle *mb_svc_handle, const char *media_id)
4721 char *query_string = NULL;
4722 char *table_name = MB_SVC_TBL_NAME_TAG_MAP;
4725 sqlite3_mprintf(MB_SVC_TABLE_DELETE_TAG_MAP_BY_MEDIA_UUID, table_name,
4728 err = mb_svc_query_sql(mb_svc_handle, query_string);
4729 sqlite3_free(query_string);
4732 mb_svc_debug("failed to delete tagmap\n");
4733 return MB_SVC_ERROR_DB_INTERNAL;
4739 int mb_svc_delete_record_tag(MediaSvcHandle *mb_svc_handle, const char *tag_name, const char *media_id)
4744 char *query_string = NULL;
4745 char *table_name = MB_SVC_TBL_NAME_TAG_MAP;
4747 if (tag_name == NULL) {
4748 mb_svc_debug("tag_name pointer is null\n");
4749 return MB_SVC_ERROR_INVALID_PARAMETER;
4752 tag_id = mb_svc_get_tagid_by_tagname(mb_svc_handle, tag_name);
4754 mb_svc_debug("There's no tag %s in the table");
4756 return MB_SVC_ERROR_INVALID_PARAMETER;
4759 if (media_id == NULL) {
4761 sqlite3_mprintf(MB_SVC_TABLE_DELETE_TAG_MAP_BY_TAGNAME,
4762 table_name, tag_id);
4766 (MB_SVC_TABLE_DELETE_TAG_MAP_BY_TAGNAME_MEDIA_UUID,
4767 table_name, media_id, tag_id);
4770 err = mb_svc_query_sql(mb_svc_handle, query_string);
4771 sqlite3_free(query_string);
4774 mb_svc_debug("failed to delete tagmap\n");
4775 return MB_SVC_ERROR_DB_INTERNAL;
4778 count = __mb_svc_get_media_cnt_by_tagid(mb_svc_handle, tag_id);
4781 err = __mb_svc_delete_tag_by_id(mb_svc_handle, tag_id);
4783 mb_svc_debug("__mb_svc_delete_tag_by_id : %d", tag_id);
4792 mb_svc_media_id_list_by_tag_iter_next(mb_svc_iterator_s *mb_svc_iterator,
4793 mb_svc_tag_record_s *record)
4797 if (record == NULL || mb_svc_iterator == NULL) {
4798 mb_svc_debug("pointer record is null\n");
4799 return MB_SVC_ERROR_INVALID_PARAMETER;
4802 err = sqlite3_step(mb_svc_iterator->stmt);
4803 if (err != SQLITE_ROW) {
4804 mb_svc_debug("end of iteration : count = %d\n",
4805 mb_svc_iterator->current_position);
4806 return MB_SVC_NO_RECORD_ANY_MORE;
4809 record->_id = sqlite3_column_int(mb_svc_iterator->stmt, 0);
4810 //record->media_id = sqlite3_column_int(mb_svc_iterator->stmt, 1);
4811 strncpy(record->media_uuid, (const char *)sqlite3_column_text(mb_svc_iterator->stmt, 1), MB_SVC_UUID_LEN_MAX + 1);
4812 strncpy(record->tag_name, "", MB_SVC_ARRAY_LEN_MAX + 1);
4814 mb_svc_iterator->current_position++;
4819 mb_svc_tag_iter_next(mb_svc_iterator_s *mb_svc_iterator,
4820 mb_svc_tag_record_s *record)
4824 if (record == NULL || mb_svc_iterator == NULL) {
4825 mb_svc_debug("pointer record is null\n");
4826 return MB_SVC_ERROR_INVALID_PARAMETER;
4829 err = sqlite3_step(mb_svc_iterator->stmt);
4830 if (err != SQLITE_ROW) {
4831 mb_svc_debug("end of iteration : count = %d\n",
4832 mb_svc_iterator->current_position);
4833 return MB_SVC_NO_RECORD_ANY_MORE;
4836 err = mb_svc_load_record_tag(mb_svc_iterator->stmt, record);
4838 mb_svc_debug("failed to load item\n");
4839 sqlite3_finalize(mb_svc_iterator->stmt);
4840 mb_svc_iterator->current_position = -1;
4841 return MB_SVC_ERROR_DB_INTERNAL;
4843 mb_svc_iterator->current_position++;
4847 int mb_svc_rename_record_tag(MediaSvcHandle *mb_svc_handle, const char *src_tagname, const char *dst_tag_name)
4851 int src_tag_id = mb_svc_get_tagid_by_tagname(mb_svc_handle, src_tagname);
4853 if (src_tag_id <= 0) {
4854 mb_svc_debug("there's no tag %s ", src_tagname);
4855 return MB_SVC_ERROR_INVALID_PARAMETER;
4858 int dst_tag_id = mb_svc_get_tagid_by_tagname(mb_svc_handle, dst_tag_name);
4860 if (dst_tag_id > 0) {
4861 err = __mb_svc_update_tagmap(mb_svc_handle, src_tag_id, dst_tag_id);
4863 err = __mb_svc_update_tag(mb_svc_handle, src_tag_id, dst_tag_name);
4870 mb_svc_rename_record_tag_by_id(MediaSvcHandle *mb_svc_handle,
4871 const char *media_id,
4872 const char *src_tagname,
4873 const char *dst_tag_name)
4876 mb_svc_tag_record_s tag_record = { 0 };
4878 int src_tag_id = mb_svc_get_tagid_by_tagname(mb_svc_handle, src_tagname);
4880 if (src_tag_id <= 0) {
4881 mb_svc_debug("there's no tag %s ", src_tagname);
4882 return MB_SVC_ERROR_INVALID_PARAMETER;
4885 int dst_tag_id = mb_svc_get_tagid_by_tagname(mb_svc_handle, dst_tag_name);
4887 if (dst_tag_id > 0) {
4888 err = __mb_svc_update_tagmap_by_media_id(mb_svc_handle, media_id, src_tag_id, dst_tag_id);
4891 strncpy(tag_record.tag_name, dst_tag_name,
4892 MB_SVC_ARRAY_LEN_MAX + 1);
4894 err = mb_svc_insert_record_tag(mb_svc_handle, &tag_record);
4896 mb_svc_debug("mb_svc_insert_record_tag fail\n");
4900 err = __mb_svc_update_tagmap_by_media_id(mb_svc_handle, media_id, src_tag_id, tag_record._id);
4906 static int __mb_svc_update_tag(MediaSvcHandle *mb_svc_handle, int tag_id, const char *tag_name)
4911 char *query_string = NULL;
4912 char *table_name = MB_SVC_TBL_NAME_TAG;
4915 sqlite3_mprintf(MB_SVC_TABLE_UPDATE_TAG_NAME_QUERY_STRING_BY_TAG_ID,
4916 table_name, tag_name, tag_id);
4918 mb_svc_debug("Query : %s", query_string);
4920 err = mb_svc_query_sql(mb_svc_handle, query_string);
4921 sqlite3_free(query_string);
4924 mb_svc_debug("__mb_svc_update_tag failed\n");
4925 return MB_SVC_ERROR_DB_INTERNAL;
4931 static int __mb_svc_update_tagmap(MediaSvcHandle *mb_svc_handle, int src_tag_id, int dst_tag_id)
4936 char *query_string = NULL;
4937 char *table_name = MB_SVC_TBL_NAME_TAG_MAP;
4940 sqlite3_mprintf(MB_SVC_TABLE_UPDATE_TAG_MAP_QUERY_STRING_BY_TAG_ID,
4941 table_name, dst_tag_id, src_tag_id);
4943 mb_svc_debug("Query : %s", query_string);
4945 err = mb_svc_query_sql(mb_svc_handle, query_string);
4946 sqlite3_free(query_string);
4949 mb_svc_debug("mb_svc_update_tag failed\n");
4950 return MB_SVC_ERROR_DB_INTERNAL;
4956 static int __mb_svc_update_tagmap_by_media_id(MediaSvcHandle *mb_svc_handle,
4957 const char *media_id,
4964 char *query_string = NULL;
4965 char *table_name = MB_SVC_TBL_NAME_TAG_MAP;
4969 (MB_SVC_TABLE_UPDATE_TAG_MAP_QUERY_STRING_BY_TAG_ID_AND_MEDIA_ID,
4970 table_name, dst_tag_id, media_id, src_tag_id);
4972 mb_svc_debug("Query : %s", query_string);
4974 err = mb_svc_query_sql(mb_svc_handle, query_string);
4975 sqlite3_free(query_string);
4978 mb_svc_debug("mb_svc_update_tag failed\n");
4979 return MB_SVC_ERROR_DB_INTERNAL;
4985 int mb_svc_get_tagid_by_tagname(MediaSvcHandle *mb_svc_handle, const char *tag_name)
4988 char *table_name = MB_SVC_TBL_NAME_TAG;
4989 char *query_string = NULL;
4992 sqlite3_stmt *stmt = NULL;
4996 if (tag_name == NULL) {
4997 mb_svc_debug("Error:tag_name == NULL");
4998 return MB_SVC_ERROR_INVALID_PARAMETER;
5001 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
5002 if (handle == NULL) {
5003 mb_svc_debug("handle is NULL");
5004 return MB_SVC_ERROR_DB_INTERNAL;
5008 sqlite3_mprintf(MB_SVC_TABLE_SELECT_TAG_COUNT_QUERY_STRING,
5009 table_name, tag_name);
5012 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
5014 sqlite3_free(query_string);
5016 if (SQLITE_OK != err) {
5017 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
5018 return MB_SVC_ERROR_DB_INTERNAL;
5020 rc = sqlite3_step(stmt);
5021 while (rc == SQLITE_ROW) {
5022 return_id = sqlite3_column_int(stmt, 0);
5023 rc = sqlite3_step(stmt);
5025 sqlite3_finalize(stmt);
5032 static int __mb_svc_get_media_cnt_by_tagid(MediaSvcHandle *mb_svc_handle, int tag_id)
5035 sqlite3_stmt *stmt = NULL;
5038 char *table_name = MB_SVC_TBL_NAME_TAG_MAP;
5039 char *query_string = NULL;
5041 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
5042 if (handle == NULL) {
5043 mb_svc_debug("handle is NULL");
5044 return MB_SVC_ERROR_DB_INTERNAL;
5048 sqlite3_mprintf(MB_SVC_TABLE_SELECT_MEDIA_CNT_BY_TAGID, table_name,
5052 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
5054 sqlite3_free(query_string);
5056 if (SQLITE_OK != err) {
5057 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
5058 return MB_SVC_ERROR_DB_INTERNAL;
5060 rc = sqlite3_step(stmt);
5061 while (rc == SQLITE_ROW) {
5062 count = sqlite3_column_int(stmt, 0);
5063 rc = sqlite3_step(stmt);
5065 sqlite3_finalize(stmt);
5068 mb_svc_debug("record count is %d\n", count);
5072 int mb_svc_add_web_streaming_folder(MediaSvcHandle *mb_svc_handle, char *folder_id)
5074 mb_svc_folder_record_s folder_record = {"",};
5077 folder_record.modified_date = 0;
5078 folder_record.sns_type = 0;
5079 folder_record.storage_type = MINFO_WEB_STREAMING;
5080 strncpy(folder_record.uri, "", MB_SVC_DIR_PATH_LEN_MAX + 1);
5081 strncpy(folder_record.display_name, "", MB_SVC_FILE_NAME_LEN_MAX + 1);
5082 strncpy(folder_record.web_account_id, "", MB_SVC_ARRAY_LEN_MAX + 1);
5083 strncpy(folder_record.web_album_id, "", MB_SVC_ARRAY_LEN_MAX + 1);
5085 ret = mb_svc_insert_record_folder(mb_svc_handle, &folder_record);
5087 mb_svc_debug("mb_svc_insert_record_folder failed\n");
5091 strncpy(folder_id, folder_record.uuid, MB_SVC_UUID_LEN_MAX + 1);
5096 int mb_svc_get_web_streaming_folder_uuid(MediaSvcHandle *mb_svc_handle, char *folder_uuid, int max_length)
5099 char *table_name = MB_SVC_TBL_NAME_FOLDER;
5100 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
5101 sqlite3_stmt *stmt = NULL;
5104 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
5105 if (handle == NULL) {
5106 mb_svc_debug("handle is NULL");
5107 return MB_SVC_ERROR_DB_INTERNAL;
5110 snprintf(query_string, sizeof(query_string),
5111 MB_SVC_TABLE_SELECT_FOLDER_UUID_BY_WEB_STREAMING, table_name,
5112 MINFO_WEB_STREAMING);
5114 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
5116 if (SQLITE_OK != err) {
5117 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
5118 mb_svc_debug("query string is %s\n", query_string);
5119 return MB_SVC_ERROR_DB_INTERNAL;
5122 err = sqlite3_step(stmt);
5123 if (err != SQLITE_ROW) {
5124 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
5125 mb_svc_debug("query string is %s\n", query_string);
5126 sqlite3_finalize(stmt);
5128 return MB_SVC_ERROR_DB_INTERNAL;
5131 strncpy(folder_uuid, (const char *)sqlite3_column_text(stmt, 0), max_length);
5133 sqlite3_finalize(stmt);
5138 int mb_svc_get_media_id_by_full_path(MediaSvcHandle *mb_svc_handle, const char *file_full_path, char *media_id)
5142 char folder_uuid[MB_SVC_UUID_LEN_MAX + 1] = {0,};
5143 char file_display_name[MB_SVC_FILE_NAME_LEN_MAX + 1] = { 0 };
5144 char dir_full_path[MB_SVC_DIR_PATH_LEN_MAX + 1] = { 0 };
5146 _mb_svc_get_file_parent_path(file_full_path, dir_full_path);
5147 _mb_svc_get_file_display_name(file_full_path, file_display_name);
5149 err = mb_svc_get_folder_id_by_full_path(mb_svc_handle, dir_full_path, folder_uuid, sizeof(folder_uuid));
5151 mb_svc_debug("mb_svc_get_folder_id_by_full_path fails:%s",
5156 _mb_svc_get_file_display_name(file_full_path, file_display_name);
5157 err = __mb_svc_get_media_id_by_fid_name(mb_svc_handle, folder_uuid, file_display_name, media_id);
5159 mb_svc_debug("__mb_svc_get_media_id_by_fid_name fails:%d,%s",
5160 folder_id, file_display_name);
5167 int mb_svc_get_media_id_by_http_url(MediaSvcHandle *mb_svc_handle, const char *http_url, char *media_id)
5170 char *table_name = MB_SVC_TBL_NAME_MEDIA;
5172 sqlite3_stmt *stmt = NULL;
5174 if (http_url == NULL) {
5175 mb_svc_debug("Error: http_url == NULL");
5176 return MB_SVC_ERROR_INVALID_PARAMETER;
5179 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
5180 if (handle == NULL) {
5181 mb_svc_debug("handle is NULL");
5182 return MB_SVC_ERROR_DB_INTERNAL;
5186 sqlite3_mprintf(MB_SVC_TABLE_SELECT_MEDIA_ID_BY_HTTP_URL,
5187 table_name, http_url);
5188 mb_svc_debug("Query : %s", query_string);
5191 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
5193 if (SQLITE_OK != err) {
5194 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
5195 mb_svc_debug("query string is %s\n", query_string);
5196 sqlite3_free(query_string);
5197 return MB_SVC_ERROR_DB_INTERNAL;
5199 err = sqlite3_step(stmt);
5200 if (err != SQLITE_ROW) {
5201 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
5202 mb_svc_debug("query string is %s\n", query_string);
5203 sqlite3_free(query_string);
5204 sqlite3_finalize(stmt);
5205 return MB_SVC_ERROR_DB_INTERNAL;
5208 strncpy(media_id, (const char *)sqlite3_column_text(stmt,0),
5209 MB_SVC_UUID_LEN_MAX + 1);
5211 sqlite3_free(query_string);
5212 sqlite3_finalize(stmt);
5218 mb_svc_get_media_record_by_full_path(MediaSvcHandle *mb_svc_handle,
5219 const char *file_full_path,
5220 mb_svc_media_record_s *record)
5223 char *table_name = MB_SVC_TBL_NAME_MEDIA;
5224 char *query_string = NULL;
5225 sqlite3_stmt *p_Stmt_mb = NULL;
5227 if (record == NULL) {
5228 mb_svc_debug("media_record is null \n");
5229 return MB_SVC_ERROR_INVALID_PARAMETER;
5232 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
5233 if (handle == NULL) {
5234 mb_svc_debug("handle is NULL");
5235 return MB_SVC_ERROR_DB_INTERNAL;
5239 sqlite3_mprintf(MB_SVC_TABLE_SELECT_MEDIA_BY_PATH, table_name,
5242 mb_svc_debug("Query : %s", query_string);
5245 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
5247 sqlite3_free(query_string);
5249 if (SQLITE_OK != err) {
5250 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
5251 return MB_SVC_ERROR_DB_INTERNAL;
5253 err = sqlite3_step(p_Stmt_mb);
5254 if (err != SQLITE_ROW) {
5255 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
5256 sqlite3_finalize(p_Stmt_mb);
5257 return MB_SVC_ERROR_DB_INTERNAL;
5259 mb_svc_load_record_media(p_Stmt_mb, record);
5261 sqlite3_finalize(p_Stmt_mb);
5266 int mb_svc_delete_all_media_records(MediaSvcHandle *mb_svc_handle, const minfo_store_type storage_type)
5268 mb_svc_debug("storage_type: %d", storage_type);
5270 sqlite3_stmt *stmt = NULL;
5273 char folder_uuid[MB_SVC_UUID_LEN_MAX + 1] = {0,};
5276 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
5277 GList *delete_media_list = NULL;
5279 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
5280 if (handle == NULL) {
5281 mb_svc_debug("handle is NULL");
5282 return MB_SVC_ERROR_DB_INTERNAL;
5285 err = __mb_svc_get_all_media_list(mb_svc_handle, storage_type, &delete_media_list);
5286 if (err == MB_SVC_ERROR_DB_NO_RECORD) {
5287 mb_svc_debug("There is no media");
5289 } else if (err < 0) {
5290 mb_svc_debug("__mb_svc_get_all_media_list failed : %d", err);
5291 mb_svc_debug("Keep going to remove folder..");
5293 err = __mb_svc_delete_media_records_list(mb_svc_handle, delete_media_list);
5295 _mb_svc_glist_free(&delete_media_list, true);
5297 ("__mb_svc_delete_media_records_list failed : %d", err);
5302 _mb_svc_glist_free(&delete_media_list, true);
5304 /* Get folder list to remove */
5305 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
5306 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
5307 MB_SVC_TBL_NAME_FOLDER);
5310 sqlite3_mprintf("select folder_uuid from %s where storage_type = %d;",
5311 table_name, storage_type);
5312 err = sqlite3_prepare_v2(handle, sql, strlen(sql), &stmt, NULL);
5314 mb_svc_debug("query string is %s\n", sql);
5317 if (SQLITE_OK != err) {
5318 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
5319 return MB_SVC_ERROR_DB_INTERNAL;
5323 err = sqlite3_step(stmt);
5324 if (err != SQLITE_ROW) {
5328 strncpy(folder_uuid, (const char *)sqlite3_column_text(stmt, 0), MB_SVC_UUID_LEN_MAX + 1);
5330 err = mb_svc_delete_record_folder_by_id(mb_svc_handle, folder_uuid);
5332 mb_svc_debug("mb_svc_delete_record_folder_by_id fail:%d\n", err);
5337 err = sqlite3_finalize(stmt);
5338 if (SQLITE_OK != err) {
5339 mb_svc_debug("failed to clear row\n");
5340 return MB_SVC_ERROR_DB_INTERNAL;
5346 int mb_svc_delete_invalid_media_records(MediaSvcHandle *mb_svc_handle, const minfo_store_type storage_type)
5348 mb_svc_debug("storage_type: %d", storage_type);
5350 sqlite3_stmt *stmt = NULL;
5353 char folder_uuid[MB_SVC_UUID_LEN_MAX + 1] = {0,};
5356 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
5357 GList *invalid_media_list = NULL;
5359 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
5360 if (handle == NULL) {
5361 mb_svc_debug("handle is NULL");
5362 return MB_SVC_ERROR_DB_INTERNAL;
5365 err = __mb_svc_get_invalid_media_list(mb_svc_handle, storage_type, &invalid_media_list);
5366 if (err == MB_SVC_ERROR_DB_NO_RECORD) {
5367 mb_svc_debug("There is no invalid media");
5369 } else if (err < 0) {
5370 mb_svc_debug("__mb_svc_get_invalid_media_list failed : %d", err);
5371 mb_svc_debug("Keep going to remove invalid folder..");
5373 err = __mb_svc_delete_media_records_list(mb_svc_handle, invalid_media_list);
5375 _mb_svc_glist_free(&invalid_media_list, true);
5377 ("__mb_svc_delete_media_records_list failed : %d", err);
5382 _mb_svc_glist_free(&invalid_media_list, true);
5384 /* Get folder list to remove, which is invalid */
5385 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
5386 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
5387 MB_SVC_TBL_NAME_FOLDER);
5390 sqlite3_mprintf("select folder_uuid from %s where storage_type = %d and valid=0;",
5391 table_name, storage_type);
5392 err = sqlite3_prepare_v2(handle, sql, strlen(sql), &stmt, NULL);
5394 if (SQLITE_OK != err) {
5395 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
5396 mb_svc_debug("query string is %s\n", sql);
5398 return MB_SVC_ERROR_DB_INTERNAL;
5403 err = sqlite3_step(stmt);
5404 if (err != SQLITE_ROW) {
5408 strncpy(folder_uuid, (const char *)sqlite3_column_text(stmt, 0), MB_SVC_UUID_LEN_MAX + 1);
5410 err = mb_svc_delete_record_folder_by_id(mb_svc_handle, folder_uuid);
5412 mb_svc_debug("mb_svc_delete_record_folder_by_id fail:%d\n", err);
5417 err = sqlite3_finalize(stmt);
5418 if (SQLITE_OK != err) {
5419 mb_svc_debug("failed to clear row\n");
5420 return MB_SVC_ERROR_DB_INTERNAL;
5426 int mb_svc_get_all_item_count(
5427 MediaSvcHandle *mb_svc_handle,
5428 minfo_folder_type folder_type,
5429 minfo_file_type file_type,
5430 minfo_media_favorite_type fav_type,
5433 char q_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
5434 char folder_type_str[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
5435 char file_type_str[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
5436 char fav_type_str[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
5439 sqlite3_stmt *stmt = NULL;
5441 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
5442 if (handle == NULL) {
5443 mb_svc_debug("handle is NULL");
5444 return MB_SVC_ERROR_DB_INTERNAL;
5447 if (folder_type == MINFO_CLUSTER_TYPE_ALL) {
5448 snprintf(folder_type_str, sizeof(folder_type_str), "%s", "1 and ");
5449 } else if (folder_type == MINFO_CLUSTER_TYPE_LOCAL_ALL) {
5450 snprintf(folder_type_str, sizeof(folder_type_str), "%s", "(f.storage_type=0 or f.storage_type=1) and ");
5451 } else if (folder_type == MINFO_CLUSTER_TYPE_LOCAL_PHONE) {
5452 snprintf(folder_type_str, sizeof(folder_type_str), "%s", "f.storage_type=0 and ");
5453 } else if (folder_type == MINFO_CLUSTER_TYPE_LOCAL_MMC) {
5454 snprintf(folder_type_str, sizeof(folder_type_str), "%s", "f.storage_type=1 and ");
5455 } else if (folder_type == MINFO_CLUSTER_TYPE_WEB) {
5456 snprintf(folder_type_str, sizeof(folder_type_str), "%s", "f.storage_type=2 and ");
5457 } else if (folder_type == MINFO_CLUSTER_TYPE_STREAMING) {
5458 snprintf(folder_type_str, sizeof(folder_type_str), "%s", "f.storage_type=3 and ");
5460 mb_svc_debug("Invalid Folder type: %d", folder_type);
5461 return MB_SVC_ERROR_INVALID_PARAMETER;
5464 if (file_type == MINFO_ITEM_ALL) {
5465 snprintf(file_type_str, sizeof(file_type_str), "%s", " 1 and ");
5466 } else if (file_type == MINFO_ITEM_IMAGE) {
5467 snprintf(file_type_str, sizeof(file_type_str), "%s", " m.content_type=1 and ");
5468 } else if (file_type == MINFO_ITEM_VIDEO) {
5469 snprintf(file_type_str, sizeof(file_type_str), "%s", " m.content_type=2 and ");
5471 mb_svc_debug("Invalid File type: %d", folder_type);
5472 return MB_SVC_ERROR_INVALID_PARAMETER;
5475 if (fav_type == MINFO_MEDIA_FAV_ALL) {
5476 snprintf(fav_type_str, sizeof(fav_type_str), "%s", " 1");
5477 } else if (fav_type == MINFO_MEDIA_FAV_ONLY) {
5478 snprintf(fav_type_str, sizeof(fav_type_str), "%s", " m.rating=1");
5479 } else if (fav_type == MINFO_MEDIA_UNFAV_ONLY) {
5480 snprintf(fav_type_str, sizeof(fav_type_str), "%s", " m.rating=0");
5482 mb_svc_debug("Invalid favorite type: %d", folder_type);
5483 return MB_SVC_ERROR_INVALID_PARAMETER;
5487 snprintf(q_string, sizeof(q_string), MB_SVC_SELECT_ALL_ITEM_COUNT,
5488 MB_SVC_TBL_NAME_MEDIA, folder_type_str, file_type_str, fav_type_str);
5490 mb_svc_debug("snprintf returns failure ( %d )", len);
5493 q_string[len] = '\0';
5496 mb_svc_debug("Query : %s", q_string);
5498 rc = sqlite3_prepare_v2(handle, q_string, strlen(q_string), &stmt,
5500 if (SQLITE_OK != rc) {
5501 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
5502 return MB_SVC_ERROR_DB_INTERNAL;
5505 rc = sqlite3_step(stmt);
5506 while (rc == SQLITE_ROW) {
5507 *cnt = sqlite3_column_int(stmt, 0);
5508 rc = sqlite3_step(stmt);
5511 sqlite3_finalize(stmt);
5517 int mb_svc_get_media_count_by_tagname(MediaSvcHandle *mb_svc_handle, const char *tagname, int *count)
5519 char q_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
5521 sqlite3_stmt *stmt = NULL;
5523 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
5524 if (handle == NULL) {
5525 mb_svc_debug("handle is NULL");
5526 return MB_SVC_ERROR_DB_INTERNAL;
5529 char *tag_name_with_escape = NULL;
5530 tag_name_with_escape = sqlite3_mprintf("%q", tagname);
5533 snprintf(q_string, sizeof(q_string),
5534 MB_SVC_TABLE_SELECT_COUNT_BY_TAG_NAME_WITH_LOCK_STATUS,
5535 tag_name_with_escape, 0);
5537 mb_svc_debug("snprintf returns failure ( %d )", len);
5540 q_string[len] = '\0';
5543 sqlite3_free(tag_name_with_escape);
5545 rc = sqlite3_prepare_v2(handle, q_string, strlen(q_string), &stmt,
5547 if (SQLITE_OK != rc) {
5548 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
5549 return MB_SVC_ERROR_DB_INTERNAL;
5552 rc = sqlite3_step(stmt);
5553 while (rc == SQLITE_ROW) {
5554 *count = sqlite3_column_int(stmt, 0);
5555 rc = sqlite3_step(stmt);
5558 sqlite3_finalize(stmt);