Add some code for replace path 48/94148/1
authorMinje Ahn <minje.ahn@samsung.com>
Thu, 27 Oct 2016 06:57:33 +0000 (15:57 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Thu, 27 Oct 2016 06:57:33 +0000 (15:57 +0900)
Change-Id: I6c96f4bfccdf529b41d81c93c2860da01d3e1a61
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
include/media_util_private.h
include_product/media_util_private.h
packaging/capi-content-media-content.spec
src/media_filter.c
src/media_util_private.c

index d8c7666..9c01ce2 100755 (executable)
@@ -34,6 +34,7 @@ int _media_util_check_file_exist(const char *path);
 int _media_util_check_ignore_file(const char *path, bool *ignore);
 int _media_util_check_ignore_dir(const char *dir_path, bool *ignore);
 int _media_content_replace_path_in_condition(const char *condition, char *replace_condition);
+int _media_content_rollback_path_in_condition(const char *condition, char *replace_condition);
 int _media_content_replace_path(const char *path, char *replace_path);
 int _media_content_rollback_path(const char *path, char *replace_path);
 
index 1bfee05..b2ba51b 100755 (executable)
@@ -34,6 +34,7 @@ int _media_util_check_file_exist(const char *path);
 int _media_util_check_ignore_file(const char *path, bool *ignore);
 int _media_util_check_ignore_dir(const char *dir_path, bool *ignore);
 int _media_content_replace_path_in_condition(const char *condition, char *replace_condition);
+int _media_content_rollback_path_in_condition(const char *condition, char *replace_condition);
 int _media_content_replace_path(const char *path, char *replace_path);
 int _media_content_rollback_path(const char *path, char *replace_path);
 
index 7b390d8..e31f614 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       capi-content-media-content
 Summary:    A Media content library in Tizen Native API
-Version:    0.2.87
+Version:    0.2.88
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 11e8d53..8428cdc 100755 (executable)
@@ -1027,7 +1027,12 @@ int media_filter_get_condition(filter_h filter, char **condition, media_content_
 
        if (_filter) {
                if (STRING_VALID(_filter->condition)) {
-                       *condition = strdup(_filter->condition);
+                       char new_condition[MAX_QUERY_SIZE] = {0, };
+                       memset(new_condition, 0, MAX_QUERY_SIZE);
+                       ret = _media_content_rollback_path_in_condition(_filter->condition, new_condition);
+                       media_content_retvm_if(!STRING_VALID(new_condition), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
+
+                       *condition = strdup(new_condition);
                        media_content_retvm_if(*condition == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
                } else {
                        *condition = NULL;
index 7adb130..9d6cb27 100755 (executable)
@@ -227,6 +227,61 @@ int _media_content_replace_path_in_condition(const char *condition, char *replac
        return MEDIA_CONTENT_ERROR_NONE;
 }
 
+int _media_content_rollback_path_in_condition(const char *condition, char *replace_condition)
+{
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+       char *old_path = NULL;
+
+       ret = storage_get_root_directory(STORAGE_TYPE_INTERNAL, &old_path);
+       if (ret != STORAGE_ERROR_NONE) {
+               media_content_error("storage_get_directory failed");
+               return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
+       }
+
+       media_content_sec_debug("Old condition[%s]", condition);
+       if (((strstr(condition, "PATH") != NULL) || (strstr(condition, "path") != NULL)) && (strstr(condition, tzplatform_getenv(TZ_USER_CONTENT)) != NULL)) {
+               char *cond = strdup(condition);
+               char *repl_cond_ptr = replace_condition;
+               char *cond_ptr = cond;
+
+               if (cond_ptr == NULL) {
+                       SAFE_FREE(old_path);
+                       media_content_error("memory allocation failed");
+                       return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
+               }
+               while(*cond_ptr != '\0') {
+                       if (strlen(cond_ptr) < strlen(tzplatform_getenv(TZ_USER_CONTENT))) {
+                               memcpy(repl_cond_ptr, cond_ptr, strlen(cond_ptr));
+                               break;
+                       }
+                       /* replace path only and keep other condition */
+                       if (memcmp(cond_ptr, tzplatform_getenv(TZ_USER_CONTENT), strlen(tzplatform_getenv(TZ_USER_CONTENT))) == 0) {
+                               memcpy(repl_cond_ptr, old_path, strlen(old_path));
+                               cond_ptr += strlen(tzplatform_getenv(TZ_USER_CONTENT));
+                               repl_cond_ptr += strlen(old_path);
+                       } else {
+                               *repl_cond_ptr = *cond_ptr;
+                               cond_ptr++;
+                               repl_cond_ptr++;
+                       }
+               }
+               SAFE_FREE(cond);
+       } else {
+               snprintf(replace_condition, MAX_QUERY_SIZE, "%s", condition);
+       }
+
+       SAFE_FREE(old_path);
+
+       if (!STRING_VALID(replace_condition)) {
+               media_content_error("replace failed");
+               return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
+       }
+
+       media_content_sec_debug("repl cond[%s]", replace_condition);
+
+       return MEDIA_CONTENT_ERROR_NONE;
+}
+
 int _media_content_replace_path(const char *path, char *replace_path)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;