int media_svc_set_item_validity_begin(int data_cnt);
int media_svc_set_item_validity_end(uid_t uid);
int media_svc_set_item_validity(const char *storage_id, const char *path, int validity, uid_t uid);
-int media_svc_delete_item_by_path(sqlite3 *handle, const char *storage_id, const char *path, uid_t uid);
+int media_svc_delete_item_by_path(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, uid_t uid);
int media_svc_refresh_item(sqlite3 *handle, const char *storage_id, ms_user_storage_type_e storage_type, const char *path, uid_t uid);
int media_svc_send_dir_update_noti(sqlite3 *handle, const char *storage_id, const char *dir_path, const char *folder_id, media_item_update_type_e update_type, int pid);
int media_svc_check_db_upgrade(sqlite3 *handle, int user_version, uid_t uid);
int delete_item(sqlite3 *handle, const char *storage_id, const char *file_path, uid_t uid)
{
- return media_svc_delete_item_by_path(handle, storage_id, file_path, uid);
+ return media_svc_delete_item_by_path(handle, true, storage_id, file_path, uid);
}
int send_dir_update_noti(sqlite3 *handle, const char *storage_id, const char *dir_path, const char *folder_id, int update_type, int pid)
return ret;
}
-int _media_svc_append_album(sqlite3 *handle, const char *album, const char *artist, const char *album_art, int *album_id, uid_t uid)
+int _media_svc_append_album(sqlite3 *handle, bool is_direct, const char *album, const char *artist, const char *album_art, int *album_id, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
char *sql = sqlite3_mprintf("INSERT INTO %s (name, artist, album_art) values (%Q, %Q, %Q);", MEDIA_SVC_DB_TABLE_ALBUM, album, artist, album_art);
- ret = _media_svc_sql_query(sql, uid);
+ if (is_direct)
+ ret = _media_svc_sql_query_direct(sql, uid);
+ else
+ ret = _media_svc_sql_query(sql, uid);
+
SQLITE3_SAFE_FREE(sql);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
static int __media_svc_db_upgrade(sqlite3 *db_handle, int cur_version, uid_t uid);
static int __media_svc_rebuild_view_query(sqlite3 *db_handle, uid_t uid);
+static int __media_svc_query_direct(sqlite3 *handle, const char *query, uid_t uid);
static GHashTable *table;
int _media_svc_sql_query(const char *sql_str, uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
+ return media_db_request_update_db(sql_str, uid);
+}
- media_svc_sec_debug("[SQL query] : %s", sql_str);
+int _media_svc_sql_query_direct(const char *sql_str, uid_t uid)
+{
+ int ret = MS_MEDIA_ERR_NONE;
+ sqlite3 *handle = NULL;
- ret = media_db_request_update_db(sql_str, uid);
+ ret = media_db_connect(&handle, uid, true);
+ media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "DB connection failed");
+ ret = __media_svc_query_direct(handle, sql_str, uid);
+ media_db_disconnect(handle);
return ret;
}
return MS_MEDIA_ERR_INVALID_PARAMETER;
}
- media_svc_sec_debug("[SQL query] : %s", sql_str);
+ media_svc_sec_debug("Query[%s]", sql_str);
err = sqlite3_prepare_v2(handle, sql_str, -1, stmt, NULL);
sqlite3_free((char *)sql_str);
err = sqlite3_step(*stmt);
if (err != SQLITE_ROW) {
- media_svc_error("[No-Error] Item not found. end of row [%s]", sqlite3_errmsg(handle));
+ media_svc_debug("No record");
SQLITE3_FINALIZE(*stmt);
return MS_MEDIA_ERR_DB_NO_RECORD;
}
media_svc_retvm_if(handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "handle is NULL");
- media_svc_sec_debug("[SQL query] : %s", sql_str);
+ media_svc_sec_debug("Query[%s]", sql_str);
if (!STRING_VALID(sql_str)) {
media_svc_error("invalid query");
}
+#define MAX_RETRY 9
+#define SLEEP_TIME 1000 * 1000
+static int __media_svc_query_direct(sqlite3 *handle, const char *query, uid_t uid)
+{
+ int ret = MS_MEDIA_ERR_NONE;
+ char *zErrMsg = NULL;
+ int retry_count = 0;
+
+EXEC_RETRY:
+ ret = sqlite3_exec(handle, query, NULL, NULL, &zErrMsg);
+ if (SQLITE_OK != ret) {
+ media_svc_sec_error("Error[%s],Query[%s]", zErrMsg, query);
+ SQLITE3_SAFE_FREE(zErrMsg);
+ if (ret == SQLITE_BUSY) {
+ ret = MS_MEDIA_ERR_DB_BUSY_FAIL;
+ } else if (ret == SQLITE_CONSTRAINT) {
+ ret = MS_MEDIA_ERR_DB_CONSTRAINT_FAIL;
+ } else if (ret == SQLITE_FULL) {
+ ret = MS_MEDIA_ERR_DB_FULL_FAIL;
+ } else if (ret == SQLITE_LOCKED) {
+ if (retry_count < MAX_RETRY) {
+ media_svc_error("Locked retry[%d]", retry_count);
+ retry_count++;
+ usleep(SLEEP_TIME);
+ goto EXEC_RETRY;
+ }
+ ret = MS_MEDIA_ERR_DB_UPDATE_FAIL;
+ } else {
+ ret = MS_MEDIA_ERR_DB_UPDATE_FAIL;
+ }
+ }
+
+ return ret;
+}
+
+int _media_svc_sql_query_list_direct(GList **query_list, uid_t uid)
+{
+ int ret = MS_MEDIA_ERR_NONE;
+ int idx = 0;
+ int length = g_list_length(*query_list);
+ char *sql = NULL;
+ sqlite3 *handle = NULL;
+
+ media_svc_debug("query list length[%d]", length);
+ if (length == 0)
+ goto ZERO_LEN;
+
+ ret = media_db_connect(&handle, uid, true);
+ media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "DB connection failed");
+
+ for (idx = 0; idx < length; idx++) {
+ sql = (char *)g_list_nth_data(*query_list, idx);
+ if (STRING_VALID(sql)) {
+ ret = __media_svc_query_direct(handle, sql, uid);
+ if (ret != MS_MEDIA_ERR_NONE)
+ media_svc_debug("_media_svc_query_direct failed[%s]", sql);
+
+ SQLITE3_SAFE_FREE(sql);
+ }
+ }
+
+ media_db_disconnect(handle);
+
+ZERO_LEN:
+ _media_svc_sql_query_release(query_list);
+
+ return MS_MEDIA_ERR_NONE;
+}
+
void _media_svc_sql_query_add(GList **query_list, char **query)
{
*query_list = g_list_append(*query_list, *query);
void _media_svc_sql_query_release(GList **query_list)
{
if (*query_list) {
- media_svc_debug("_svc_sql_query_release");
g_list_free(*query_list);
*query_list = NULL;
}
ret = _media_svc_sql_prepare_to_step(handle, sql, &sql_stmt);
if (ret != MS_MEDIA_ERR_NONE) {
if (ret == MS_MEDIA_ERR_DB_NO_RECORD)
- media_svc_debug("there is no folder.");
+ media_svc_debug("No record");
else
media_svc_error("error when _media_svc_get_folder_id_by_foldername. err = [%d]", ret);
return ret;
}
-static int __media_svc_append_folder(const char *storage_id, ms_user_storage_type_e storage_type,
+static int __media_svc_append_folder(bool is_direct, const char *storage_id, ms_user_storage_type_e storage_type,
const char *folder_id, const char *folder_path, bool stack_query, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
if (_media_svc_check_pinyin_support())
_media_svc_get_pinyin_str(folder_name, &folder_name_pinyin);
/* Sometime SQLITE3 returns NO_RECORD, so need to consider conflict case.. */
- media_svc_debug("UNIQUE:path[%s], storage_uuid[%s]", folder_path, storage_id);
char *sql = sqlite3_mprintf("INSERT OR IGNORE INTO %q (folder_id, folder_path, folder_name, storage_uuid, folder_storage_type, folder_modified_time, folder_name_pinyin) values (%Q, %Q, %Q, %Q, '%d', '%d', %Q); ",
MEDIA_SVC_DB_TABLE_FOLDER, folder_id, folder_path, folder_name, storage_id, storage_type, folder_modified_date, folder_name_pinyin);
if (!stack_query) {
- ret = _media_svc_sql_query(sql, uid);
+ if (is_direct)
+ ret = _media_svc_sql_query_direct(sql, uid);
+ else
+ ret = _media_svc_sql_query(sql, uid);
+
SQLITE3_SAFE_FREE(sql);
} else {
_media_svc_sql_query_add(&g_media_svc_insert_folder_query_list, &sql);
return ret;
}
-static int __media_svc_get_and_append_parent_folder(sqlite3 *handle, const char *storage_id, const char *path, ms_user_storage_type_e storage_type, char *folder_id, uid_t uid)
+static int __media_svc_get_and_append_parent_folder(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, ms_user_storage_type_e storage_type, char *folder_id, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
unsigned int next_pos = 0;
} else {
dir_path = strndup(path, strlen(path));
folder_search_end = TRUE;
- media_svc_error("[No-Error] End Path [%s]", dir_path);
+ media_svc_sec_debug("End Path[%s]", dir_path);
}
if (STRING_VALID(MEDIA_ROOT_PATH_EXTERNAL) && (g_strcmp0(dir_path, MEDIA_ROOT_PATH_EXTERNAL) == 0)) {
return MS_MEDIA_ERR_INTERNAL;
}
- ret = __media_svc_append_folder(storage_id, storage_type, folder_uuid, dir_path, FALSE, uid);
+ ret = __media_svc_append_folder(is_direct, storage_id, storage_type, folder_uuid, dir_path, FALSE, uid);
if (ret != MS_MEDIA_ERR_NONE)
media_svc_error("__media_svc_append_folder is failed");
- media_svc_error("[No-Error] New Appended folder path [%s], folder_uuid [%s]", dir_path, folder_uuid);
- } else {
- media_svc_error("EXIST dir path : %s", dir_path);
+ media_svc_sec_debug("Append new folder path[%s] uuid[%s]", dir_path, folder_uuid);
}
SAFE_FREE(dir_path);
return MS_MEDIA_ERR_NONE;
}
-static int __media_svc_update_parent_folder_validity(sqlite3 *handle, const char *storage_id, const char *path, uid_t uid)
+static int __media_svc_update_parent_folder_validity(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
unsigned int next_pos = 0;
} else {
dir_path = strndup(path, strlen(path));
folder_search_end = TRUE;
- media_svc_error("[No-Error] End Path [%s]", dir_path);
+ media_svc_sec_debug("End Path [%s]", dir_path);
}
if (STRING_VALID(MEDIA_ROOT_PATH_EXTERNAL) && (g_strcmp0(dir_path, MEDIA_ROOT_PATH_EXTERNAL) == 0)) {
continue;
}
- ret = _media_svc_set_folder_validity(handle, storage_id, dir_path, 1, false, uid);
+ ret = _media_svc_set_folder_validity(handle, is_direct, storage_id, dir_path, 1, false, uid);
SAFE_FREE(dir_path);
media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Fail to set folder validity");
}
return MS_MEDIA_ERR_NONE;
}
-int _media_svc_get_and_append_folder(sqlite3 *handle, const char *storage_id, const char *path, ms_user_storage_type_e storage_type, char *folder_id, uid_t uid)
+int _media_svc_get_and_append_folder(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, ms_user_storage_type_e storage_type, char *folder_id, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
int validity = -1;
ret = _media_svc_get_folder_id_by_foldername_with_validity(handle, storage_id, path, folder_id, uid, &validity);
if (ret == MS_MEDIA_ERR_DB_NO_RECORD)
- ret = __media_svc_get_and_append_parent_folder(handle, storage_id, path, storage_type, folder_id, uid);
+ ret = __media_svc_get_and_append_parent_folder(handle, is_direct, storage_id, path, storage_type, folder_id, uid);
else if (ret == MS_MEDIA_ERR_NONE && validity == 0)
- ret = __media_svc_update_parent_folder_validity(handle, storage_id, path, uid);
+ ret = __media_svc_update_parent_folder_validity(handle, is_direct, storage_id, path, uid);
return ret;
}
-int _media_svc_get_and_append_folder_id_by_path(sqlite3 *handle, const char *storage_id, const char *path, ms_user_storage_type_e storage_type, char *folder_id, uid_t uid)
+int _media_svc_get_and_append_folder_id_by_path(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, ms_user_storage_type_e storage_type, char *folder_id, uid_t uid)
{
char *dir_path = NULL;
int ret = MS_MEDIA_ERR_NONE;
dir_path = g_path_get_dirname(path);
- ret = _media_svc_get_and_append_folder(handle, storage_id, dir_path, storage_type, folder_id, uid);
+ ret = _media_svc_get_and_append_folder(handle, is_direct, storage_id, dir_path, storage_type, folder_id, uid);
SAFE_FREE(dir_path);
ret = _media_svc_get_folder_id_by_foldername(handle, storage_id, path_name, folder_id, uid);
if (ret == MS_MEDIA_ERR_DB_NO_RECORD) {
- ret = __media_svc_get_and_append_parent_folder(handle, storage_id, path_name, storage_type, folder_id, uid);
+ ret = __media_svc_get_and_append_parent_folder(handle, true, storage_id, path_name, storage_type, folder_id, uid);
} else {
sql = sqlite3_mprintf("UPDATE %q SET validity=1 WHERE storage_uuid = '%q' AND folder_path = '%q';", MEDIA_SVC_DB_TABLE_FOLDER, storage_id, path);
if (!stack_query) {
- ret = _media_svc_sql_query(sql, uid);
+ ret = _media_svc_sql_query_direct(sql, uid);
SQLITE3_SAFE_FREE(sql);
} else {
_media_svc_sql_query_add(&g_media_svc_insert_folder_query_list, &sql);
return ret;
}
-int _media_svc_set_folder_validity(sqlite3 *handle, const char *storage_id, const char *start_path, int validity, bool is_recursive, uid_t uid)
+int _media_svc_set_folder_validity(sqlite3 *handle, bool is_direct, const char *storage_id, const char *start_path, int validity, bool is_recursive, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
char *sql = NULL;
- char start_path_id[MEDIA_SVC_UUID_SIZE+1] = {0,};
if (is_recursive) {
- ret = _media_svc_get_folder_id_by_foldername(handle, storage_id, start_path, start_path_id, uid);
- media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "_media_svc_get_folder_id_by_foldername fail");
- media_svc_retvm_if(!STRING_VALID(start_path_id), MS_MEDIA_ERR_INVALID_PARAMETER, "start_path_id is NULL");
-
- sql = sqlite3_mprintf("UPDATE %q SET validity = %d WHERE storage_uuid = '%q' AND (folder_path LIKE '%q/%%' OR folder_id='%q');",
- MEDIA_SVC_DB_TABLE_FOLDER, validity, storage_id, start_path, start_path_id);
+ sql = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE storage_uuid='%q' AND (folder_path LIKE '%q/%%' OR folder_path='%q');",
+ MEDIA_SVC_DB_TABLE_FOLDER, validity, storage_id, start_path, start_path);
} else {
- sql = sqlite3_mprintf("UPDATE %q SET validity = %d WHERE storage_uuid = '%q' AND folder_path='%q';",
+ sql = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE storage_uuid='%q' AND folder_path='%q';",
MEDIA_SVC_DB_TABLE_FOLDER, validity, storage_id, start_path);
}
- ret = _media_svc_sql_query(sql, uid);
+ if (is_direct)
+ ret = _media_svc_sql_query_direct(sql, uid);
+ else
+ ret = _media_svc_sql_query(sql, uid);
SQLITE3_SAFE_FREE(sql);
return MS_MEDIA_ERR_NONE;
}
-int _media_svc_insert_item_with_data(sqlite3 *handle, const char *storage_id, media_svc_content_info_s *content_info, bool stack_query, uid_t uid)
+int _media_svc_insert_item_with_data(sqlite3 *handle, bool is_direct, const char *storage_id, media_svc_content_info_s *content_info, bool stack_query, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
);
/* Check query length */
- if (sql != NULL && strlen(sql) >= (MEDIA_SVC_QUERY_LEN_MAX - 1)) {
+ if (sql != NULL && strlen(sql) >= (MEDIA_SVC_QUERY_LEN_MAX - 1) && is_direct == false) {
media_svc_debug("Query length is over %d byte.. So, remake query using only basic information..", MEDIA_SVC_QUERY_LEN_MAX - 1);
SQLITE3_SAFE_FREE(sql);
content_info->sync_status,
content_info->file_name_pinyin,
content_info->storage_uuid,
- content_info->media_meta.is_360 /* 1st line */
+ content_info->media_meta.is_360
);
}
if (!stack_query) {
- ret = _media_svc_sql_query(sql, uid);
+ if (is_direct)
+ ret = _media_svc_sql_query_direct(sql, uid);
+ else
+ ret = _media_svc_sql_query(sql, uid);
+
SQLITE3_SAFE_FREE(sql);
if (ret != MS_MEDIA_ERR_NONE) {
media_svc_error("failed to insert item");
return ret;
}
} else {
- media_svc_debug("query : %s", sql);
+ media_svc_sec_debug("Query[%s]", sql);
_media_svc_sql_query_add(&g_media_svc_insert_item_query_list, &sql);
}
);
if (sql != NULL) {
- media_svc_debug("query : %s", sql);
+ media_svc_debug("query[%s]", sql);
_media_svc_sql_query_add(&g_media_svc_update_item_query_list, &sql);
} else {
media_svc_error("sqlite3_mprintf failed");
return MS_MEDIA_ERR_NONE;
}
-int _media_svc_delete_item_by_path(const char *storage_id, const char *path, bool stack_query, uid_t uid)
+int _media_svc_delete_item_by_path(bool is_direct, const char *storage_id, const char *path, bool stack_query, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
char *sql = NULL;
sql = sqlite3_mprintf("DELETE FROM '%q' WHERE media_path='%q';", storage_id, path);
if (!stack_query) {
- ret = _media_svc_sql_query(sql, uid);
+ if (is_direct)
+ ret = _media_svc_sql_query_direct(sql, uid);
+ else
+ ret = _media_svc_sql_query(sql, uid);
SQLITE3_SAFE_FREE(sql);
if (ret != MS_MEDIA_ERR_NONE) {
media_svc_error("failed to delete item");
sql = sqlite3_mprintf("UPDATE '%q' SET validity=%d WHERE media_path='%q';", storage_id, validity, path);
if (!stack_query) {
- ret = _media_svc_sql_query(sql, uid);
+ ret = _media_svc_sql_query_direct(sql, uid);
SQLITE3_SAFE_FREE(sql);
} else {
_media_svc_sql_query_add(&g_media_svc_item_validity_query_list, &sql);
int ret = MS_MEDIA_ERR_NONE;
/* For multiples of 200, empty requests are possible */
- if (query_type == MEDIA_SVC_QUERY_UPDATE_COMMON) {
+ switch (query_type) {
+ case MEDIA_SVC_QUERY_UPDATE_COMMON:
if (g_media_svc_update_list == NULL || g_list_length(g_media_svc_update_list) == 0)
return MS_MEDIA_ERR_NONE;
- }
- ret = _media_svc_sql_begin_trans(uid);
- media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
+ ret = _media_svc_sql_begin_trans(uid);
+ media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
- if (query_type == MEDIA_SVC_QUERY_SET_ITEM_VALIDITY)
- ret = _media_svc_sql_query_list(&g_media_svc_item_validity_query_list, uid);
- else if (query_type == MEDIA_SVC_QUERY_INSERT_ITEM)
- ret = _media_svc_sql_query_list(&g_media_svc_insert_item_query_list, uid);
- else if (query_type == MEDIA_SVC_QUERY_UPDATE_ITEM)
- ret = _media_svc_sql_query_list(&g_media_svc_update_item_query_list, uid);
- else if (query_type == MEDIA_SVC_QUERY_INSERT_FOLDER)
- ret = _media_svc_sql_query_list(_media_svc_get_folder_list_ptr(), uid);
- else if (query_type == MEDIA_SVC_QUERY_UPDATE_COMMON)
ret = _media_svc_sql_query_list(&g_media_svc_update_list, uid);
- else
- ret = MS_MEDIA_ERR_INVALID_PARAMETER;
+ media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Failed to request queries");
+
+ ret = _media_svc_sql_end_trans(uid);
+ break;
+ case MEDIA_SVC_QUERY_SET_ITEM_VALIDITY:
+ ret = _media_svc_sql_query_list_direct(&g_media_svc_item_validity_query_list, uid);
+ break;
+ case MEDIA_SVC_QUERY_INSERT_ITEM:
+ ret = _media_svc_sql_query_list_direct(&g_media_svc_insert_item_query_list, uid);
+ break;
+ case MEDIA_SVC_QUERY_UPDATE_ITEM:
+ ret = _media_svc_sql_query_list_direct(&g_media_svc_update_item_query_list, uid);
+ break;
+ case MEDIA_SVC_QUERY_INSERT_FOLDER:
+ ret = _media_svc_sql_query_list_direct(_media_svc_get_folder_list_ptr(), uid);
+ break;
+ default:
+ media_svc_error("Wrong type[%d]", query_type);
+ return MS_MEDIA_ERR_INVALID_PARAMETER;
+ }
media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Failed to request queries");
- ret = _media_svc_sql_end_trans(uid);
- media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Failed to batch insert");
-
return MS_MEDIA_ERR_NONE;
}
char *sql = sqlite3_mprintf("INSERT INTO %q (storage_id, storage_path, storage_type) values (%Q, %Q, %d);",
MEDIA_SVC_DB_TABLE_STORAGE, storage_id, storage_path, storage_type);
- ret = _media_svc_sql_query(sql, uid);
+ ret = _media_svc_sql_query_direct(sql, uid);
SQLITE3_SAFE_FREE(sql);
return ret;
/*Storage table update*/
sql = sqlite3_mprintf("UPDATE '%q' SET storage_path=%Q WHERE storage_id=%Q;", MEDIA_SVC_DB_TABLE_STORAGE, path, storage_id);
- ret = _media_svc_sql_query(sql, uid);
+ ret = _media_svc_sql_query_direct(sql, uid);
SQLITE3_SAFE_FREE(sql);
if (ret != MS_MEDIA_ERR_NONE) {
G_SAFE_FREE(old_storage_path);
/*Folder table update*/
sql = sqlite3_mprintf("UPDATE '%q' SET folder_path=REPLACE(folder_path, %Q, %Q) WHERE storage_uuid=%Q;", MEDIA_SVC_DB_TABLE_FOLDER, old_storage_path, path, storage_id);
- ret = _media_svc_sql_query(sql, uid);
+ ret = _media_svc_sql_query_direct(sql, uid);
SQLITE3_SAFE_FREE(sql);
if (ret != MS_MEDIA_ERR_NONE) {
G_SAFE_FREE(old_storage_path);
/*Media table update*/
sql = sqlite3_mprintf("UPDATE '%q' SET media_path=REPLACE(media_path, %Q, %Q);", storage_id, old_storage_path, path);
- ret = _media_svc_sql_query(sql, uid);
+ ret = _media_svc_sql_query_direct(sql, uid);
SQLITE3_SAFE_FREE(sql);
G_SAFE_FREE(old_storage_path);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
/* remove media before drop table (for clear playlist, and tag table)*/
sql = sqlite3_mprintf("DELETE FROM '%q';DROP TABLE '%q';", storage_id, storage_id);
- ret = _media_svc_sql_query(sql, uid);
+ ret = _media_svc_sql_query_direct(sql, uid);
SQLITE3_SAFE_FREE(sql);
if (ret != MS_MEDIA_ERR_NONE) {
media_svc_error("Fail to drop table[%s]", storage_id);
/* Update storage, folder table */
sql = sqlite3_mprintf("DELETE FROM %q WHERE validity=0;DELETE FROM %q WHERE validity=0;", MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_TABLE_FOLDER);
- ret = _media_svc_sql_query(sql, uid);
+ ret = _media_svc_sql_query_direct(sql, uid);
SQLITE3_SAFE_FREE(sql);
if (ret != MS_MEDIA_ERR_NONE) {
media_svc_error("Fail to update storage table");
else
sql = sqlite3_mprintf("UPDATE '%q' SET validity=%d WHERE storage_id=%Q;", MEDIA_SVC_DB_TABLE_STORAGE, validity, storage_id);
- ret = _media_svc_sql_query(sql, uid);
+ ret = _media_svc_sql_query_direct(sql, uid);
SQLITE3_SAFE_FREE(sql);
return ret;
return MS_MEDIA_ERR_NONE;
}
-int _media_svc_extract_media_metadata(sqlite3 *handle, media_svc_content_info_s *content_info, uid_t uid)
+int _media_svc_extract_media_metadata(sqlite3 *handle, bool is_direct, media_svc_content_info_s *content_info, uid_t uid)
{
MMHandleType content = 0;
MMHandleType tag = 0;
media_svc_debug("album does not exist. So start to make album art");
if ((g_strcmp0(content_info->media_meta.album, MEDIA_SVC_TAG_UNKNOWN)) &&
(g_strcmp0(content_info->media_meta.artist, MEDIA_SVC_TAG_UNKNOWN)))
- ret = _media_svc_append_album(handle, content_info->media_meta.album, content_info->media_meta.artist, content_info->thumbnail_path, &album_id, uid);
+ ret = _media_svc_append_album(handle, is_direct, content_info->media_meta.album, content_info->media_meta.artist, content_info->thumbnail_path, &album_id, uid);
else
- ret = _media_svc_append_album(handle, content_info->media_meta.album, content_info->media_meta.artist, NULL, &album_id, uid);
+ ret = _media_svc_append_album(handle, is_direct, content_info->media_meta.album, content_info->media_meta.artist, NULL, &album_id, uid);
content_info->album_id = album_id;
}
int media_svc_insert_item_begin(int data_cnt, int with_noti, int from_pid)
{
- media_svc_debug("Transaction data count : [%d]", data_cnt);
-
media_svc_retvm_if(data_cnt < 1, MS_MEDIA_ERR_INVALID_PARAMETER, "data_cnt shuld be bigger than 1");
g_media_svc_insert_item_data_cnt = data_cnt;
else if (media_type == MEDIA_SVC_MEDIA_TYPE_IMAGE)
ret = _media_svc_extract_image_metadata(&content_info);
else
- ret = _media_svc_extract_media_metadata(handle, &content_info, uid);
+ ret = _media_svc_extract_media_metadata(handle, true, &content_info, uid);
media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
/*Set or Get folder id*/
- ret = _media_svc_get_and_append_folder_id_by_path(handle, storage_id, path, storage_type, folder_uuid, uid);
+ ret = _media_svc_get_and_append_folder_id_by_path(handle, true, storage_id, path, storage_type, folder_uuid, uid);
media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
content_info.folder_uuid = g_strdup(folder_uuid);
if (g_media_svc_insert_item_data_cnt == 1) {
- ret = _media_svc_insert_item_with_data(handle, storage_id, &content_info, FALSE, uid);
+ ret = _media_svc_insert_item_with_data(handle, true, storage_id, &content_info, FALSE, uid);
media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
if (g_insert_with_noti)
} else if (g_media_svc_insert_item_cur_data_cnt < (g_media_svc_insert_item_data_cnt - 1)) {
- ret = _media_svc_insert_item_with_data(handle, storage_id, &content_info, TRUE, uid);
+ ret = _media_svc_insert_item_with_data(handle, true, storage_id, &content_info, TRUE, uid);
media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
if (g_insert_with_noti)
} else if (g_media_svc_insert_item_cur_data_cnt == (g_media_svc_insert_item_data_cnt - 1)) {
- ret = _media_svc_insert_item_with_data(handle, storage_id, &content_info, TRUE, uid);
+ ret = _media_svc_insert_item_with_data(handle, true, storage_id, &content_info, TRUE, uid);
media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
if (g_insert_with_noti)
} else if (media_type == MEDIA_SVC_MEDIA_TYPE_IMAGE) {
ret = _media_svc_extract_image_metadata(&content_info);
} else {
- ret = _media_svc_extract_media_metadata(handle, &content_info, uid);
+ ret = _media_svc_extract_media_metadata(handle, false, &content_info, uid);
}
media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
/*Set or Get folder id*/
- ret = _media_svc_get_and_append_folder_id_by_path(handle, storage_id, path, storage_type, folder_uuid, uid);
+ ret = _media_svc_get_and_append_folder_id_by_path(handle, false, storage_id, path, storage_type, folder_uuid, uid);
media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
content_info.folder_uuid = g_strdup(folder_uuid);
}
}
- ret = _media_svc_insert_item_with_data(handle, storage_id, &content_info, FALSE, uid);
+ ret = _media_svc_insert_item_with_data(handle, false, storage_id, &content_info, FALSE, uid);
if (ret == MS_MEDIA_ERR_NONE) {
media_svc_debug("Insertion is successful. Sending noti for this");
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
/*check and update folder*/
- ret = _media_svc_get_and_append_folder_id_by_path(handle, dst_stg_id, dest_path, dst_stg_type, folder_uuid, uid);
+ ret = _media_svc_get_and_append_folder_id_by_path(handle, false, dst_stg_id, dest_path, dst_stg_type, folder_uuid, uid);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
/*get filename*/
return MS_MEDIA_ERR_NONE;
}
-int media_svc_delete_item_by_path(sqlite3 *handle, const char *storage_id, const char *path, uid_t uid)
+int media_svc_delete_item_by_path(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
char thumb_path[MEDIA_SVC_PATHNAME_SIZE] = {0, };
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
/*Delete item*/
- ret = _media_svc_delete_item_by_path(storage_id, path, FALSE, uid);
+ ret = _media_svc_delete_item_by_path(is_direct, storage_id, path, FALSE, uid);
if (ret != MS_MEDIA_ERR_NONE) {
media_svc_error("_media_svc_delete_item_by_path failed : %d", ret);
_media_svc_destroy_noti_item(noti_item);
_media_svc_publish_noti(MS_MEDIA_ITEM_FILE, MS_MEDIA_ITEM_DELETE, path, media_type, noti_item->media_uuid, noti_item->mime_type);
_media_svc_destroy_noti_item(noti_item);
} else {
- ret = _media_svc_delete_item_by_path(storage_id, path, TRUE, uid);
+ ret = _media_svc_delete_item_by_path(is_direct, storage_id, path, TRUE, uid);
if (ret != MS_MEDIA_ERR_NONE) {
media_svc_error("_media_svc_delete_item_by_path failed : %d", ret);
return ret;
else if (media_type == MEDIA_SVC_MEDIA_TYPE_IMAGE)
ret = _media_svc_extract_image_metadata(&content_info);
else
- ret = _media_svc_extract_media_metadata(handle, &content_info, uid);
+ ret = _media_svc_extract_media_metadata(handle, false, &content_info, uid);
if (ret != MS_MEDIA_ERR_NONE) {
_media_svc_destroy_noti_item(noti_item);
int media_svc_set_folder_validity(sqlite3 *handle, const char *storage_id, const char *start_path, int validity, bool is_recursive, uid_t uid)
{
- return _media_svc_set_folder_validity(handle, storage_id, start_path, validity, is_recursive, uid);
+ return _media_svc_set_folder_validity(handle, true, storage_id, start_path, validity, is_recursive, uid);
}
int media_svc_check_folder_exist_by_path(sqlite3 *handle, const char *storage_id, const char *folder_path)
#include <sqlite3.h>
#include <sys/types.h>
+#include <stdbool.h>
int _media_svc_get_album_id(sqlite3 *handle, const char *album, const char *artist, int *album_id);
-int _media_svc_append_album(sqlite3 *handle, const char *album, const char *artist, const char *album_art, int *album_id, uid_t uid);
+int _media_svc_append_album(sqlite3 *handle, bool is_direct, const char *album, const char *artist, const char *album_art, int *album_id, uid_t uid);
#endif /*_MEDIA_SVC_ALBUM_H_*/
int _media_svc_create_media_table_with_id(const char *table_id, uid_t uid);
int _media_svc_update_media_view(sqlite3 *db_handle, uid_t uid);
int _media_svc_sql_query(const char *sql_str, uid_t uid);
+int _media_svc_sql_query_direct(const char *sql_str, uid_t uid);
int _media_svc_get_user_version(sqlite3 *db_handle, int *user_version);
int _media_svc_sql_prepare_to_step(sqlite3 *handle, const char *sql_str, sqlite3_stmt **stmt);
int _media_svc_sql_prepare_to_step_simple(sqlite3 *handle, const char *sql_str, sqlite3_stmt **stmt);
int _media_svc_sql_begin_trans(uid_t uid);
int _media_svc_sql_end_trans(uid_t uid);
int _media_svc_sql_query_list(GList **query_list, uid_t uid);
+int _media_svc_sql_query_list_direct(GList **query_list, uid_t uid);
void _media_svc_sql_query_add(GList **query_list, char **query);
void _media_svc_sql_query_release(GList **query_list);
int _media_svc_check_db_upgrade(sqlite3 *db_handle, int user_version, uid_t uid);
int _media_svc_get_folder_id_by_foldername(sqlite3 *handle, const char *storage_id, const char *folder_name, char *folder_id, uid_t uid);
int _media_svc_get_folder_id_by_foldername_with_validity(sqlite3 *handle, const char *storage_id, const char *folder_name, char *folder_id, uid_t uid, int *validity);
int _media_svc_update_folder_modified_time_by_folder_uuid(const char *folder_uuid, const char *folder_path, uid_t uid);
-int _media_svc_get_and_append_folder(sqlite3 *handle, const char *storage_id, const char *path, ms_user_storage_type_e storage_type, char *folder_id, uid_t uid);
-int _media_svc_get_and_append_folder_id_by_path(sqlite3 *handle, const char *storage_id, const char *path, ms_user_storage_type_e storage_type, char *folder_id, uid_t uid);
+int _media_svc_get_and_append_folder(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, ms_user_storage_type_e storage_type, char *folder_id, uid_t uid);
+int _media_svc_get_and_append_folder_id_by_path(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, ms_user_storage_type_e storage_type, char *folder_id, uid_t uid);
int _media_svc_get_and_append_folder_id_by_folder_path(sqlite3 *handle, const char *storage_id, const char *path, ms_user_storage_type_e storage_type, char *folder_id, bool stack_query, uid_t uid);
-int _media_svc_set_folder_validity(sqlite3 *handle, const char *storage_id, const char *start_path, int validity, bool is_recursive, uid_t uid);
+int _media_svc_set_folder_validity(sqlite3 *handle, bool is_direct, const char *storage_id, const char *start_path, int validity, bool is_recursive, uid_t uid);
GList ** _media_svc_get_folder_list_ptr(void);
int _media_svc_count_folder_with_path(sqlite3 *handle, const char *storage_id, const char *path, int *count);
int _media_svc_count_record_with_path(sqlite3 *handle, const char *storage_id, const char *path, int *count);
int _media_svc_get_modified_time(sqlite3 *handle, const char *storage_id, const char *path, int *modified_time);
-int _media_svc_insert_item_with_data(sqlite3 *handle, const char *storage_id, media_svc_content_info_s *content_info, bool stack_query, uid_t uid);
+int _media_svc_insert_item_with_data(sqlite3 *handle, bool is_direct, const char *storage_id, media_svc_content_info_s *content_info, bool stack_query, uid_t uid);
int _media_svc_update_item_with_data(const char *storage_id, media_svc_content_info_s *content_info, uid_t uid);
int _media_svc_get_thumbnail_path_by_path(sqlite3 *handle, const char *path, char *thumbnail_path);
int _media_svc_get_media_type_by_path(sqlite3 *handle, const char *storage_id, const char *path, int *media_type);
-int _media_svc_delete_item_by_path(const char *storage_id, const char *path, bool stack_query, uid_t uid);
+int _media_svc_delete_item_by_path(bool is_direct, const char *storage_id, const char *path, bool stack_query, uid_t uid);
int _media_svc_update_item_validity(const char *storage_id, const char *path, int validity, bool stack_query, uid_t uid);
int _media_svc_update_item_by_path(const char *org_storage_id, const char *src_path, const char *dst_storage_id, ms_user_storage_type_e dest_storage, const char *dest_path, const char *file_name, int modified_time, const char *folder_uuid, uid_t uid);
int _media_svc_list_query_do(media_svc_query_type_e query_type, uid_t uid);
int _media_svc_set_media_info(media_svc_content_info_s *content_info, const char *storage_id, ms_user_storage_type_e storage_type,
const char *path, media_svc_media_type_e *media_type, bool refresh);
int _media_svc_extract_image_metadata(media_svc_content_info_s *content_info);
-int _media_svc_extract_media_metadata(sqlite3 *handle, media_svc_content_info_s *content_info, uid_t uid);
+int _media_svc_extract_media_metadata(sqlite3 *handle, bool is_direct, media_svc_content_info_s *content_info, uid_t uid);
time_t __media_svc_get_timeline_from_str(const char *timstr);
void _media_svc_destroy_content_info(media_svc_content_info_s *content_info);
int _media_svc_create_thumbnail(const char *path, char *thumb_path, media_svc_media_type_e media_type, uid_t uid);