summaryrefslogtreecommitdiff
path: root/common/src/ivug-db.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/src/ivug-db.c')
-rwxr-xr-xcommon/src/ivug-db.c417
1 files changed, 417 insertions, 0 deletions
diff --git a/common/src/ivug-db.c b/common/src/ivug-db.c
new file mode 100755
index 0000000..288fe6e
--- /dev/null
+++ b/common/src/ivug-db.c
@@ -0,0 +1,417 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ivug-define.h"
+#include "ivug-debug.h"
+#include "ivug-util.h"
+#include "ivug-db.h"
+
+#include <Elementary.h>
+#include <media_content.h>
+
+#define LOG_LVL DBG_MSG_LVL_HIGH
+#define LOG_CAT "IV-DB"
+
+typedef struct _Ivug_DB
+{
+ ivug_db_cb callback;
+ media_handle *m_handle;
+ void *data;
+}Ivug_DB;
+
+static char *_strerror_db(int error)
+{
+ switch(error)
+ {
+ case MEDIA_CONTENT_ERROR_INVALID_PARAMETER:
+ return "Invalid parameter";
+ case MEDIA_CONTENT_ERROR_OUT_OF_MEMORY :
+ return "Out of memory";
+ case MEDIA_CONTENT_ERROR_DB_FAILED :
+ return "DB operation failed";
+ default:
+ {
+ static char buf[40];
+ sprintf(buf, "Error Code=%d", error);
+ return buf;
+ }
+
+ }
+}
+
+bool ivug_db_create(void)
+{
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+
+ ret = media_content_connect();
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_content_connect is failed, err:%s", _strerror_db(ret));
+ return false;
+ }
+
+ MSG_HIGH("ivug_db_create success");
+ return true;
+}
+
+bool ivug_db_destroy(void)
+{
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+
+ ret = media_content_disconnect();
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_content_disconnect is failed, err:%s", _strerror_db(ret));
+ return false;
+ }
+
+ MSG_HIGH("ivug_db_destroy success");
+ return true;
+}
+
+bool ivug_db_destroy_file_handle(media_handle m_handle)
+{
+ media_info_h minfo = (media_info_h)m_handle;
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+
+ ret = media_info_destroy(minfo);
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_info_destroy is failed, err = %s", _strerror_db(ret));
+ return false;
+ }
+
+ return true;
+}
+
+bool ivug_db_destroy_folder_handle(media_handle m_handle)
+{
+ media_folder_h minfo = (media_folder_h)m_handle;
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+
+ ret = media_folder_destroy(minfo);
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_folder_destroy is failed, err = %s", _strerror_db(ret));
+ return false;
+ }
+
+ return true;
+}
+
+bool ivug_db_create_filter(filter_handle *filter)
+{
+ filter_h *media_filter = (filter_h *)filter;
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+
+ ret = media_filter_create(media_filter);
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_filter_create is failed, err = %s", _strerror_db(ret));
+ return false;
+ }
+ MSG_MED("ivug_db_create_filter success");
+ return true;
+}
+
+bool ivug_db_destroy_filter(filter_handle filter)
+{
+ filter_h media_filter = (filter_h)filter;
+
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+
+ ret = media_filter_destroy(media_filter);
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_filter_destroy is failed, err = %s", _strerror_db(ret));
+ return false;
+ }
+ MSG_MED("ivug_db_destroy_filter success");
+ return true;
+}
+
+bool ivug_db_set_filter_condition(filter_handle media_filter, const char *condition)
+{
+ IV_ASSERT(condition != NULL);
+
+ MSG_HIGH("condition str = %s", condition);
+ int ret = media_filter_set_condition(media_filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_filter_set_condition is failed, err = %s", _strerror_db(ret));
+ return false;
+ }
+ return true;
+}
+
+bool ivug_db_set_filter(filter_handle filter, ivug_view_by view_by, ivug_media_type media_type, char *condition)
+{
+ filter_h media_filter = (filter_h)filter;
+
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+
+ if(condition == NULL)
+ {
+ condition = calloc(1, sizeof(char)*IVUG_MAX_CONDITION_LEN);
+ }
+ else
+ {
+ strcat(condition," AND ");
+ }
+
+ /*MEDIA_TYPE 0-image, 1-video, 2-sound, 3-music*/
+ switch(media_type)
+ {
+ case IVUG_MEDIA_TYPE_IMAGE:
+ strcat(condition, "(MEDIA_TYPE=0)");
+ break;
+ case IVUG_MEDIA_TYPE_VIDEO:
+ strcat(condition,"(MEDIA_TYPE=1)");
+ break;
+ case IVUG_MEDIA_TYPE_ALL:
+ strcat(condition, "(MEDIA_TYPE=0 OR MEDIA_TYPE=1)");
+ break;
+ default:
+ MSG_FATAL("Invalid media type : %d", media_type);
+ break;
+ }
+
+ if(view_by == IVUG_VIEW_BY_FAVORITES)
+ {
+ strcat(condition, " AND MEDIA_FAVORITE=1");
+ }
+
+ if(condition)
+ {
+ if(ivug_db_set_filter_condition(media_filter, condition) == false)
+ {
+ goto SET_FILTER_ERROR;
+ }
+ }
+
+ ret = media_filter_set_order(media_filter, MEDIA_CONTENT_ORDER_DESC, MEDIA_MODIFIED_TIME, MEDIA_CONTENT_COLLATE_NOCASE);
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_filter_set_order is failed, err = %s", _strerror_db(ret));
+ goto SET_FILTER_ERROR;
+ }
+
+ if(condition)
+ free(condition);
+
+ MSG_MED("ivug_db_set_filter success, view_by:%d, media_type:%d", view_by, media_type);
+ return true;
+
+SET_FILTER_ERROR:
+ if(condition)
+ free(condition);
+ return false;
+}
+
+bool ivug_db_set_filter_offset(filter_handle filter, int stp, int endp)
+{
+ filter_h media_filter = (filter_h)filter;
+
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+
+ ret = media_filter_set_offset(media_filter, stp, endp-stp+1);
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_filter_set_offset is failed, err = %s", _strerror_db(ret));
+ return false;
+ }
+
+ return true;
+}
+
+bool _media_item_cb(media_info_h item, void *user_data)
+{
+ media_handle *m_handle = (media_handle *)user_data;
+
+ media_info_clone((media_info_h *)m_handle, item);
+
+ return false; //only 1 item
+}
+
+media_handle ivug_db_get_file_handle(const char* filepath)
+{
+ IV_ASSERT(filepath != NULL);
+
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ filter_handle media_filter = NULL;
+
+ char buf[1024] = {0,};
+ snprintf(buf, sizeof(buf), "MEDIA_PATH=\'%s\'", filepath);
+
+ media_handle m_handle = NULL;
+
+ ivug_db_create_filter(&media_filter);
+ ivug_db_set_filter_condition(media_filter, buf);
+ ret = media_info_foreach_media_from_db(media_filter, _media_item_cb, &m_handle);
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_info_foreach_media_from_db is failed, err = %s", _strerror_db(ret));
+ goto GET_ITEM_ERROR;
+ }
+ ivug_db_destroy_filter(media_filter);
+
+ return m_handle;
+
+GET_ITEM_ERROR:
+ if(media_filter)
+ ivug_db_destroy_filter(media_filter);
+
+ return NULL;
+}
+
+media_handle ivug_db_get_file_handle_from_media_id(const char* media_id)
+{
+ IV_ASSERT(media_id != NULL);
+
+ media_handle m_handle = NULL;
+
+ int ret = media_info_get_media_from_db(media_id, (media_info_h*)&m_handle);
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_info_get_media_from_db is failed, err = %s", _strerror_db(ret));
+ return NULL;
+ }
+
+ return m_handle;
+}
+
+static bool _media_folder_item_cb(media_folder_h item, void *user_data)
+{
+ media_handle *t_handle = (media_handle *)user_data;
+
+ media_folder_clone((media_folder_h *)t_handle, item);
+
+ return false; //only 1 item
+}
+
+media_handle ivug_db_get_folder_handle(const char* folderpath)
+{
+ IV_ASSERT(folderpath != NULL);
+
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ filter_handle media_filter = NULL;
+
+ char buf[1024] = {0,};
+ snprintf(buf, sizeof(buf), "FOLDER_PATH=\'%s\'", folderpath);
+
+ media_handle m_handle = NULL;
+
+ ivug_db_create_filter(&media_filter);
+ ivug_db_set_filter_condition(media_filter, buf);
+ ret = media_folder_foreach_folder_from_db(media_filter, _media_folder_item_cb, &m_handle);
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_folder_foreach_folder_from_db is failed, err = %s", _strerror_db(ret));
+ goto GET_ITEM_ERROR;
+ }
+ ivug_db_destroy_filter(media_filter);
+
+ return m_handle;
+
+GET_ITEM_ERROR:
+ if(media_filter)
+ ivug_db_destroy_filter(media_filter);
+
+ return NULL;
+}
+
+static bool _media_folder_list_cb(media_folder_h item, void *user_data)
+{
+ Ivug_DB *iv_db = (Ivug_DB *)user_data;
+
+ if(iv_db->callback)
+ {
+ iv_db->callback((media_handle)item, iv_db->data);
+ }
+
+ return true;
+}
+
+bool ivug_db_get_all_folder_list(ivug_db_cb callback, void *data)
+{
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ filter_handle media_filter = NULL;
+
+ Ivug_DB *iv_db = calloc(1, sizeof(Ivug_DB));
+ iv_db->callback = callback;
+ iv_db->data = data;
+
+ ivug_db_create_filter(&media_filter);
+ ret = media_folder_foreach_folder_from_db(media_filter, _media_folder_list_cb, iv_db);
+
+ free(iv_db);
+
+ if(ret != MEDIA_CONTENT_ERROR_NONE)
+ {
+ MSG_ERROR("media_folder_foreach_folder_from_db is failed, err = %s", _strerror_db(ret));
+ goto GET_ITEM_ERROR;
+ }
+ ivug_db_destroy_filter(media_filter);
+
+ return true;
+
+GET_ITEM_ERROR:
+ if(media_filter)
+ ivug_db_destroy_filter(media_filter);
+
+ return false;
+}
+
+char *ivug_db_get_file_path(media_handle media)
+{
+ media_info_h file_item = (media_info_h)media;
+ char *name = NULL;
+
+ media_info_get_file_path(file_item, &name);
+
+ return name;
+}
+
+char *ivug_db_get_folder_name(media_handle media)
+{
+ media_folder_h folder_item = (media_folder_h)media;
+ char *name = NULL;
+
+ media_folder_get_name(folder_item, &name);
+
+ return name;
+}
+
+char *ivug_db_get_folder_id(media_handle media)
+{
+ media_folder_h folder_item = (media_folder_h)media;
+ char *id = NULL;
+
+ media_folder_get_folder_id(folder_item, &id);
+
+ return id;
+}
+
+char *ivug_db_get_folder_path(media_handle media)
+{
+ media_folder_h folder_item = (media_folder_h)media;
+ char *path = NULL;
+
+ media_folder_get_path(folder_item, &path);
+
+ return path;
+}
+