- ret = _media_svc_get_and_append_folder(handle, storage_id, dir_path, storage_type, folder_id, uid);
-
- SAFE_FREE(dir_path);
-
- return ret;
-}
-
-int _media_svc_update_folder_table(const char *storage_id, uid_t uid)
-{
- int ret = MS_MEDIA_ERR_NONE;
- char *sql = NULL;
-
- sql = sqlite3_mprintf("DELETE FROM '%s' WHERE folder_uuid IN (SELECT folder_uuid FROM '%s' WHERE folder_uuid NOT IN (SELECT folder_uuid FROM '%s'));",
- MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_FOLDER, storage_id);
-
- ret = _media_svc_sql_query(sql, uid);
- sqlite3_free(sql);
-
- return ret;
-}
-
-static int __media_svc_count_all_folders(sqlite3 *handle, char *start_path, int *count)
-{
- int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
- char *sql = sqlite3_mprintf("SELECT count(*) FROM '%s' WHERE path LIKE '%q%%'", MEDIA_SVC_DB_TABLE_FOLDER, start_path);
-
- ret = _media_svc_sql_prepare_to_step(handle, sql, &sql_stmt);
- if (ret != MS_MEDIA_ERR_NONE) {
- media_svc_error("error when _media_svc_sql_prepare_to_step. err = [%d]", ret);
- return ret;
- }
-
- *count = sqlite3_column_int(sql_stmt, 0);
-
- SQLITE3_FINALIZE(sql_stmt);
-
- return MS_MEDIA_ERR_NONE;
-}
-
-int _media_svc_get_all_folders(sqlite3 *handle, char *start_path, char ***folder_list, time_t **modified_time_list, int **item_num_list, int *count)
-{
- int ret = MS_MEDIA_ERR_NONE;
- int idx = 0;
- sqlite3_stmt *sql_stmt = NULL;
- char *sql = NULL;
- int cnt = 0;
- char **folder_uuid = NULL;
- int i = 0;
-
- ret = __media_svc_count_all_folders(handle, start_path, &cnt);
- if (ret != MS_MEDIA_ERR_NONE) {
- media_svc_error("error when __media_svc_count_all_folders. err = [%d]", ret);
- return ret;
- }
-
- if (cnt > 0) {
- sql = sqlite3_mprintf("SELECT path, modified_time, folder_uuid FROM '%s' WHERE path LIKE '%q%%'", MEDIA_SVC_DB_TABLE_FOLDER, start_path);
- } else {
- *folder_list = NULL;
- *modified_time_list = NULL;
- *item_num_list = NULL;
- return MS_MEDIA_ERR_NONE;
- }
-
- *folder_list = malloc(sizeof(char *) * cnt);
- *modified_time_list = malloc(sizeof(int) * cnt);
- *item_num_list = malloc(sizeof(int) * cnt);
- folder_uuid = malloc(sizeof(char *) * cnt);
-
- if ((*folder_list == NULL) || (*modified_time_list == NULL) || (*item_num_list == NULL) || (folder_uuid == NULL)) {
- media_svc_error("Out of memory");
- goto ERROR;
- }
- memset(folder_uuid, 0x0, sizeof(char *) * cnt);
-
- ret = _media_svc_sql_prepare_to_step(handle, sql, &sql_stmt);
- if (ret != MS_MEDIA_ERR_NONE) {
- media_svc_error("prepare error [%s]", sqlite3_errmsg(handle));
- goto ERROR;
- }
-
- media_svc_debug("QEURY OK");
-
- while (1) {
- (*folder_list)[idx] = g_strdup((char *)sqlite3_column_text(sql_stmt, 0));
- (*modified_time_list)[idx] = (int)sqlite3_column_int(sql_stmt, 1);
-
- /* get the folder's id */
- folder_uuid[idx] = g_strdup((char *)sqlite3_column_text(sql_stmt, 2));
-
- idx++;
-
- if (sqlite3_step(sql_stmt) != SQLITE_ROW)
- break;
- }
- SQLITE3_FINALIZE(sql_stmt);
-
- /*get the numbder of item in the folder by using folder's id */
- for (i = 0; i < idx; i++) {
- if (STRING_VALID(folder_uuid[i])) {
- sql = sqlite3_mprintf("SELECT COUNT(*) FROM %s WHERE (folder_uuid='%q' AND validity = 1)", MEDIA_SVC_DB_TABLE_MEDIA, folder_uuid[i]);
- ret = _media_svc_sql_prepare_to_step(handle, sql, &sql_stmt);
- if (ret != MS_MEDIA_ERR_NONE) {
- media_svc_error("prepare error [%s]", sqlite3_errmsg(handle));
- goto ERROR;
- }
-
- (*item_num_list)[i] = (int)sqlite3_column_int(sql_stmt, 0);
-
- SQLITE3_FINALIZE(sql_stmt);
- } else {
- media_svc_error("Invalid Folder Id");
- }
- }
-
- if (cnt == idx) {
- *count = cnt;
- media_svc_debug("Get Folder is OK");
- } else {
- media_svc_error("Fail to get folder");
- ret = MS_MEDIA_ERR_INTERNAL;
- goto ERROR;
- }
-
- /* free all data */
- for (i = 0; i < idx; i++) {
- SAFE_FREE(folder_uuid[i]);
- }
- SAFE_FREE(folder_uuid);
-
- return ret;
-
-ERROR:
-
- /* free all data */
- for (i = 0; i < idx; i++) {
- SAFE_FREE((*folder_list)[i]);
- SAFE_FREE(folder_uuid[i]);
- }
- SAFE_FREE(*folder_list);
- SAFE_FREE(*modified_time_list);
- SAFE_FREE(*item_num_list);
- SAFE_FREE(folder_uuid);
-
- *count = 0;
-
- return ret;
-}
-
-int _media_svc_get_folder_info_by_foldername(sqlite3 *handle, const char *storage_id, const char *folder_name, char *folder_id, time_t *modified_time)
-{
- int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
-
- char *sql = sqlite3_mprintf("SELECT folder_uuid, modified_time FROM %s WHERE (storage_uuid = '%q' AND path = '%q');", MEDIA_SVC_DB_TABLE_FOLDER, storage_id, folder_name);
-
- 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.");
- } else {
- media_svc_error("error when _media_svc_get_folder_id_by_foldername. err = [%d]", ret);
- }
- return ret;
- }
-
- _strncpy_safe(folder_id, (const char *)sqlite3_column_text(sql_stmt, 0), MEDIA_SVC_UUID_SIZE + 1);
- *modified_time = (int)sqlite3_column_int(sql_stmt, 1);
-
- SQLITE3_FINALIZE(sql_stmt);
-
- return ret;
-}
-
-int _media_svc_get_and_append_folder_id_by_folder_path(sqlite3 *handle, const char *storage_id, const char *path, media_svc_storage_type_e storage_type, char *folder_id, bool stack_query, uid_t uid)
-{
- char *path_name = NULL;
- int ret = MS_MEDIA_ERR_NONE;
- char *sql = NULL;
-
- path_name = strdup(path);
- if (path_name == NULL) {
- media_svc_error("out of memory");
- return MS_MEDIA_ERR_OUT_OF_MEMORY;
- }
-
- ret = _media_svc_get_folder_id_by_foldername(handle, storage_id, path_name, folder_id, uid);