static void __media_info_insert_completed_cb(media_request_result_s *result, void *user_data);
static void __media_info_thumbnail_completed_cb(int error, const char *path, void *user_data);
static void __media_info_face_completed_cb(int error, const int face_count, void *user_data);
-static bool __media_info_delete_batch_cb(media_info_h media, void *user_data);
static int __media_info_insert_batch(media_batch_insert_e insert_type, const char **path_array, unsigned int array_length, media_insert_completed_cb completed_cb, void *user_data);
static int __media_info_set_str_data(media_info_h media, media_info_item_e data_type, const char *str_data);
return;
}
-static bool __media_info_delete_batch_cb(media_info_h media, void *user_data)
-{
- char *thumb_path = NULL;
- GArray *thumb_list = (GArray *)user_data;
-
- media_info_get_thumbnail_path(media, &thumb_path);
- if (STRING_VALID(thumb_path))
- g_array_append_val(thumb_list, thumb_path);
-
- return true;
-}
-
static int __media_info_insert_batch(media_batch_insert_e insert_type, const char **path_array,
unsigned int array_length,
media_insert_completed_cb completed_cb,
return ret;
}
+int __media_info_get_storage_list_to_remove(const char *condition_query, GArray **storage_list)
+{
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ char *query_string = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ media_content_retv_if(storage_list == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+ media_content_retv_if(!STRING_VALID(condition_query), MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+
+ query_string = sqlite3_mprintf(SELECT_STORAGE_BY_FILTER, condition_query);
+
+ ret = _content_query_prepare(&stmt, query_string, NULL, NULL);
+ SQLITE3_SAFE_FREE(query_string);
+
+ media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+
+ *storage_list = g_array_new(FALSE, FALSE, sizeof(media_storage_s *));
+
+ while (sqlite3_step(stmt) == SQLITE_ROW) {
+ media_storage_s *storage = (media_storage_s*)calloc(1, sizeof(media_storage_s));
+ if (storage == NULL) {
+ media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
+ SQLITE3_FINALIZE(stmt);
+ return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
+ }
+ storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
+ storage->storage_type = (int)sqlite3_column_int(stmt, 1);
+
+ g_array_append_val(*storage_list, storage);
+ }
+
+ SQLITE3_FINALIZE(stmt);
+
+ return ret;
+}
+
+int __media_info_get_thumbnail_to_remove(const char *condition_query, const char *storage_id, int storage_type, GArray **thumb_list)
+{
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ char *query_string = NULL;
+ char *thumbnail_path = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ media_content_retv_if(thumb_list == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+ media_content_retv_if(storage_id == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+ media_content_retv_if(!STRING_VALID(condition_query), MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+
+ query_string = sqlite3_mprintf(SELECT_THUMBNAIL_BY_FILTER, storage_id, condition_query, storage_type);
+
+ ret = _content_query_prepare(&stmt, query_string, NULL, NULL);
+ SQLITE3_SAFE_FREE(query_string);
+
+ media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+
+ *thumb_list = g_array_new(FALSE, FALSE, sizeof(char*));
+
+ while (sqlite3_step(stmt) == SQLITE_ROW) {
+ thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 0));
+ if (STRING_VALID(thumbnail_path)) {
+ g_array_append_val(*thumb_list, thumbnail_path);
+ } else {
+ SAFE_FREE(thumbnail_path);
+ }
+ }
+
+ SQLITE3_FINALIZE(stmt);
+
+ return ret;
+}
+
void _media_info_item_get_detail(sqlite3_stmt* stmt, media_info_h media)
{
media_info_s *_media = (media_info_s*)media;
return MEDIA_CONTENT_ERROR_NONE;
}
+static int __media_info_release_storage_list(GArray *storage_list)
+{
+ int i = 0;
+ int list_len = 0;
+ media_storage_s *storage = NULL;
+
+ if (storage_list != NULL) {
+ list_len = storage_list->len;
+ for (i = 0; i < list_len; i++) {
+ storage = g_array_index(storage_list, media_storage_s *, 0);
+ g_array_remove_index(storage_list, 0);
+ SAFE_FREE(storage->storage_id);
+ SAFE_FREE(storage);
+ }
+
+ g_array_free(storage_list, FALSE);
+ }
+
+ return MEDIA_CONTENT_ERROR_NONE;
+}
+
int media_info_delete_batch_from_db(filter_h filter)
{
int ret = MEDIA_CONTENT_ERROR_NONE;
-
char *query_string = NULL;
filter_s *_filter = NULL;
attribute_h attr;
char *condition_query = NULL;
+ GArray *storage_list = NULL;
GArray *thumb_list = NULL;
+ int idx = 0;
+ media_storage_s *storage_item = NULL;
media_content_retvm_if(filter == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid filter");
media_content_retvm_if(_filter->condition == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid condition");
- thumb_list = g_array_new(FALSE, FALSE, sizeof(char*));
-
- /* Delete thumbnail of each item */
- ret = _media_db_get_group_item(NULL, filter, __media_info_delete_batch_cb, thumb_list, MEDIA_GROUP_NONE);
- media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "Failed to get thumbnail path list");
-
attr = _content_get_attirbute_handle();
ret = _media_filter_attribute_generate(attr, filter, &condition_query);
+ media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "Invalid condition");
+
+ ret = __media_info_get_storage_list_to_remove(condition_query, &storage_list);
if (ret != MEDIA_CONTENT_ERROR_NONE) {
- __media_info_release_thumb_list(thumb_list);
+ SAFE_FREE(condition_query);
+ __media_info_release_storage_list(storage_list);
+
return ret;
}
- if (STRING_VALID(condition_query)) {
- if (_filter->storage_id == NULL) {
- /*FIX ME*/
- query_string = sqlite3_mprintf(DELETE_MEDIA_FROM_MEDIA_BATCH, DB_TABLE_MEDIA, condition_query);
- } else {
- query_string = sqlite3_mprintf(DELETE_MEDIA_FROM_MEDIA_BATCH, _filter->storage_id, condition_query);
+ for (idx = 0; idx < storage_list->len; idx++) {
+ storage_item = g_array_index(storage_list, media_storage_s *, idx);
+ /*media_content_debug("storage_id[%s] storage_type[%d]", storage_item->storage_id, storage_item->storage_type);*/
+
+ ret = __media_info_get_thumbnail_to_remove(condition_query, storage_item->storage_id, storage_item->storage_type, &thumb_list);
+ if (ret != MEDIA_CONTENT_ERROR_NONE) {
+ SAFE_FREE(condition_query);
+ __media_info_release_storage_list(storage_list);
+ __media_info_release_thumb_list(thumb_list);
+
+ return ret;
}
- } else {
- SAFE_FREE(condition_query);
- __media_info_release_thumb_list(thumb_list);
- return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
- }
+ query_string = sqlite3_mprintf(DELETE_MEDIA_FROM_MEDIA_BATCH, storage_item->storage_id, condition_query, storage_item->storage_type);
- ret = _content_query_sql(query_string);
- if (ret == MEDIA_CONTENT_ERROR_NONE) {
- /* Send notification for this
- In this case, send noti for internal storage and external storage
- */
- media_content_debug("Batch deletion is successfull. Send notification for this");
- if (_filter->storage_id != NULL) {
- char *storage_path = NULL;
- media_svc_get_storage_path(_content_get_db_handle(), _filter->storage_id, &storage_path);
- if (STRING_VALID(storage_path))
- media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, storage_path, -1, NULL, NULL);
+ ret = _content_query_sql(query_string);
+ SQLITE3_SAFE_FREE(query_string);
- SAFE_FREE(storage_path);
- } else {
- /*FIX ME*/
- media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, MEDIA_ROOT_PATH_INTERNAL, -1, NULL, NULL);
- media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, MEDIA_ROOT_PATH_SDCARD, -1, NULL, NULL);
- }
+ if (ret == MEDIA_CONTENT_ERROR_NONE) {
+ media_content_debug("Batch deletion succeeded. Send notification for this");
+ if (storage_item->storage_type == MEDIA_CONTENT_STORAGE_INTERNAL) {
+ media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, MEDIA_ROOT_PATH_INTERNAL, -1, NULL, NULL);
+ } else {
+ char *storage_path = NULL;
+ media_svc_get_storage_path(_content_get_db_handle(), storage_item->storage_id, &storage_path);
+ if (STRING_VALID(storage_path))
+ media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, storage_path, -1, NULL, NULL);
- __media_info_delete_thumb_from_list(thumb_list);
+ SAFE_FREE(storage_path);
+ }
+ __media_info_delete_thumb_from_list(thumb_list);
+ }
__media_info_release_thumb_list(thumb_list);
+
}
SAFE_FREE(condition_query);
- SQLITE3_SAFE_FREE(query_string);
+ __media_info_release_storage_list(storage_list);
return ret;
}