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.
23 #include <util-func.h>
25 #include "media-svc-env.h"
26 #include "media-svc-util.h"
27 #include "media-svc-db.h"
28 #include "visual-svc-debug.h"
29 #include "media-svc-db-util.h"
30 #include "visual-svc-util.h"
31 #include "media-svc-api.h"
32 #include "media-svc-structures.h"
33 #include "visual-svc-types.h"
34 #include "visual-svc-error.h"
37 * Enumerations for table name.
40 MB_SVC_TABLE_NONE = -1,
41 MB_SVC_TABLE_BOOKMARK,
43 MB_SVC_TABLE_WEB_STREAMING,
45 MB_SVC_TABLE_VIDEO_META,
46 MB_SVC_TABLE_IMAGE_META,
54 * Enumerations for bookmark field name.
57 MB_SVC_BOOKMARK_NONE = -1,
59 MB_SVC_BOOKMARK_MEDIA_UUID,
60 MB_SVC_BOOKMARK_MARKED_TIME,
61 MB_SVC_BOOKMARK_THUMBNAIL_PATH,
63 } mb_svc_bookmark_field_e;
66 * Enumerations for FOLDER field name.
69 MB_SVC_FOLDER_NONE = -1,
72 MB_SVC_FOLDER_DISPLAY_NAME,
73 MB_SVC_FOLDER_MODIFIED_DATE,
74 MB_SVC_FOLDER_WEB_ACCOUNT_ID,
75 MB_SVC_FOLDER_STORAGE_TYPE,
76 MB_SVC_FOLDER_SNS_TYPE,
77 MB_SVC_FOLDER_ALBUM_LOCK_STATUS,
78 MB_SVC_FOLDER_WEB_ALBUM_ID,
81 } mb_svc_folder_field_e;
83 * Enumerations for web_streaming field name.
86 MB_SVC_WEB_STREAMING_NONE = -1,
87 MB_SVC_WEB_STREAMING_ID,
88 MB_SVC_WEB_STREAMING_FOLDER_UUID,
89 MB_SVC_WEB_STREAMING_TITLE,
90 MB_SVC_WEB_STREAMING_DURATION,
91 MB_SVC_WEB_STREAMING_URL,
92 MB_SVC_WEB_STREAMING_THNMB_PATH,
93 MB_SVC_WEB_STREAMING_NUM,
94 } mb_svc_web_streaming_field_e;
98 * Enumerations for MEDIA field name.
101 MB_SVC_MEDIA_NONE = -1,
104 MB_SVC_MEDIA_FOLDER_UUID,
105 MB_SVC_MEDIA_DISPLAY_NAME,
106 MB_SVC_MEDIA_CONTENT_TYPE,
108 MB_SVC_MEDIA_MODIFIED_DATE,
109 MB_SVC_MEDIA_THUMBNAIL_PATH,
110 MB_SVC_MEDIA_HTTP_URL,
114 } mb_svc_media_field_e;
117 * Enumerations for videl_meta field name.
120 MB_SVC_VIDEO_META_NONE = -1,
121 MB_SVC_VIDEO_META_ID,
122 MB_SVC_VIDEO_META_MEDIA_UUID,
123 MB_SVC_VIDEO_META_ALBUM,
124 MB_SVC_VIDEO_META_ARTIST,
125 MB_SVC_VIDEO_META_TITLE,
126 MB_SVC_VIDEO_META_GENRE,
127 MB_SVC_VIDEO_META_DESCRIPTION,
128 MB_SVC_VIDEO_META_YOUTUBE_CATEGORY,
129 MB_SVC_VIDEO_META_BOOKMARK_LAST_PLAYED,
130 MB_SVC_VIDEO_META_DURATION,
131 MB_SVC_VIDEO_META_LONGISTUDE,
132 MB_SVC_VIDEO_META_LATITUDE,
133 MB_SVC_VIDEO_META_WIDTH,
134 MB_SVC_VIDEO_META_HEIGHT,
135 MB_SVC_VIDEO_META_DATETAKEN,
136 MB_SVC_VIDEO_META_NUM,
137 } mb_svc_video_meta_field_e;
141 * Enumerations for IMAGE_META field name.
144 MB_SVC_IMAGE_META_NONE = -1,
145 MB_SVC_IMAGE_META_ID,
146 MB_SVC_IMAGE_META_MEDIA_UUID,
147 MB_SVC_IMAGE_META_LONGISTUDE,
148 MB_SVC_IMAGE_META_LATITUDE,
149 MB_SVC_IMAGE_META_DESCRIPTION,
150 MB_SVC_IMAGE_META_WIDTH,
151 MB_SVC_IMAGE_META_HEIGHT,
152 MB_SVC_IMAGE_META_ORIENTATION,
153 MB_SVC_IMAGE_META_DATETAKEN,
154 MB_SVC_IMAGE_META_NUM,
155 } mb_svc_image_meta_field_e;
158 * Enumerations for VISUAL_TAG_MAP field name.
161 MB_SVC_TAG_MAP_NONE = -1,
163 MB_SVC_TAG_MAP_MEDIA_UUID,
164 MB_SVC_TAG_MAP_TAG_ID,
166 } mb_svc_tag_map_field_e;
169 * Enumerations for VISUAL_TAG field name.
172 MB_SVC_TAG_NONE = -1,
176 } mb_svc_tag_field_e;
179 * table fields information
190 #define MB_SVC_FIELD_CNT_MAX 16
191 #define MB_SVC_TABLE_CNT_MAX 8
195 mb_svc_tbl_field_s mb_svc_field[MB_SVC_FIELD_CNT_MAX];
200 mb_svc_tbl_s mb_svc_tbl[MB_SVC_TABLE_CNT_MAX] = {
202 {"_id", "INTEGER"} , /* PK */
203 {"visual_uuid", "VARCHAR(256)"} ,
204 {"marked_time", "INT"}
206 {"thumbnail_path", "VARCHAR(256)"}
211 ", primary key (_id)"}
215 {"folder_uuid", "VARCHAR(256)"} , /* PK */
216 {"path", "VARCHAR(256)"} , /* full path */
217 {"folder_name", "VARCHAR(256)"}
219 {"modified_date", "INT"}
221 {"web_account_id", "VARCHAR(256)"}
223 {"storage_type", "INT"}
227 {"lock_status", "INT"}
229 {"web_album_id", "VARCHAR(256)"}
236 ", primary key (_id)"}
240 {"_id", "INTEGER"} /* PK */
242 {"folder_uuid", "VARCHAR(256)"} /* FK, folder table */
244 {"title", "VARCHAR(256)"}
248 {"url", "VARCHAR(256)"}
250 {"thumb_path", "VARCHAR(256)"}
255 ", primary key (_id)"}
259 {"visual_uuid", "VARCHAR(256)"}
261 {"path", "VARCHAR(256)"}
263 {"folder_uuid", "VARCHAR(256)"}
265 {"display_name", "VARCHAR(256)"}
267 {"content_type", "INT"}
271 {"modified_date", "INT"}
273 {"thumbnail_path", "VARCHAR(256)"}
275 {"http_url", "VARCHAR(256)"}
284 ", primary key (_id)"}
290 {"visual_uuid", "VARCHAR(256)"}
292 {"album", "VARCHAR(256)"}
294 {"artist", "VARCHAR(256)"}
296 {"title", "VARCHAR(256)"}
298 {"genre", "VARCHAR(256)"}
300 {"description", "VARCHAR(256)"}
302 {"youtube_category", "VARCHAR(256)"}
304 {"last_played_time", "INT"}
308 {"longitude", "DOUBLE"}
310 {"latitude", "DOUBLE"}
321 ", primary key (_id)"}
327 {"visual_uuid", "VARCHAR(256)"}
329 {"longitude", "DOUBLE"}
331 {"latitude", "DOUBLE"}
333 {"description", "VARCHAR(256)"}
339 {"orientation", "INT"}
346 ", primary key (_id)"}
350 {"_id", "INTEGER"} /* PK */
352 {"visual_uuid", "VARCHAR(256)"}
359 ", primary key (_id)"}
363 {"_id", "INTEGER"} /* FK, media table */
365 {"tag_name", "VARCHAR(256)"}
370 ", primary key (_id)"}
373 int field_num_max[MB_SVC_TABLE_CNT_MAX] = { MB_SVC_BOOKMARK_NUM,
375 MB_SVC_WEB_STREAMING_NUM,
377 MB_SVC_VIDEO_META_NUM,
378 MB_SVC_IMAGE_META_NUM,
383 static __thread GList *g_sql_list = NULL;
384 static __thread char g_last_updated_folder_uuid[MB_SVC_UUID_LEN_MAX + 1] = {0,};
386 static int __mb_svc_delete_record(MediaSvcHandle *mb_svc_handle, int id, mb_svc_tbl_name_e tbl_name);
387 static int __mb_svc_delete_record_by_uuid(MediaSvcHandle *mb_svc_handle, const char *id, mb_svc_tbl_name_e tbl_name);
388 static int __mb_svc_db_get_next_id(MediaSvcHandle *mb_svc_handle, int table_id);
391 int mb_svc_set_folder_as_valid_sql_add(const char *folder_id, int valid)
393 mb_svc_debug("Folder ID:%s, valid:%d", folder_id, valid);
396 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_FOLDER;
398 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
399 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
401 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
402 mb_svc_tbl[field_seq].table_name);
404 sql = sqlite3_mprintf(MB_SVC_UPDATE_FOLDER_VALID_BY_UUID,
409 mb_svc_sql_list_add(&g_sql_list, &sql);
414 int mb_svc_set_item_as_valid_sql_add(MediaSvcHandle *mb_svc_handle, const char *full_path, int valid)
416 mb_svc_debug("full path: %s, valid:%d", full_path, valid);
418 mb_svc_media_record_s media_record = {"",};
421 if (full_path == NULL) {
422 mb_svc_debug("full_path == NULL \n");
423 return MB_SVC_ERROR_INVALID_PARAMETER;
426 ret = mb_svc_get_media_record_by_full_path(mb_svc_handle, full_path, &media_record);
428 mb_svc_debug(" mb_svc_get_media_record_by_full_path fails (%d)", ret);
431 mb_svc_debug("Media ID : %s", media_record.media_uuid);
433 /* Set the record as valid/invalid in 'media' table */
434 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_MEDIA;
436 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
437 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
439 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
440 mb_svc_tbl[field_seq].table_name);
443 sqlite3_mprintf(MB_SVC_UPDATE_MEDIA_VALID_BY_UUID, table_name, valid,
444 media_record.media_uuid);
446 mb_svc_sql_list_add(&g_sql_list, &sql);
448 if ((valid == 1) && (strcmp(g_last_updated_folder_uuid, media_record.folder_uuid) != 0)) {
449 strncpy(g_last_updated_folder_uuid, media_record.folder_uuid, MB_SVC_UUID_LEN_MAX + 1);
452 mb_svc_set_folder_as_valid_sql_add(media_record.folder_uuid, valid);
455 ("mb_svc_update_folder_valid_sql_add fail:%d\n", ret);
463 int mb_svc_set_item_as_valid(MediaSvcHandle *mb_svc_handle)
467 int length = g_list_length(g_sql_list);
469 for (i = 0; i < length; i++) {
470 char *sql = (char*)g_list_nth_data(g_sql_list, i);
471 mb_svc_query_sql(mb_svc_handle, sql);
474 mb_svc_sql_list_release(&g_sql_list);
479 mb_svc_tbl_s *mb_svc_search_matched_svc_tbl(mb_svc_tbl_name_e tbl_name)
483 if (tbl_name <= MB_SVC_TABLE_NONE || tbl_name >= MB_SVC_TABLE_NUM) {
484 mb_svc_debug("table name is invalid\n");
488 char *table_name = mb_svc_tbl[tbl_name].table_name;
490 if (table_name == NULL) {
491 mb_svc_debug("table_name pointer is null\n");
495 for (i = 0; i < MB_SVC_TABLE_CNT_MAX; ++i) { /* search the matched table */
497 (table_name, mb_svc_tbl[i].table_name,
498 MB_SVC_ARRAY_LEN_MAX)) {
499 return &mb_svc_tbl[i];
502 mb_svc_debug("error, no matched mb svc table found. %s", table_name);
506 int _mb_svc_table_exist(MediaSvcHandle *mb_svc_handle, char *table_name)
508 char szQuery[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
510 char szTableName[64] = { 0 };
511 char *pszTempName = NULL;
512 sqlite3_stmt *pstStmt_pb = NULL;
514 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
515 if (handle == NULL) {
516 mb_svc_debug("handle is NULL");
517 return MB_SVC_ERROR_DB_INTERNAL;
520 if (table_name == NULL) {
521 mb_svc_debug("table_name pointer is null\n");
522 return MB_SVC_ERROR_INVALID_PARAMETER;
524 snprintf(szQuery, sizeof(szQuery), MB_SVC_TABLE_EXIST_QUERY_STRING,
528 sqlite3_prepare_v2(handle, szQuery, strlen(szQuery), &pstStmt_pb,
530 if (SQLITE_OK != ret) {
531 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
532 mb_svc_debug("query string is %s\n", szQuery);
533 return MB_SVC_ERROR_DB_INTERNAL;
536 ret = sqlite3_step(pstStmt_pb);
537 if (SQLITE_ROW != ret) {
538 mb_svc_debug("end of row [%s]\n", sqlite3_errmsg(handle));
539 mb_svc_debug("query string is %s\n", szQuery);
540 sqlite3_finalize(pstStmt_pb);
541 return MB_SVC_ERROR_DB_INTERNAL;
544 pszTempName = (char *)sqlite3_column_text(pstStmt_pb, 0);
545 if (NULL != pszTempName) {
546 strncpy(szTableName, pszTempName, strlen(pszTempName));
548 sqlite3_finalize(pstStmt_pb);
550 mb_svc_debug("if [%s]=[%s], table exist!!!\n", table_name, szTableName);
551 ret = !(strcmp(table_name, szTableName));
556 int _mb_svc_truncate_tbl(MediaSvcHandle *mb_svc_handle)
558 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
561 mb_svc_debug("_mb_svc_truncate_tbl--enter\n");
563 for (i = 0; i < MB_SVC_TABLE_CNT_MAX; ++i) {
564 table_name = mb_svc_tbl[i].table_name;
565 if (table_name == NULL) {
566 mb_svc_debug("table_name is null\n");
567 return MB_SVC_ERROR_INVALID_PARAMETER;
569 err = _mb_svc_table_exist(mb_svc_handle, table_name);
571 snprintf(query_string, sizeof(query_string),
572 MB_SVC_TABLE_DELETE_QUERY_STRING, table_name);
573 err = mb_svc_query_sql(mb_svc_handle, query_string);
575 mb_svc_debug("truncate table failed\n");
576 mb_svc_debug("query string is %s\n",
578 return MB_SVC_ERROR_DB_INTERNAL;
582 mb_svc_debug("_mb_svc_truncate_tbl--leave\n");
586 static int __mb_svc_db_get_next_id(MediaSvcHandle *mb_svc_handle, int table_id)
589 sqlite3_stmt *stmt = NULL;
590 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
592 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
593 if (handle == NULL) {
594 mb_svc_debug("handle is NULL");
595 return MB_SVC_ERROR_DB_INTERNAL;
598 snprintf(query_string, sizeof(query_string), "select max(_id) from %s;",
599 (char *)mb_svc_tbl[table_id].table_name);
601 mb_svc_debug("Query : %s", query_string);
603 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
606 if (ret != SQLITE_OK) {
607 mb_svc_debug("Make Sequence error for prepare %s",
608 sqlite3_errmsg(handle));
609 return MB_SVC_ERROR_DB_INTERNAL;
612 ret = sqlite3_step(stmt);
613 if (ret != SQLITE_ROW) {
614 mb_svc_debug("There's no record %s", sqlite3_errmsg(handle));
616 sqlite3_finalize(stmt);
618 return MB_SVC_ERROR_DB_INTERNAL;
620 ret = sqlite3_column_int(stmt, 0);
622 sqlite3_finalize(stmt);
625 mb_svc_debug("Next ID : %d", ret + 1);
630 static int __mb_svc_delete_record(MediaSvcHandle *mb_svc_handle, int id, mb_svc_tbl_name_e tbl_name)
633 mb_svc_tbl_s *matched_tbl = NULL;
634 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
635 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
636 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
639 mb_svc_debug("id is wrong");
640 return MB_SVC_ERROR_INVALID_PARAMETER;
643 if (tbl_name <= MB_SVC_TABLE_NONE || tbl_name >= MB_SVC_TABLE_NUM) {
644 mb_svc_debug("table name is invalid\n");
645 return MB_SVC_ERROR_INVALID_PARAMETER;
648 matched_tbl = mb_svc_search_matched_svc_tbl(tbl_name);
649 if (matched_tbl != NULL) {
650 snprintf(table_name, sizeof(table_name), "%s",
651 mb_svc_tbl[tbl_name].table_name);
652 snprintf(query_string, sizeof(query_string),
653 MB_SVC_RECORD_DELETE_QUERY_STRING, table_name, id);
655 mb_svc_debug("Query: %s", query_string);
657 err = mb_svc_query_sql(mb_svc_handle, query_string);
659 mb_svc_debug("failed to delete record\n");
660 mb_svc_debug("query string is %s\n", query_string);
661 return MB_SVC_ERROR_DB_INTERNAL;
663 mb_svc_debug("Succeed to delete record\n");
664 mb_svc_debug("query string is %s\n", query_string);
667 mb_svc_debug("failed to delete record\n");
668 return MB_SVC_ERROR_DB_INTERNAL;
674 static int __mb_svc_delete_record_by_uuid(MediaSvcHandle *mb_svc_handle, const char *id, mb_svc_tbl_name_e tbl_name)
677 mb_svc_tbl_s *matched_tbl = NULL;
678 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
679 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
680 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
683 mb_svc_debug("id is NULL");
684 return MB_SVC_ERROR_INVALID_PARAMETER;
687 if (tbl_name <= MB_SVC_TABLE_NONE || tbl_name >= MB_SVC_TABLE_NUM) {
688 mb_svc_debug("table name is invalid\n");
689 return MB_SVC_ERROR_INVALID_PARAMETER;
692 matched_tbl = mb_svc_search_matched_svc_tbl(tbl_name);
693 if (matched_tbl != NULL) {
694 snprintf(table_name, sizeof(table_name), "%s",
695 mb_svc_tbl[tbl_name].table_name);
697 if (tbl_name == MB_SVC_TABLE_FOLDER) {
698 snprintf(query_string, sizeof(query_string),
699 MB_SVC_RECORD_FOLDER_DELETE_BY_UUID, table_name, id);
701 snprintf(query_string, sizeof(query_string),
702 MB_SVC_RECORD_MEDIA_DELETE_BY_UUID, table_name, id);
704 mb_svc_debug("Query: %s", query_string);
706 err = mb_svc_query_sql(mb_svc_handle, query_string);
708 mb_svc_debug("failed to delete record\n");
709 mb_svc_debug("query string is %s\n", query_string);
710 return MB_SVC_ERROR_DB_INTERNAL;
712 mb_svc_debug("Succeed to delete record\n");
713 mb_svc_debug("query string is %s\n", query_string);
716 mb_svc_debug("failed to delete record\n");
717 return MB_SVC_ERROR_DB_INTERNAL;
723 int mb_svc_delete_record_bookmark_by_id(MediaSvcHandle *mb_svc_handle, int id)
725 return __mb_svc_delete_record(mb_svc_handle, id, MB_SVC_TABLE_BOOKMARK);
728 int mb_svc_delete_record_folder_by_id(MediaSvcHandle *mb_svc_handle, const char *id)
730 return __mb_svc_delete_record_by_uuid(mb_svc_handle, id, MB_SVC_TABLE_FOLDER);
733 int mb_svc_delete_record_web_streaming_by_id(MediaSvcHandle *mb_svc_handle, int id)
735 return __mb_svc_delete_record(mb_svc_handle, id, MB_SVC_TABLE_WEB_STREAMING);
738 int mb_svc_delete_record_media_by_id(MediaSvcHandle *mb_svc_handle, const char *id)
740 return __mb_svc_delete_record_by_uuid(mb_svc_handle, id, MB_SVC_TABLE_MEDIA);
743 int mb_svc_delete_record_video_meta_by_id(MediaSvcHandle *mb_svc_handle, int id)
745 return __mb_svc_delete_record(mb_svc_handle, id, MB_SVC_TABLE_VIDEO_META);
748 int mb_svc_delete_record_image_meta_by_id(MediaSvcHandle *mb_svc_handle, int id)
750 return __mb_svc_delete_record(mb_svc_handle, id, MB_SVC_TABLE_IMAGE_META);
753 int mb_svc_insert_record_bookmark(MediaSvcHandle *mb_svc_handle, mb_svc_bookmark_record_s *record)
757 if (record == NULL) {
758 mb_svc_debug("record pointer is null\n");
759 return MB_SVC_ERROR_INVALID_PARAMETER;
763 mb_svc_tbl_field_s *mb_svc_field;
764 char *query_string = NULL;
765 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_BOOKMARK;
766 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
768 record->_id = __mb_svc_db_get_next_id(MB_SVC_TABLE_BOOKMARK);
770 if (record->_id < 0) {
771 mb_svc_debug("__mb_svc_db_get_next_id failed");
772 return MB_SVC_ERROR_DB_INTERNAL;
776 sqlite3_mprintf(MB_SVC_INSERT_BOOKMARK_TABLE,
777 mb_svc_tbl[field_seq].table_name,
778 // mb_svc_field[MB_SVC_BOOKMARK_ID].field_name,
779 mb_svc_field[MB_SVC_BOOKMARK_MEDIA_UUID].field_name,
780 mb_svc_field[MB_SVC_BOOKMARK_MARKED_TIME].field_name,
781 mb_svc_field[MB_SVC_BOOKMARK_THUMBNAIL_PATH].
782 field_name, /* record->_id, */record->media_uuid,
783 record->marked_time, record->thumbnail_path);
785 mb_svc_debug("Query : %s", query_string);
787 err = mb_svc_query_sql(mb_svc_handle, query_string);
788 sqlite3_free(query_string);
791 mb_svc_debug("Inserting bookmark table failed\n");
792 mb_svc_debug("query string is %s\n", query_string);
793 return MB_SVC_ERROR_DB_INTERNAL;
799 int mb_svc_insert_record_folder(MediaSvcHandle *mb_svc_handle, mb_svc_folder_record_s *record)
803 if (record == NULL) {
804 mb_svc_debug("record pointer is null\n");
805 return MB_SVC_ERROR_INVALID_PARAMETER;
809 mb_svc_tbl_field_s *mb_svc_field;
810 char *query_string = NULL;
811 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_FOLDER;
812 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
814 strncpy(record->uuid, _media_info_generate_uuid(), MB_SVC_UUID_LEN_MAX + 1);
817 sqlite3_mprintf(MB_SVC_INSERT_FOLDER_TABLE,
818 mb_svc_tbl[field_seq].table_name,
819 mb_svc_field[MB_SVC_FOLDER_UUID].field_name,
820 mb_svc_field[MB_SVC_FOLDER_PATH].field_name,
821 mb_svc_field[MB_SVC_FOLDER_DISPLAY_NAME].field_name,
822 mb_svc_field[MB_SVC_FOLDER_MODIFIED_DATE].
824 mb_svc_field[MB_SVC_FOLDER_WEB_ACCOUNT_ID].
826 mb_svc_field[MB_SVC_FOLDER_STORAGE_TYPE].field_name,
827 mb_svc_field[MB_SVC_FOLDER_SNS_TYPE].field_name,
828 mb_svc_field[MB_SVC_FOLDER_ALBUM_LOCK_STATUS].
830 mb_svc_field[MB_SVC_FOLDER_WEB_ALBUM_ID].field_name,
831 mb_svc_field[MB_SVC_FOLDER_VALID].field_name,
832 record->uuid, record->uri, record->display_name,
833 record->modified_date, record->web_account_id,
834 record->storage_type, record->sns_type,
835 record->lock_status, record->web_album_id, 1);
837 mb_svc_debug("Query : %s", query_string);
839 err = mb_svc_query_sql(mb_svc_handle, query_string);
840 sqlite3_free(query_string);
843 mb_svc_debug("Inserting folder table failed\n");
844 mb_svc_debug("query string is %s\n", query_string);
845 return MB_SVC_ERROR_DB_INTERNAL;
851 int mb_svc_insert_record_folder_sql(mb_svc_folder_record_s *record, char **sql)
855 if (record == NULL) {
856 mb_svc_debug("record pointer is null\n");
857 return MB_SVC_ERROR_INVALID_PARAMETER;
861 mb_svc_tbl_field_s *mb_svc_field;
863 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_FOLDER;
864 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
866 strncpy(record->uuid, _media_info_generate_uuid(), MB_SVC_UUID_LEN_MAX + 1);
869 sqlite3_mprintf(MB_SVC_INSERT_FOLDER_TABLE,
870 mb_svc_tbl[field_seq].table_name,
871 mb_svc_field[MB_SVC_FOLDER_UUID].field_name,
872 mb_svc_field[MB_SVC_FOLDER_PATH].field_name,
873 mb_svc_field[MB_SVC_FOLDER_DISPLAY_NAME].field_name,
874 mb_svc_field[MB_SVC_FOLDER_MODIFIED_DATE].
876 mb_svc_field[MB_SVC_FOLDER_WEB_ACCOUNT_ID].
878 mb_svc_field[MB_SVC_FOLDER_STORAGE_TYPE].field_name,
879 mb_svc_field[MB_SVC_FOLDER_SNS_TYPE].field_name,
880 mb_svc_field[MB_SVC_FOLDER_ALBUM_LOCK_STATUS].
882 mb_svc_field[MB_SVC_FOLDER_WEB_ALBUM_ID].field_name,
883 mb_svc_field[MB_SVC_FOLDER_VALID].field_name,
884 record->uuid, record->uri, record->display_name,
885 record->modified_date, record->web_account_id,
886 record->storage_type, record->sns_type,
887 record->lock_status, record->web_album_id, 1);
889 mb_svc_debug("Query : %s", *sql);
894 int mb_svc_insert_record_web_streaming(MediaSvcHandle *mb_svc_handle, mb_svc_web_streaming_record_s *record)
898 if (record == NULL) {
899 mb_svc_debug("record pointer is null\n");
900 return MB_SVC_ERROR_INVALID_PARAMETER;
904 mb_svc_tbl_field_s *mb_svc_field;
905 char *query_string = NULL;
906 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_WEB_STREAMING;
907 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
909 record->_id = __mb_svc_db_get_next_id(mb_svc_handle, MB_SVC_TABLE_WEB_STREAMING);
911 if (record->_id < 0) {
912 mb_svc_debug("__mb_svc_db_get_next_id failed");
913 return MB_SVC_ERROR_DB_INTERNAL;
917 sqlite3_mprintf(MB_SVC_INSERT_WEB_STREAMING_TABLE,
918 mb_svc_tbl[field_seq].table_name,
919 mb_svc_field[MB_SVC_WEB_STREAMING_ID].field_name,
920 mb_svc_field[MB_SVC_WEB_STREAMING_FOLDER_UUID].
922 mb_svc_field[MB_SVC_WEB_STREAMING_TITLE].field_name,
923 mb_svc_field[MB_SVC_WEB_STREAMING_DURATION].
925 mb_svc_field[MB_SVC_WEB_STREAMING_URL].field_name,
926 mb_svc_field[MB_SVC_WEB_STREAMING_THNMB_PATH].
927 field_name, record->_id, record->folder_uuid,
928 record->title, record->duration, record->url,
931 mb_svc_debug("Query : %s", query_string);
933 err = mb_svc_query_sql(mb_svc_handle, query_string);
934 sqlite3_free(query_string);
937 mb_svc_debug("Inserting web streaming table failed\n");
938 mb_svc_debug("query string is %s\n", query_string);
939 return MB_SVC_ERROR_DB_INTERNAL;
946 * insert record into table--media
948 int mb_svc_insert_record_media(MediaSvcHandle *mb_svc_handle, mb_svc_media_record_s *record,
949 minfo_store_type storage_type)
953 if (record == NULL) {
954 mb_svc_debug("record pointer is null\n");
955 return MB_SVC_ERROR_INVALID_PARAMETER;
959 mb_svc_tbl_field_s *mb_svc_field;
960 char *query_string = NULL;
961 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_MEDIA;
962 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
964 strncpy(record->media_uuid, _media_info_generate_uuid(), MB_SVC_UUID_LEN_MAX + 1);
967 sqlite3_mprintf(MB_SVC_INSERT_MEDIA_TABLE,
968 mb_svc_tbl[field_seq].table_name,
969 mb_svc_field[MB_SVC_MEDIA_UUID].field_name,
970 mb_svc_field[MB_SVC_MEDIA_PATH].field_name,
971 mb_svc_field[MB_SVC_MEDIA_FOLDER_UUID].field_name,
972 mb_svc_field[MB_SVC_MEDIA_DISPLAY_NAME].field_name,
973 mb_svc_field[MB_SVC_MEDIA_CONTENT_TYPE].field_name,
974 mb_svc_field[MB_SVC_MEDIA_RATING].field_name,
975 mb_svc_field[MB_SVC_MEDIA_MODIFIED_DATE].field_name,
976 mb_svc_field[MB_SVC_MEDIA_THUMBNAIL_PATH].field_name,
977 mb_svc_field[MB_SVC_MEDIA_HTTP_URL].field_name,
978 mb_svc_field[MB_SVC_MEDIA_SIZE].field_name,
979 mb_svc_field[MB_SVC_MEDIA_VALID].field_name,
980 record->media_uuid, record->path,
981 record->folder_uuid, record->display_name, record->content_type,
982 record->rate, record->modified_date,
983 record->thumbnail_path, record->http_url, record->size, 1);
985 mb_svc_debug("Query : %s", query_string);
987 err = mb_svc_query_sql(mb_svc_handle, query_string);
988 sqlite3_free(query_string);
991 mb_svc_debug("Inserting media table failed\n");
992 mb_svc_debug("query string is %s\n", query_string);
993 return MB_SVC_ERROR_DB_INTERNAL;
999 int mb_svc_insert_record_media_sql(mb_svc_media_record_s *record,
1000 minfo_store_type storage_type,
1005 if (record == NULL) {
1006 mb_svc_debug("record pointer is null\n");
1007 return MB_SVC_ERROR_INVALID_PARAMETER;
1011 mb_svc_tbl_field_s *mb_svc_field;
1013 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_MEDIA;
1014 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1016 strncpy(record->media_uuid, _media_info_generate_uuid(), MB_SVC_UUID_LEN_MAX + 1);
1019 sqlite3_mprintf(MB_SVC_INSERT_MEDIA_TABLE,
1020 mb_svc_tbl[field_seq].table_name,
1021 mb_svc_field[MB_SVC_MEDIA_UUID].field_name,
1022 mb_svc_field[MB_SVC_MEDIA_PATH].field_name,
1023 mb_svc_field[MB_SVC_MEDIA_FOLDER_UUID].field_name,
1024 mb_svc_field[MB_SVC_MEDIA_DISPLAY_NAME].field_name,
1025 mb_svc_field[MB_SVC_MEDIA_CONTENT_TYPE].field_name,
1026 mb_svc_field[MB_SVC_MEDIA_RATING].field_name,
1027 mb_svc_field[MB_SVC_MEDIA_MODIFIED_DATE].field_name,
1028 mb_svc_field[MB_SVC_MEDIA_THUMBNAIL_PATH].field_name,
1029 mb_svc_field[MB_SVC_MEDIA_HTTP_URL].field_name,
1030 mb_svc_field[MB_SVC_MEDIA_SIZE].field_name,
1031 mb_svc_field[MB_SVC_MEDIA_VALID].field_name,
1032 record->media_uuid, record->path,
1033 record->folder_uuid,
1034 record->display_name, record->content_type,
1035 record->rate, record->modified_date,
1036 record->thumbnail_path, record->http_url, record->size, 1);
1038 mb_svc_debug("Query : %s", *sql);
1044 mb_svc_insert_record_video_meta(MediaSvcHandle *mb_svc_handle, mb_svc_video_meta_record_s *record,
1045 minfo_store_type storage_type)
1049 if (record == NULL) {
1050 mb_svc_debug("record pointer is null\n");
1051 return MB_SVC_ERROR_INVALID_PARAMETER;
1055 mb_svc_tbl_field_s *mb_svc_field;
1056 char *query_string = NULL;
1057 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_VIDEO_META;
1058 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1060 record->_id = __mb_svc_db_get_next_id(MB_SVC_TABLE_VIDEO_META);
1062 if (record->_id < 0) {
1063 mb_svc_debug("__mb_svc_db_get_next_id failed");
1064 return MB_SVC_ERROR_DB_INTERNAL;
1068 sqlite3_mprintf(MB_SVC_INSERT_VIDEO_META_TABLE,
1069 mb_svc_tbl[field_seq].table_name,
1070 // mb_svc_field[MB_SVC_VIDEO_META_ID].field_name,
1071 mb_svc_field[MB_SVC_VIDEO_META_MEDIA_UUID].field_name,
1072 mb_svc_field[MB_SVC_VIDEO_META_ALBUM].field_name,
1073 mb_svc_field[MB_SVC_VIDEO_META_ARTIST].field_name,
1074 mb_svc_field[MB_SVC_VIDEO_META_TITLE].field_name,
1075 mb_svc_field[MB_SVC_VIDEO_META_GENRE].field_name,
1076 mb_svc_field[MB_SVC_VIDEO_META_DESCRIPTION].
1078 mb_svc_field[MB_SVC_VIDEO_META_YOUTUBE_CATEGORY].
1081 [MB_SVC_VIDEO_META_BOOKMARK_LAST_PLAYED].field_name,
1082 mb_svc_field[MB_SVC_VIDEO_META_DURATION].field_name,
1083 mb_svc_field[MB_SVC_VIDEO_META_LONGISTUDE].
1085 mb_svc_field[MB_SVC_VIDEO_META_LATITUDE].field_name,
1086 mb_svc_field[MB_SVC_VIDEO_META_WIDTH].field_name,
1087 mb_svc_field[MB_SVC_VIDEO_META_HEIGHT].field_name,
1088 mb_svc_field[MB_SVC_VIDEO_META_DATETAKEN].
1089 field_name, /* record->_id, */record->media_uuid,
1090 record->album, record->artist, record->title, record->genre,
1091 record->description, record->youtube_category,
1092 record->last_played_time, record->duration,
1093 record->longitude, record->latitude, record->width,
1094 record->height, record->datetaken);
1096 mb_svc_debug("Query : %s", query_string);
1098 err = mb_svc_query_sql(mb_svc_handle, query_string);
1099 sqlite3_free(query_string);
1102 mb_svc_debug("Inserting video meta table failed\n");
1103 mb_svc_debug("query string is %s\n", query_string);
1104 return MB_SVC_ERROR_DB_INTERNAL;
1111 mb_svc_insert_record_video_meta_sql(mb_svc_video_meta_record_s *record,
1112 minfo_store_type storage_type,
1117 if (record == NULL) {
1118 mb_svc_debug("record pointer is null\n");
1119 return MB_SVC_ERROR_INVALID_PARAMETER;
1123 mb_svc_tbl_field_s *mb_svc_field;
1124 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_VIDEO_META;
1125 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1127 record->_id = __mb_svc_db_get_next_id(MB_SVC_TABLE_VIDEO_META);
1129 if (record->_id < 0) {
1130 mb_svc_debug("__mb_svc_db_get_next_id failed");
1131 return MB_SVC_ERROR_DB_INTERNAL;
1135 sqlite3_mprintf(MB_SVC_INSERT_VIDEO_META_TABLE,
1136 mb_svc_tbl[field_seq].table_name,
1137 // mb_svc_field[MB_SVC_VIDEO_META_ID].field_name,
1138 mb_svc_field[MB_SVC_VIDEO_META_MEDIA_UUID].field_name,
1139 mb_svc_field[MB_SVC_VIDEO_META_ALBUM].field_name,
1140 mb_svc_field[MB_SVC_VIDEO_META_ARTIST].field_name,
1141 mb_svc_field[MB_SVC_VIDEO_META_TITLE].field_name,
1142 mb_svc_field[MB_SVC_VIDEO_META_GENRE].field_name,
1143 mb_svc_field[MB_SVC_VIDEO_META_DESCRIPTION].
1145 mb_svc_field[MB_SVC_VIDEO_META_YOUTUBE_CATEGORY].
1148 [MB_SVC_VIDEO_META_BOOKMARK_LAST_PLAYED].field_name,
1149 mb_svc_field[MB_SVC_VIDEO_META_DURATION].field_name,
1150 mb_svc_field[MB_SVC_VIDEO_META_LONGISTUDE].
1152 mb_svc_field[MB_SVC_VIDEO_META_LATITUDE].field_name,
1153 mb_svc_field[MB_SVC_VIDEO_META_WIDTH].field_name,
1154 mb_svc_field[MB_SVC_VIDEO_META_HEIGHT].field_name,
1155 mb_svc_field[MB_SVC_VIDEO_META_DATETAKEN].
1156 field_name, /* record->_id, */record->media_uuid,
1157 record->album, record->artist, record->title, record->genre,
1158 record->description, record->youtube_category,
1159 record->last_played_time, record->duration,
1160 record->longitude, record->latitude, record->width,
1161 record->height, record->datetaken);
1163 mb_svc_debug("Query : %s", *sql);
1169 mb_svc_insert_record_image_meta(MediaSvcHandle *mb_svc_handle,
1170 mb_svc_image_meta_record_s *record,
1171 minfo_store_type storage_type)
1175 if (record == NULL) {
1176 mb_svc_debug("record pointer is null\n");
1177 return MB_SVC_ERROR_INVALID_PARAMETER;
1181 mb_svc_tbl_field_s *mb_svc_field;
1182 char *query_string = NULL;
1183 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_IMAGE_META;
1184 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1186 record->_id = __mb_svc_db_get_next_id(MB_SVC_TABLE_IMAGE_META);
1188 if (record->_id < 0) {
1189 mb_svc_debug("__mb_svc_db_get_next_id failed");
1190 return MB_SVC_ERROR_DB_INTERNAL;
1194 sqlite3_mprintf(MB_SVC_INSERT_IMAGE_META_TABLE,
1195 mb_svc_tbl[field_seq].table_name,
1196 // mb_svc_field[MB_SVC_IMAGE_META_ID].field_name,
1197 mb_svc_field[MB_SVC_IMAGE_META_MEDIA_UUID].field_name,
1198 mb_svc_field[MB_SVC_IMAGE_META_LONGISTUDE].
1200 mb_svc_field[MB_SVC_IMAGE_META_LATITUDE].field_name,
1201 mb_svc_field[MB_SVC_IMAGE_META_DESCRIPTION].
1203 mb_svc_field[MB_SVC_IMAGE_META_WIDTH].field_name,
1204 mb_svc_field[MB_SVC_IMAGE_META_HEIGHT].field_name,
1205 mb_svc_field[MB_SVC_IMAGE_META_ORIENTATION].
1207 mb_svc_field[MB_SVC_IMAGE_META_DATETAKEN].
1208 field_name, /* record->_id, */record->media_uuid,
1209 record->longitude, record->latitude,
1210 record->description, record->width, record->height,
1211 record->orientation, record->datetaken);
1213 mb_svc_debug("Query : %s", query_string);
1215 err = mb_svc_query_sql(mb_svc_handle, query_string);
1216 sqlite3_free(query_string);
1219 mb_svc_debug("Inserting image meta table failed\n");
1220 mb_svc_debug("query string is %s\n", query_string);
1221 return MB_SVC_ERROR_DB_INTERNAL;
1228 mb_svc_insert_record_image_meta_sql(mb_svc_image_meta_record_s *record,
1229 minfo_store_type storage_type,
1234 if (record == NULL) {
1235 mb_svc_debug("record pointer is null\n");
1236 return MB_SVC_ERROR_INVALID_PARAMETER;
1240 mb_svc_tbl_field_s *mb_svc_field;
1241 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_IMAGE_META;
1242 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1244 record->_id = __mb_svc_db_get_next_id(MB_SVC_TABLE_IMAGE_META);
1246 if (record->_id < 0) {
1247 mb_svc_debug("__mb_svc_db_get_next_id failed");
1248 return MB_SVC_ERROR_DB_INTERNAL;
1252 sqlite3_mprintf(MB_SVC_INSERT_IMAGE_META_TABLE,
1253 mb_svc_tbl[field_seq].table_name,
1254 // mb_svc_field[MB_SVC_IMAGE_META_ID].field_name,
1255 mb_svc_field[MB_SVC_IMAGE_META_MEDIA_UUID].field_name,
1256 mb_svc_field[MB_SVC_IMAGE_META_LONGISTUDE].
1258 mb_svc_field[MB_SVC_IMAGE_META_LATITUDE].field_name,
1259 mb_svc_field[MB_SVC_IMAGE_META_DESCRIPTION].
1261 mb_svc_field[MB_SVC_IMAGE_META_WIDTH].field_name,
1262 mb_svc_field[MB_SVC_IMAGE_META_HEIGHT].field_name,
1263 mb_svc_field[MB_SVC_IMAGE_META_ORIENTATION].
1265 mb_svc_field[MB_SVC_IMAGE_META_DATETAKEN].
1266 field_name, /* record->_id, */record->media_uuid,
1267 record->longitude, record->latitude,
1268 record->description, record->width, record->height,
1269 record->orientation, record->datetaken);
1271 mb_svc_debug("Query : %s", *sql);
1276 int mb_svc_update_record_folder(MediaSvcHandle *mb_svc_handle, mb_svc_folder_record_s *record)
1280 if (record == NULL) {
1281 mb_svc_debug("record pointer is null\n");
1282 return MB_SVC_ERROR_INVALID_PARAMETER;
1286 mb_svc_tbl_field_s *mb_svc_field;
1287 char *query_string = NULL;
1288 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_FOLDER;
1289 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1292 sqlite3_mprintf(MB_SVC_UPDATE_FOLDER_TABLE,
1293 mb_svc_tbl[field_seq].table_name,
1294 mb_svc_field[MB_SVC_FOLDER_PATH].field_name,
1296 mb_svc_field[MB_SVC_FOLDER_DISPLAY_NAME].field_name,
1297 record->display_name,
1298 mb_svc_field[MB_SVC_FOLDER_MODIFIED_DATE].
1299 field_name, record->modified_date,
1300 mb_svc_field[MB_SVC_FOLDER_WEB_ACCOUNT_ID].
1301 field_name, record->web_account_id,
1302 mb_svc_field[MB_SVC_FOLDER_STORAGE_TYPE].field_name,
1303 record->storage_type,
1304 mb_svc_field[MB_SVC_FOLDER_SNS_TYPE].field_name,
1306 mb_svc_field[MB_SVC_FOLDER_ALBUM_LOCK_STATUS].
1307 field_name, record->lock_status, record->uuid);
1309 mb_svc_debug("Query : %s", query_string);
1311 err = mb_svc_query_sql(mb_svc_handle, query_string);
1312 sqlite3_free(query_string);
1315 mb_svc_debug("Updating folder table failed\n");
1316 mb_svc_debug("query string is %s\n", query_string);
1317 return MB_SVC_ERROR_DB_INTERNAL;
1323 int mb_svc_update_record_folder_sql(mb_svc_folder_record_s *record, char **sql)
1327 if (record == NULL) {
1328 mb_svc_debug("record pointer is null\n");
1329 return MB_SVC_ERROR_INVALID_PARAMETER;
1333 mb_svc_tbl_field_s *mb_svc_field;
1334 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_FOLDER;
1335 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1338 sqlite3_mprintf(MB_SVC_UPDATE_FOLDER_TABLE,
1339 mb_svc_tbl[field_seq].table_name,
1340 mb_svc_field[MB_SVC_FOLDER_PATH].field_name,
1342 mb_svc_field[MB_SVC_FOLDER_DISPLAY_NAME].field_name,
1343 record->display_name,
1344 mb_svc_field[MB_SVC_FOLDER_MODIFIED_DATE].
1345 field_name, record->modified_date,
1346 mb_svc_field[MB_SVC_FOLDER_WEB_ACCOUNT_ID].
1347 field_name, record->web_account_id,
1348 mb_svc_field[MB_SVC_FOLDER_STORAGE_TYPE].field_name,
1349 record->storage_type,
1350 mb_svc_field[MB_SVC_FOLDER_SNS_TYPE].field_name,
1352 mb_svc_field[MB_SVC_FOLDER_ALBUM_LOCK_STATUS].
1353 field_name, record->lock_status, record->uuid);
1355 mb_svc_debug("Query : %s", *sql);
1360 int mb_svc_update_record_folder_path(MediaSvcHandle *mb_svc_handle, char *old_path, char *new_path)
1364 if (old_path == NULL || new_path == NULL) {
1365 mb_svc_debug("old_path == NULL || new_path ");
1366 return MB_SVC_ERROR_INVALID_PARAMETER;
1370 mb_svc_tbl_field_s *mb_svc_field;
1371 char *query_string = NULL;
1372 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_FOLDER;
1373 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1376 sqlite3_mprintf(MB_SVC_UPDATE_FOLDER_PATH_TABLE,
1377 mb_svc_tbl[field_seq].table_name, old_path,
1380 mb_svc_debug("Query : %s", query_string);
1382 err = mb_svc_query_sql(mb_svc_handle, query_string);
1383 sqlite3_free(query_string);
1386 mb_svc_debug("Updating folder table failed\n");
1387 mb_svc_debug("query string is %s\n", query_string);
1388 return MB_SVC_ERROR_DB_INTERNAL;
1394 int mb_svc_update_folder_modified_date(MediaSvcHandle *mb_svc_handle, char *path, int date)
1399 mb_svc_debug("old_path == NULL || new_path == NULL ");
1400 return MB_SVC_ERROR_INVALID_PARAMETER;
1404 mb_svc_tbl_field_s *mb_svc_field;
1405 char *query_string = NULL;
1406 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_FOLDER;
1407 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1408 char path_like[MB_SVC_FILE_PATH_LEN_MAX + 1];
1410 snprintf(path_like, sizeof(path_like), "%s%%", path);
1413 sqlite3_mprintf(MB_SVC_UPDATE_FOLDER_MODIFIED_DATE_TABLE,
1414 mb_svc_tbl[field_seq].table_name, date, path_like);
1416 mb_svc_debug("Query : %s", query_string);
1418 err = mb_svc_query_sql(mb_svc_handle, query_string);
1419 sqlite3_free(query_string);
1422 mb_svc_debug("Updating folder table failed\n");
1423 mb_svc_debug("query string is %s\n", query_string);
1424 return MB_SVC_ERROR_DB_INTERNAL;
1430 int mb_svc_update_record_media(MediaSvcHandle *mb_svc_handle, mb_svc_media_record_s *record)
1434 if (record == NULL) {
1435 mb_svc_debug("record pointer is null\n");
1436 return MB_SVC_ERROR_INVALID_PARAMETER;
1440 mb_svc_tbl_field_s *mb_svc_field;
1441 char *query_string = NULL;
1442 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_MEDIA;
1443 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1446 sqlite3_mprintf(MB_SVC_UPDATE_MEDIA_TABLE,
1447 mb_svc_tbl[field_seq].table_name,
1448 mb_svc_field[MB_SVC_MEDIA_FOLDER_UUID].field_name,
1449 record->folder_uuid,
1450 mb_svc_field[MB_SVC_MEDIA_PATH].field_name,
1452 mb_svc_field[MB_SVC_MEDIA_DISPLAY_NAME].field_name,
1453 record->display_name,
1454 mb_svc_field[MB_SVC_MEDIA_CONTENT_TYPE].field_name,
1455 record->content_type,
1456 mb_svc_field[MB_SVC_MEDIA_RATING].field_name,
1458 mb_svc_field[MB_SVC_MEDIA_MODIFIED_DATE].field_name,
1459 record->modified_date,
1460 mb_svc_field[MB_SVC_MEDIA_THUMBNAIL_PATH].
1461 field_name, record->thumbnail_path,
1462 mb_svc_field[MB_SVC_MEDIA_HTTP_URL].field_name,
1464 mb_svc_field[MB_SVC_MEDIA_SIZE].field_name,
1466 record->media_uuid);
1468 mb_svc_debug("Query : %s", query_string);
1470 err = mb_svc_query_sql(mb_svc_handle, query_string);
1471 sqlite3_free(query_string);
1474 mb_svc_debug("Updating media table failed\n");
1475 mb_svc_debug("query string is %s\n", query_string);
1476 return MB_SVC_ERROR_DB_INTERNAL;
1482 int mb_svc_update_record_media_sql(mb_svc_media_record_s *record, char **sql)
1486 if (record == NULL) {
1487 mb_svc_debug("record pointer is null\n");
1488 return MB_SVC_ERROR_INVALID_PARAMETER;
1492 mb_svc_tbl_field_s *mb_svc_field;
1493 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_MEDIA;
1494 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1497 sqlite3_mprintf(MB_SVC_UPDATE_MEDIA_TABLE,
1498 mb_svc_tbl[field_seq].table_name,
1499 mb_svc_field[MB_SVC_MEDIA_FOLDER_UUID].field_name,
1500 record->folder_uuid,
1501 mb_svc_field[MB_SVC_MEDIA_PATH].field_name,
1503 mb_svc_field[MB_SVC_MEDIA_DISPLAY_NAME].field_name,
1504 record->display_name,
1505 mb_svc_field[MB_SVC_MEDIA_CONTENT_TYPE].field_name,
1506 record->content_type,
1507 mb_svc_field[MB_SVC_MEDIA_RATING].field_name,
1509 mb_svc_field[MB_SVC_MEDIA_MODIFIED_DATE].field_name,
1510 record->modified_date,
1511 mb_svc_field[MB_SVC_MEDIA_THUMBNAIL_PATH].
1512 field_name, record->thumbnail_path,
1513 mb_svc_field[MB_SVC_MEDIA_HTTP_URL].field_name,
1515 mb_svc_field[MB_SVC_MEDIA_SIZE].field_name,
1517 record->media_uuid);
1519 mb_svc_debug("Query : %s", *sql);
1524 int mb_svc_update_record_video_meta(MediaSvcHandle *mb_svc_handle, mb_svc_video_meta_record_s *record)
1528 if (record == NULL) {
1529 mb_svc_debug("record pointer is null\n");
1530 return MB_SVC_ERROR_INVALID_PARAMETER;
1534 mb_svc_tbl_field_s *mb_svc_field;
1535 char *query_string = NULL;
1536 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_VIDEO_META;
1537 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1540 sqlite3_mprintf(MB_SVC_UPDATE_VIDEO_META_TABLE,
1541 mb_svc_tbl[field_seq].table_name,
1542 mb_svc_field[MB_SVC_VIDEO_META_MEDIA_UUID].field_name,
1544 mb_svc_field[MB_SVC_VIDEO_META_ALBUM].field_name,
1546 mb_svc_field[MB_SVC_VIDEO_META_ARTIST].field_name,
1548 mb_svc_field[MB_SVC_VIDEO_META_TITLE].field_name,
1550 mb_svc_field[MB_SVC_VIDEO_META_GENRE].field_name,
1552 mb_svc_field[MB_SVC_VIDEO_META_DESCRIPTION].
1553 field_name, record->description,
1554 mb_svc_field[MB_SVC_VIDEO_META_YOUTUBE_CATEGORY].
1555 field_name, record->youtube_category,
1557 [MB_SVC_VIDEO_META_BOOKMARK_LAST_PLAYED].field_name,
1558 record->last_played_time,
1559 mb_svc_field[MB_SVC_VIDEO_META_DURATION].field_name,
1561 mb_svc_field[MB_SVC_VIDEO_META_LONGISTUDE].
1562 field_name, record->longitude,
1563 mb_svc_field[MB_SVC_VIDEO_META_LATITUDE].field_name,
1565 mb_svc_field[MB_SVC_VIDEO_META_WIDTH].field_name,
1567 mb_svc_field[MB_SVC_VIDEO_META_HEIGHT].field_name,
1569 mb_svc_field[MB_SVC_VIDEO_META_DATETAKEN].
1570 field_name, record->datetaken, record->_id);
1572 mb_svc_debug("Query : %s", query_string);
1574 err = mb_svc_query_sql(mb_svc_handle, query_string);
1575 sqlite3_free(query_string);
1578 mb_svc_debug("Updating video meta table failed\n");
1579 mb_svc_debug("query string is %s\n", query_string);
1580 return MB_SVC_ERROR_DB_INTERNAL;
1586 int mb_svc_update_record_image_meta(MediaSvcHandle *mb_svc_handle, mb_svc_image_meta_record_s *record)
1590 if (record == NULL) {
1591 mb_svc_debug("record pointer is null\n");
1592 return MB_SVC_ERROR_INVALID_PARAMETER;
1596 mb_svc_tbl_field_s *mb_svc_field;
1597 char *query_string = NULL;
1598 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_IMAGE_META;
1599 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1602 sqlite3_mprintf(MB_SVC_UPDATE_IMAGE_META_TABLE,
1603 mb_svc_tbl[field_seq].table_name,
1604 mb_svc_field[MB_SVC_IMAGE_META_MEDIA_UUID].field_name,
1606 mb_svc_field[MB_SVC_IMAGE_META_LONGISTUDE].
1607 field_name, record->longitude,
1608 mb_svc_field[MB_SVC_IMAGE_META_LATITUDE].field_name,
1610 mb_svc_field[MB_SVC_IMAGE_META_DESCRIPTION].
1611 field_name, record->description,
1612 mb_svc_field[MB_SVC_IMAGE_META_WIDTH].field_name,
1614 mb_svc_field[MB_SVC_IMAGE_META_HEIGHT].field_name,
1616 mb_svc_field[MB_SVC_IMAGE_META_ORIENTATION].
1617 field_name, record->orientation,
1618 mb_svc_field[MB_SVC_IMAGE_META_DATETAKEN].
1619 field_name, record->datetaken, record->_id);
1621 mb_svc_debug("Query : %s", query_string);
1623 err = mb_svc_query_sql(mb_svc_handle, query_string);
1624 sqlite3_free(query_string);
1627 mb_svc_debug("Updating image meta table failed\n");
1628 mb_svc_debug("query string is %s\n", query_string);
1629 return MB_SVC_ERROR_DB_INTERNAL;
1636 mb_svc_load_record_bookmark(sqlite3_stmt *stmt,
1637 mb_svc_bookmark_record_s *record)
1639 if (record == NULL) {
1640 mb_svc_debug("record pointer is null\n");
1641 return MB_SVC_ERROR_INVALID_PARAMETER;
1643 record->_id = sqlite3_column_int(stmt, MB_SVC_BOOKMARK_ID);
1644 strncpy(record->media_uuid,
1645 (const char *)sqlite3_column_text(stmt,
1646 MB_SVC_BOOKMARK_MEDIA_UUID),
1647 MB_SVC_UUID_LEN_MAX + 1);
1648 record->marked_time =
1649 sqlite3_column_int(stmt, MB_SVC_BOOKMARK_MARKED_TIME);
1650 strncpy(record->thumbnail_path,
1651 (const char *)sqlite3_column_text(stmt,
1652 MB_SVC_BOOKMARK_THUMBNAIL_PATH),
1653 MB_SVC_FILE_PATH_LEN_MAX + 1);
1659 mb_svc_load_record_folder(sqlite3_stmt *stmt, mb_svc_folder_record_s *record)
1661 if (record == NULL) {
1662 mb_svc_debug("record pointer is null\n");
1663 return MB_SVC_ERROR_INVALID_PARAMETER;
1666 strncpy(record->uuid,
1667 (const char *)sqlite3_column_text(stmt, MB_SVC_FOLDER_UUID),
1668 MB_SVC_UUID_LEN_MAX + 1);
1669 strncpy(record->uri,
1670 (const char *)sqlite3_column_text(stmt, MB_SVC_FOLDER_PATH),
1671 MB_SVC_DIR_PATH_LEN_MAX + 1);
1672 strncpy(record->display_name,
1673 (const char *)sqlite3_column_text(stmt,
1674 MB_SVC_FOLDER_DISPLAY_NAME),
1675 MB_SVC_FILE_NAME_LEN_MAX + 1);
1676 record->modified_date =
1677 sqlite3_column_int(stmt, MB_SVC_FOLDER_MODIFIED_DATE);
1678 strncpy(record->web_account_id,
1679 (const char *)sqlite3_column_text(stmt,
1680 MB_SVC_FOLDER_WEB_ACCOUNT_ID),
1681 MB_SVC_ARRAY_LEN_MAX + 1);
1682 record->storage_type =
1683 sqlite3_column_int(stmt, MB_SVC_FOLDER_STORAGE_TYPE);
1684 record->sns_type = sqlite3_column_int(stmt, MB_SVC_FOLDER_SNS_TYPE);
1685 record->lock_status =
1686 sqlite3_column_int(stmt, MB_SVC_FOLDER_ALBUM_LOCK_STATUS);
1687 strncpy(record->web_album_id,
1688 (const char *)sqlite3_column_text(stmt,
1689 MB_SVC_FOLDER_WEB_ALBUM_ID),
1690 MB_SVC_ARRAY_LEN_MAX + 1);
1696 mb_svc_load_record_folder_name(sqlite3_stmt *stmt, char *folder_name,
1699 if (folder_name == NULL) {
1700 mb_svc_debug("record pointer is null\n");
1701 return MB_SVC_ERROR_INVALID_PARAMETER;
1704 strncpy(folder_name, (const char *)sqlite3_column_text(stmt, 0),
1711 mb_svc_load_record_web_streaming(sqlite3_stmt *stmt,
1712 mb_svc_web_streaming_record_s *record)
1714 if (record == NULL) {
1715 mb_svc_debug("record pointer is null\n");
1716 return MB_SVC_ERROR_INVALID_PARAMETER;
1719 record->_id = sqlite3_column_int(stmt, MB_SVC_WEB_STREAMING_ID);
1720 strncpy(record->folder_uuid,
1721 (const char *)sqlite3_column_text(stmt,
1722 MB_SVC_WEB_STREAMING_FOLDER_UUID),
1723 sizeof(record->folder_uuid));
1724 strncpy(record->title,
1725 (const char *)sqlite3_column_text(stmt,
1726 MB_SVC_WEB_STREAMING_TITLE),
1727 sizeof(record->title));
1728 record->title[sizeof(record->title) - 1] = '\0';
1730 sqlite3_column_int(stmt, MB_SVC_WEB_STREAMING_DURATION);
1731 strncpy(record->url,
1732 (const char *)sqlite3_column_text(stmt,
1733 MB_SVC_WEB_STREAMING_URL),
1734 MB_SVC_FILE_PATH_LEN_MAX + 1);
1735 strncpy(record->thumb_path,
1736 (const char *)sqlite3_column_text(stmt,
1737 MB_SVC_WEB_STREAMING_THNMB_PATH),
1738 MB_SVC_FILE_PATH_LEN_MAX + 1);
1744 mb_svc_load_record_media(sqlite3_stmt *stmt, mb_svc_media_record_s *record)
1746 if (record == NULL) {
1747 mb_svc_debug("record pointer is null\n");
1748 return MB_SVC_ERROR_INVALID_PARAMETER;
1751 strncpy(record->media_uuid,
1752 (const char *)sqlite3_column_text(stmt, MB_SVC_MEDIA_UUID),
1753 MB_SVC_UUID_LEN_MAX + 1);
1754 strncpy(record->folder_uuid,
1755 (const char *)sqlite3_column_text(stmt, MB_SVC_MEDIA_FOLDER_UUID),
1756 MB_SVC_UUID_LEN_MAX + 1);
1757 strncpy(record->path,
1758 (const char *)sqlite3_column_text(stmt, MB_SVC_MEDIA_PATH),
1759 MB_SVC_FILE_PATH_LEN_MAX + 1);
1760 strncpy(record->display_name,
1761 (const char *)sqlite3_column_text(stmt,
1762 MB_SVC_MEDIA_DISPLAY_NAME),
1763 MB_SVC_FILE_NAME_LEN_MAX + 1);
1764 record->content_type =
1765 sqlite3_column_int(stmt, MB_SVC_MEDIA_CONTENT_TYPE);
1766 record->rate = sqlite3_column_int(stmt, MB_SVC_MEDIA_RATING);
1767 record->modified_date =
1768 sqlite3_column_int(stmt, MB_SVC_MEDIA_MODIFIED_DATE);
1769 strncpy(record->thumbnail_path,
1770 (const char *)sqlite3_column_text(stmt,
1771 MB_SVC_MEDIA_THUMBNAIL_PATH),
1772 MB_SVC_FILE_PATH_LEN_MAX + 1);
1773 strncpy(record->http_url,
1774 (const char *)sqlite3_column_text(stmt, MB_SVC_MEDIA_HTTP_URL),
1775 MB_SVC_DIR_PATH_LEN_MAX + 1);
1777 record->size = sqlite3_column_int(stmt, MB_SVC_MEDIA_SIZE);
1783 mb_svc_load_record_video_meta(sqlite3_stmt *stmt,
1784 mb_svc_video_meta_record_s *record)
1786 if (record == NULL) {
1787 mb_svc_debug("record pointer is null\n");
1788 return MB_SVC_ERROR_INVALID_PARAMETER;
1790 record->_id = sqlite3_column_int(stmt, MB_SVC_VIDEO_META_ID);
1791 strncpy(record->media_uuid,
1792 (const char *)sqlite3_column_text(stmt,
1793 MB_SVC_VIDEO_META_MEDIA_UUID),
1794 MB_SVC_UUID_LEN_MAX + 1);
1795 strncpy(record->album,
1796 (const char *)sqlite3_column_text(stmt,
1797 MB_SVC_VIDEO_META_ALBUM),
1798 MB_SVC_FILE_NAME_LEN_MAX + 1);
1799 strncpy(record->artist,
1800 (const char *)sqlite3_column_text(stmt,
1801 MB_SVC_VIDEO_META_ARTIST),
1802 MB_SVC_ARRAY_LEN_MAX + 1);
1803 strncpy(record->title,
1804 (const char *)sqlite3_column_text(stmt,
1805 MB_SVC_VIDEO_META_TITLE),
1806 MB_SVC_FILE_NAME_LEN_MAX + 1);
1807 strncpy(record->genre,
1808 (const char *)sqlite3_column_text(stmt,
1809 MB_SVC_VIDEO_META_GENRE),
1810 MB_SVC_FILE_NAME_LEN_MAX + 1);
1811 strncpy(record->description,
1812 (const char *)sqlite3_column_text(stmt,
1813 MB_SVC_VIDEO_META_DESCRIPTION),
1814 MB_SVC_ARRAY_LEN_MAX + 1);
1815 strncpy(record->youtube_category,
1816 (const char *)sqlite3_column_text(stmt,
1817 MB_SVC_VIDEO_META_YOUTUBE_CATEGORY),
1818 MB_SVC_ARRAY_LEN_MAX + 1);
1819 record->last_played_time =
1820 sqlite3_column_int(stmt, MB_SVC_VIDEO_META_BOOKMARK_LAST_PLAYED);
1821 record->duration = sqlite3_column_int(stmt, MB_SVC_VIDEO_META_DURATION);
1823 sqlite3_column_double(stmt, MB_SVC_VIDEO_META_LONGISTUDE);
1825 sqlite3_column_double(stmt, MB_SVC_VIDEO_META_LATITUDE);
1826 record->width = sqlite3_column_int(stmt, MB_SVC_VIDEO_META_WIDTH);
1827 record->height = sqlite3_column_int(stmt, MB_SVC_VIDEO_META_HEIGHT);
1829 sqlite3_column_int(stmt, MB_SVC_VIDEO_META_DATETAKEN);
1835 mb_svc_load_record_image_meta(sqlite3_stmt *stmt,
1836 mb_svc_image_meta_record_s *record)
1838 if (record == NULL) {
1839 mb_svc_debug("record pointer is null\n");
1840 return MB_SVC_ERROR_INVALID_PARAMETER;
1842 record->_id = sqlite3_column_int(stmt, MB_SVC_IMAGE_META_ID);
1843 strncpy(record->media_uuid,
1844 (const char *)sqlite3_column_text(stmt,
1845 MB_SVC_IMAGE_META_MEDIA_UUID),
1846 MB_SVC_UUID_LEN_MAX + 1);
1848 sqlite3_column_double(stmt, MB_SVC_IMAGE_META_LONGISTUDE);
1850 sqlite3_column_double(stmt, MB_SVC_IMAGE_META_LATITUDE);
1851 strncpy(record->description,
1852 (const char *)sqlite3_column_text(stmt,
1853 MB_SVC_IMAGE_META_DESCRIPTION),
1854 MB_SVC_ARRAY_LEN_MAX + 1);
1855 record->width = sqlite3_column_int(stmt, MB_SVC_IMAGE_META_WIDTH);
1856 record->height = sqlite3_column_int(stmt, MB_SVC_IMAGE_META_HEIGHT);
1857 record->orientation =
1858 sqlite3_column_int(stmt, MB_SVC_IMAGE_META_ORIENTATION);
1860 sqlite3_column_int(stmt, MB_SVC_IMAGE_META_DATETAKEN);
1865 int mb_svc_delete_record_media(MediaSvcHandle *mb_svc_handle, const char *folder_id, char *display_name)
1868 char *query_string = NULL;
1870 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
1871 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
1873 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
1874 mb_svc_tbl[MB_SVC_TABLE_MEDIA].table_name);
1876 query_string = sqlite3_mprintf(MB_SVC_DELETE_MEDIA_BY_FOLDER_ID_AND_DISPLAY_NAME,
1877 table_name, folder_id, display_name);
1879 err = mb_svc_query_sql(mb_svc_handle, query_string);
1881 mb_svc_debug("failed to delete record\n");
1882 mb_svc_debug("query string is %s\n", query_string);
1883 sqlite3_free(query_string);
1884 return MB_SVC_ERROR_DB_INTERNAL;
1890 int mb_svc_delete_record_folder_sql(const char *folder_id, char **sql)
1892 *sql = sqlite3_mprintf(MB_SVC_RECORD_FOLDER_DELETE_BY_UUID,
1893 mb_svc_tbl[MB_SVC_TABLE_FOLDER].table_name,
1899 int mb_svc_delete_record_media_sql(const char *media_id, char **sql)
1901 *sql = sqlite3_mprintf(MB_SVC_RECORD_MEDIA_DELETE_BY_UUID,
1902 mb_svc_tbl[MB_SVC_TABLE_MEDIA].table_name,
1908 int mb_svc_delete_record_image_meta_sql(const char *media_id, char **sql)
1910 *sql = sqlite3_mprintf(MB_SVC_DELETE_MEDIA_RELATED_INFO_BY_MEDIA_UUID,
1911 mb_svc_tbl[MB_SVC_TABLE_IMAGE_META].table_name,
1918 int mb_svc_delete_record_video_meta_sql(const char *media_id, char **sql)
1920 *sql = sqlite3_mprintf(MB_SVC_DELETE_MEDIA_RELATED_INFO_BY_MEDIA_UUID,
1921 mb_svc_tbl[MB_SVC_TABLE_VIDEO_META].table_name,
1928 mb_svc_delete_tagmap_by_media_id_sql(const char *media_id, char **sql)
1930 *sql = sqlite3_mprintf(MB_SVC_DELETE_MEDIA_RELATED_INFO_BY_MEDIA_UUID,
1931 mb_svc_tbl[MB_SVC_TABLE_TAG_MAP].table_name,
1937 int mb_svc_insert_record_tag(MediaSvcHandle *mb_svc_handle, mb_svc_tag_record_s *record)
1941 if (record == NULL) {
1942 mb_svc_debug("record pointer is null\n");
1943 return MB_SVC_ERROR_INVALID_PARAMETER;
1947 mb_svc_tbl_field_s *mb_svc_field;
1948 char *query_string = NULL;
1949 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_TAG;
1950 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1952 record->_id = __mb_svc_db_get_next_id(mb_svc_handle, MB_SVC_TABLE_TAG);
1954 if (record->_id < 0) {
1955 mb_svc_debug("__mb_svc_db_get_next_id failed");
1956 return MB_SVC_ERROR_DB_INTERNAL;
1960 sqlite3_mprintf(MB_SVC_INSERT_TAG_TABLE,
1961 mb_svc_tbl[field_seq].table_name,
1962 mb_svc_field[MB_SVC_TAG_ID].field_name,
1963 mb_svc_field[MB_SVC_TAG_NAME].field_name,
1964 record->_id, record->tag_name);
1966 mb_svc_debug("Query : %s", query_string);
1968 err = mb_svc_query_sql(mb_svc_handle, query_string);
1969 sqlite3_free(query_string);
1972 mb_svc_debug("Inserting tag table failed\n");
1973 mb_svc_debug("query string is %s\n", query_string);
1974 return MB_SVC_ERROR_DB_INTERNAL;
1980 int mb_svc_insert_record_tag_map(MediaSvcHandle *mb_svc_handle, const char *media_uuid, int tag_id)
1985 mb_svc_tbl_field_s *mb_svc_field;
1986 char *query_string = NULL;
1987 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_TAG_MAP;
1988 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
1990 int _id = __mb_svc_db_get_next_id(mb_svc_handle, MB_SVC_TABLE_TAG_MAP);
1993 mb_svc_debug("__mb_svc_db_get_next_id failed");
1994 return MB_SVC_ERROR_DB_INTERNAL;
1998 sqlite3_mprintf(MB_SVC_INSERT_TAG_MAP_TABLE,
1999 mb_svc_tbl[field_seq].table_name,
2000 mb_svc_field[MB_SVC_TAG_MAP_ID].field_name,
2001 mb_svc_field[MB_SVC_TAG_MAP_MEDIA_UUID].field_name,
2002 mb_svc_field[MB_SVC_TAG_MAP_TAG_ID].field_name, _id,
2003 media_uuid, tag_id);
2005 mb_svc_debug("Query : %s", query_string);
2007 err = mb_svc_query_sql(mb_svc_handle, query_string);
2008 sqlite3_free(query_string);
2011 mb_svc_debug("Inserting tag map table failed\n");
2012 mb_svc_debug("query string is %s\n", query_string);
2013 return MB_SVC_ERROR_DB_INTERNAL;
2019 int mb_svc_load_record_tag(sqlite3_stmt *stmt, mb_svc_tag_record_s *record)
2021 mb_svc_debug("mb_svc_load_record_tag--enter\n");
2022 if (record == NULL) {
2023 mb_svc_debug("record pointer is null\n");
2024 return MB_SVC_ERROR_INVALID_PARAMETER;
2026 record->_id = sqlite3_column_int(stmt, MB_SVC_TAG_ID);
2027 strncpy(record->tag_name,
2028 (const char *)sqlite3_column_text(stmt, MB_SVC_TAG_NAME),
2029 MB_SVC_ARRAY_LEN_MAX + 1);
2031 mb_svc_debug("mb_svc_load_record_tag--leave\n");
2035 int mb_svc_load_record_tagmap(sqlite3_stmt *stmt, mb_svc_tag_record_s *record)
2037 mb_svc_debug("mb_svc_load_record_tag--enter\n");
2038 if (record == NULL) {
2039 mb_svc_debug("record pointer is null\n");
2040 return MB_SVC_ERROR_INVALID_PARAMETER;
2043 record->_id = sqlite3_column_int(stmt, MB_SVC_TAG_MAP_ID);
2044 strncpy(record->media_uuid,
2045 (const char *)sqlite3_column_text(stmt, MB_SVC_TAG_MAP_MEDIA_UUID),
2046 MB_SVC_UUID_LEN_MAX + 1);
2048 strncpy(record->tag_name, "", MB_SVC_ARRAY_LEN_MAX + 1);
2050 mb_svc_debug("mb_svc_load_record_tag--leave\n");
2055 mb_svc_delete_bookmark_meta_by_media_id(MediaSvcHandle *mb_svc_handle, const char *media_id, minfo_file_type content_type)
2058 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2059 char *tbl_name = NULL;
2061 if (content_type == MINFO_ITEM_IMAGE) {
2062 tbl_name = MB_SVC_TBL_NAME_IMAGE_META;
2063 } else if (content_type == MINFO_ITEM_VIDEO) {
2064 tbl_name = MB_SVC_TBL_NAME_VIDEO_META;
2066 return MB_SVC_ERROR_INTERNAL;
2069 /* delete video or image record */
2070 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
2071 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
2073 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s", tbl_name);
2075 snprintf(query_string, sizeof(query_string),
2076 MB_SVC_DELETE_MEDIA_RELATED_INFO_BY_MEDIA_UUID, table_name,
2078 err = mb_svc_query_sql(mb_svc_handle, query_string);
2080 mb_svc_debug("failed to delete record\n");
2081 mb_svc_debug("query string is %s\n", query_string);
2082 return MB_SVC_ERROR_DB_INTERNAL;
2085 /* if video record delete, then its related bookmark should be deleted too. */
2086 if (content_type == MINFO_ITEM_VIDEO) {
2087 tbl_name = MB_SVC_TBL_NAME_BOOKMARK;
2088 snprintf(query_string, sizeof(query_string),
2089 MB_SVC_DELETE_MEDIA_RELATED_INFO_BY_MEDIA_UUID, tbl_name,
2091 err = mb_svc_query_sql(mb_svc_handle, query_string);
2093 mb_svc_debug("failed to delete record\n");
2094 mb_svc_debug("query string is %s\n", query_string);
2095 return MB_SVC_ERROR_DB_INTERNAL;
2099 /* still delete a tag record. */
2100 tbl_name = MB_SVC_TBL_NAME_TAG_MAP;
2101 snprintf(query_string, sizeof(query_string),
2102 MB_SVC_DELETE_MEDIA_RELATED_INFO_BY_MEDIA_UUID, tbl_name,
2105 err = mb_svc_query_sql(mb_svc_handle, query_string);
2107 mb_svc_debug("failed to delete record\n");
2108 mb_svc_debug("query string is %s\n", query_string);
2109 return MB_SVC_ERROR_DB_INTERNAL;
2116 mb_svc_delete_bookmark_meta_by_media_id_sql(const char *media_id, char **sql)
2118 *sql = sqlite3_mprintf(MB_SVC_DELETE_MEDIA_RELATED_INFO_BY_MEDIA_UUID,
2119 mb_svc_tbl[MB_SVC_TABLE_BOOKMARK].table_name,
2125 int mb_svc_update_thumb_path_by_id(MediaSvcHandle *mb_svc_handle, const char *media_id, const char *thumb_path)
2128 char *query_string = NULL;
2130 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
2131 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
2133 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
2134 mb_svc_tbl[MB_SVC_TABLE_MEDIA].table_name);
2136 query_string = sqlite3_mprintf(MB_SVC_UPDATE_MEDIA_THUMB_PATH,
2137 table_name, thumb_path, media_id);
2139 err = mb_svc_query_sql(mb_svc_handle, query_string);
2141 mb_svc_debug("failed to update record favorite\n");
2142 mb_svc_debug("query string is %s\n", query_string);
2143 sqlite3_free(query_string);
2144 return MB_SVC_ERROR_DB_INTERNAL;
2147 sqlite3_free(query_string);
2152 int mb_svc_update_favorite_by_id(MediaSvcHandle *mb_svc_handle, const char *media_id, int favorite)
2155 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2157 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
2158 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
2160 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
2161 mb_svc_tbl[MB_SVC_TABLE_MEDIA].table_name);
2163 snprintf(query_string, sizeof(query_string),
2164 MB_SVC_UPDATE_MEDIA_FAVORITE_BY_ID, table_name, favorite,
2166 err = mb_svc_query_sql(mb_svc_handle, query_string);
2168 mb_svc_debug("failed to update record favorite\n");
2169 mb_svc_debug("query string is %s\n", query_string);
2170 return MB_SVC_ERROR_DB_INTERNAL;
2176 int mb_svc_update_date_by_id(MediaSvcHandle *mb_svc_handle, const char *media_id, int date)
2180 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2182 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
2183 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
2185 snprintf(table_name, sizeof(table_name), "%s",
2186 mb_svc_tbl[MB_SVC_TABLE_MEDIA].table_name);
2188 snprintf(query_string, sizeof(query_string),
2189 MB_SVC_UPDATE_MEDIA_DATE_BY_ID, table_name, date, media_id);
2190 err = mb_svc_query_sql(mb_svc_handle, query_string);
2192 mb_svc_debug("failed to update record date\n");
2193 mb_svc_debug("query string is %s\n", query_string);
2194 return MB_SVC_ERROR_DB_INTERNAL;
2200 int mb_svc_update_thumb_path_sql(const char *media_id, const char *thumb_path, char **sql)
2204 if (thumb_path == NULL) {
2205 mb_svc_debug("thumb_path is null\n");
2206 return MB_SVC_ERROR_INVALID_PARAMETER;
2209 mb_svc_debug("thumb:%s, id:%d", thumb_path, media_id);
2212 mb_svc_tbl_field_s *mb_svc_field;
2213 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_MEDIA;
2214 mb_svc_field = mb_svc_tbl[field_seq].mb_svc_field;
2217 sqlite3_mprintf(MB_SVC_UPDATE_MEDIA_THUMB_PATH,
2218 mb_svc_tbl[field_seq].table_name,
2222 mb_svc_debug("Query : %s", *sql);
2228 mb_svc_update_album_lock_status(MediaSvcHandle *mb_svc_handle, const char *folder_id, int lock,
2229 minfo_store_type storage_type)
2232 sqlite3_stmt *stmt = NULL;
2233 char query_string[MB_SVC_DEFAULT_QUERY_SIZE + 1] = { 0 };
2235 if (lock != 0 && lock != 1) {
2236 mb_svc_debug("lock status is invalid");
2237 return MB_SVC_ERROR_INVALID_PARAMETER;
2240 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
2241 if (handle == NULL) {
2242 mb_svc_debug("handle is NULL");
2243 return MB_SVC_ERROR_DB_INTERNAL;
2247 ("mb_svc_update_album_lock_status( folder id:%d, storage_type:%d, lock:%d",
2248 folder_id, storage_type, lock);
2250 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
2251 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
2253 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
2254 MB_SVC_TBL_NAME_FOLDER);
2256 snprintf(query_string, sizeof(query_string),
2257 MB_SVC_UPDATE_FOLDER_ALBUM_STATUS, table_name);
2258 mb_svc_debug("Query : %s", query_string);
2261 sqlite3_prepare_v2(handle, query_string, strlen(query_string),
2264 if (err != SQLITE_OK) {
2265 mb_svc_debug("prepare error [%s]\n", sqlite3_errmsg(handle));
2266 mb_svc_debug("query string is %s\n", query_string);
2267 return MB_SVC_ERROR_DB_INTERNAL;
2270 sqlite3_bind_int(stmt, 1, lock);
2271 sqlite3_bind_text(stmt, 2, folder_id, strlen(folder_id), NULL);
2273 err = sqlite3_step(stmt);
2275 if (err != SQLITE_OK && err != SQLITE_DONE) {
2276 mb_svc_debug("sqlite3_step fails : %s, db error info is : %s",
2277 query_string, sqlite3_errmsg(handle));
2279 err = MB_SVC_ERROR_DB_INTERNAL;
2282 sqlite3_finalize(stmt);
2288 mb_svc_set_media_records_as_valid(MediaSvcHandle *mb_svc_handle, const minfo_store_type storage_type,
2291 mb_svc_debug("storage_type: %d", storage_type);
2293 /* 1. first set reords as valid/invalid in 'folder' table */
2294 mb_svc_tbl_name_e field_seq = MB_SVC_TABLE_FOLDER;
2295 sqlite3_stmt *stmt = NULL;
2297 char folder_uuid[MB_SVC_UUID_LEN_MAX + 1] = {0,};
2299 char table_name[MB_SVC_TABLE_NAME_MAX_LEN] = { 0, };
2300 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
2302 sqlite3 *handle = (sqlite3 *)mb_svc_handle;
2303 if (handle == NULL) {
2304 mb_svc_debug("handle is NULL");
2305 return MB_SVC_ERROR_DB_INTERNAL;
2308 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
2309 mb_svc_tbl[field_seq].table_name);
2313 sqlite3_mprintf("update %s set valid = %d where storage_type = %d;",
2314 table_name, valid, storage_type);
2315 err = mb_svc_query_sql(mb_svc_handle, sql);
2317 if (err != SQLITE_OK) {
2319 ("To set all items as valid is failed in folder table(%d)",
2321 return MB_SVC_ERROR_DB_INTERNAL;
2323 /* 2. get all of related folder id. */
2325 sqlite3_mprintf("select folder_uuid from %s where storage_type = %d;",
2326 table_name, storage_type);
2327 err = sqlite3_prepare_v2(handle, sql, strlen(sql), &stmt, NULL);
2329 mb_svc_debug("SQL : %s", sql);
2331 if (SQLITE_OK != err) {
2332 mb_svc_debug("prepare error [%s]", sqlite3_errmsg(handle));
2333 mb_svc_debug("query string is %s\n", sql);
2335 return MB_SVC_ERROR_DB_INTERNAL;
2340 field_seq = MB_SVC_TABLE_MEDIA;
2341 memset(table_name, 0x00, MB_SVC_TABLE_NAME_MAX_LEN);
2342 snprintf(table_name, MB_SVC_TABLE_NAME_MAX_LEN, "%s",
2343 mb_svc_tbl[field_seq].table_name);
2346 err = sqlite3_step(stmt);
2347 if (err != SQLITE_ROW) {
2351 //f_id = sqlite3_column_int(stmt, 0);
2352 strncpy(folder_uuid, (const char *)sqlite3_column_text(stmt, 0), MB_SVC_UUID_LEN_MAX + 1);
2354 /* 3. then set every reords as valid/invalid in 'media' table */
2357 ("update %s set valid = %d where folder_uuid = '%s';",
2358 table_name, valid, folder_uuid);
2359 err = mb_svc_query_sql(mb_svc_handle, sql);
2361 if (err != SQLITE_OK) {
2363 ("To set all items as valid is failed in folder[%d]",
2365 sqlite3_finalize(stmt);
2366 return MB_SVC_ERROR_DB_INTERNAL;
2370 sqlite3_finalize(stmt);