X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=sticker-parser%2Fsticker-parser.c;h=71b7a0dc0619537c266350a60da482bf536292cd;hb=refs%2Fheads%2Ftizen_5.5;hp=d5a3bd4f296f8eff777d1784e8112fc3b30f540b;hpb=c1df278dc2aa54a1411028583c37125eb0f5ab0b;p=platform%2Fcore%2Fuifw%2Fcapi-ui-sticker.git diff --git a/sticker-parser/sticker-parser.c b/sticker-parser/sticker-parser.c index d5a3bd4..71b7a0d 100644 --- a/sticker-parser/sticker-parser.c +++ b/sticker-parser/sticker-parser.c @@ -30,6 +30,7 @@ #include #include #include +#include #ifndef EXPORT_API #define EXPORT_API __attribute__((visibility("default"))) @@ -40,10 +41,11 @@ #endif #define LOG_TAG "STICKER_PARSER" -#define STICKER_DIRECTORY tzplatform_mkpath(TZ_SYS_SHARE, "sticker-data") +#define STICKER_DIRECTORY "/opt/usr/share/sticker-data" #define STICKER_INFO_CREATE_TABLE "CREATE TABLE IF NOT EXISTS sticker_info(sticker_info_id INTEGER PRIMARY KEY AUTOINCREMENT, app_id TEXT NOT NULL, type INTEGER NOT NULL, uri TEXT NOT NULL, thumbnail TEXT, description TEXT, group_name TEXT NOT NULL, date TEXT NOT NULL, display_type INTEGER)" #define STICKER_KEYWORD_INFO_CREATE_TABLE "CREATE TABLE IF NOT EXISTS sticker_keyword_info(keyword_id INTEGER PRIMARY KEY AUTOINCREMENT, sticker_info_id INTEGER, keyword TEXT NOT NULL, FOREIGN KEY (sticker_info_id) REFERENCES sticker_info(sticker_info_id) ON DELETE CASCADE)" #define STICKER_WHITELIST_INFO_CREATE_TABLE "CREATE TABLE IF NOT EXISTS sticker_whitelist_info(whitelist_id INTEGER PRIMARY KEY AUTOINCREMENT, provider_id TEXT NOT NULL, consumer_id TEXT NOT NULL)" +#define STICKER_RECENT_HISTORY_INFO_CREATE_TABLE "CREATE TABLE IF NOT EXISTS sticker_recent_history_info(history_id INTEGER PRIMARY KEY AUTOINCREMENT, sticker_info_id INTEGER, count INTEGER NOT NULL, timestamp TEXT NOT NULL, FOREIGN KEY (sticker_info_id) REFERENCES sticker_info(sticker_info_id) ON DELETE CASCADE)" #define UIFW_ID 502 #define APPFW_ID 301 #define MAX_ERROR_BUFFER 256 @@ -130,6 +132,12 @@ static void __recover_db() goto cleanup; } + ret = sqlite3_exec(db, STICKER_RECENT_HISTORY_INFO_CREATE_TABLE, NULL, NULL, &err); + if (ret != SQLITE_OK) { + LOGE("Failed to create sticker_recent_history_info table : %s", err); + goto cleanup; + } + is_corrupted = FALSE; cleanup: @@ -186,6 +194,12 @@ static void __db_init() goto cleanup; } + ret = sqlite3_exec(db, STICKER_RECENT_HISTORY_INFO_CREATE_TABLE, NULL, NULL, &err); + if (ret != SQLITE_OK) { + LOGE("Failed to create sticker_recent_history_info table : %s", err); + goto cleanup; + } + ret = sqlite3_exec(db, "PRAGMA journal_mode = WAL", NULL, NULL, &err); if (ret != SQLITE_OK) { LOGE("Failed to set journal_mode : %s", err); @@ -348,21 +362,26 @@ cleanup: return ret; } -static char* __convert_sticker_uri(const char *uri, const char *appid, const char *app_path) +static char* __convert_sticker_uri(char *uri, const char *appid, const char *app_path) { int ret; - char *rel_path = strdup(uri); + char *copy_uri = (char *)calloc(PATH_MAX, sizeof(char)); + if (copy_uri == NULL) { + LOGE("failed to allocate memory"); + return NULL; + } - __remove_app_path(rel_path, app_path); - int len = strlen(STICKER_DIRECTORY) + strlen(appid) + strlen(rel_path) + 2; + strncpy(copy_uri, uri, PATH_MAX - 1); + __remove_app_path(uri, app_path); + int len = strlen(STICKER_DIRECTORY) + strlen(appid) + strlen(uri) + 2; char *new_path = (char *)calloc(len, sizeof(char)); if (new_path == NULL) { - free(rel_path); - rel_path = NULL; - return NULL; + LOGE("failed to allocate memory"); + ret = -1; + goto cleanup; } - snprintf(new_path, len, "%s/%s%s",STICKER_DIRECTORY, appid, rel_path); + snprintf(new_path, len, "%s/%s%s",STICKER_DIRECTORY, appid, uri); if (access(new_path, F_OK) == 0) { LOGE("sticker file already exists"); @@ -376,14 +395,14 @@ static char* __convert_sticker_uri(const char *uri, const char *appid, const cha goto cleanup; } - if (__file_copy(uri, new_path) == -1) { + if (__file_copy(copy_uri, new_path) == -1) { strerror_r(errno, error_buffer, MAX_ERROR_BUFFER); LOGE("failed to copy sticker file : %s", error_buffer); ret = -1; goto cleanup; } - ret = unlink(uri); + ret = unlink(copy_uri); if (ret != 0) { strerror_r(errno, error_buffer, MAX_ERROR_BUFFER); LOGE("failed to remove sticker file : %s", error_buffer); @@ -393,14 +412,16 @@ static char* __convert_sticker_uri(const char *uri, const char *appid, const cha LOGE("failed to change ownership"); cleanup: - free(rel_path); - rel_path = NULL; + free(copy_uri); + copy_uri = NULL; if (ret == 0) { return new_path; } else { - free(new_path); - new_path = NULL; + if (new_path) { + free(new_path); + new_path = NULL; + } return NULL; } } @@ -500,7 +521,7 @@ static void __insert_sticker_keyword_info(const char *keyword) return; } -static void __insert_sticker_whitelist_info(const char *provider, const char *consumer) { +static void __insert_sticker_allowlist_info(const char *provider, const char *consumer) { int ret; sqlite3 *db = NULL; sqlite3_stmt *stmt = NULL; @@ -526,7 +547,7 @@ static void __insert_sticker_whitelist_info(const char *provider, const char *co sqlite3_finalize(stmt); sqlite3_close(db); } else { - LOGE("fail to insert sticker whiltelist : %s", sqlite3_errmsg(db)); + LOGE("fail to insert sticker allowlist : %s", sqlite3_errmsg(db)); sqlite3_finalize(stmt); sqlite3_close(db); } @@ -543,7 +564,7 @@ static int __get_sticker_info_from_json(const char *appid, const char *file_path char *uri = NULL; char *group = NULL; char *description = NULL; - char *thumbnail = NULL; + char *thumbnail_path = NULL; char *uri_path = NULL; parser = json_parser_new(); @@ -568,10 +589,10 @@ static int __get_sticker_info_from_json(const char *appid, const char *file_path goto cleanup; } - JsonArray *whitelist_arr = json_object_get_array_member(root_obj, "whitelist"); - if (whitelist_arr != NULL) { - for (int i = 0; i < json_array_get_length(whitelist_arr); i++) { - __insert_sticker_whitelist_info(appid, json_array_get_string_element(whitelist_arr, i)); + JsonArray *allowlist_arr = json_object_get_array_member(root_obj, "whitelist"); + if (allowlist_arr != NULL) { + for (int i = 0; i < json_array_get_length(allowlist_arr); i++) { + __insert_sticker_allowlist_info(appid, json_array_get_string_element(allowlist_arr, i)); } } @@ -598,9 +619,32 @@ static int __get_sticker_info_from_json(const char *appid, const char *file_path if (!group) goto free_memory; - thumbnail = __get_string_from_object(info_object, "thumbnail"); - if (thumbnail) - thumbnail = __convert_sticker_uri(thumbnail, appid, app_path); + char *rel_thumbnail = __get_string_from_object(info_object, "thumbnail"); + if (rel_thumbnail) { + if (rel_thumbnail[0] != '\0') { + if (access(rel_thumbnail, F_OK) == 0) { + thumbnail_path = __convert_sticker_uri(rel_thumbnail, appid, app_path); + } else { + int len = strlen(app_path) + strlen(rel_thumbnail) + 2; + char *new_thumbnail_path = (char *)calloc(len, sizeof(char)); + if (new_thumbnail_path) { + if (rel_thumbnail[0] == '/') + snprintf(new_thumbnail_path, len, "%s%s",app_path, rel_thumbnail); + else + snprintf(new_thumbnail_path, len, "%s%s%s",app_path, "/", rel_thumbnail); + + if (access(new_thumbnail_path, F_OK) == 0) + thumbnail_path = __convert_sticker_uri(new_thumbnail_path, appid, app_path); + + free(new_thumbnail_path); + new_thumbnail_path = NULL; + } + } + } + + free(rel_thumbnail); + rel_thumbnail = NULL; + } description = __get_string_from_object(info_object, "description"); int disp_type = __get_int_from_object(info_object, "display_type"); @@ -615,7 +659,7 @@ static int __get_sticker_info_from_json(const char *appid, const char *file_path char *new_uri = __convert_sticker_uri(uri, appid, app_path); if (!new_uri) goto free_memory; - __insert_sticker_info(appid, type, new_uri, group, thumbnail, description, disp_type); + __insert_sticker_info(appid, type, new_uri, group, thumbnail_path, description, disp_type); if (new_uri) { free(new_uri); @@ -641,7 +685,7 @@ static int __get_sticker_info_from_json(const char *appid, const char *file_path uri_path = NULL; goto free_memory; } - __insert_sticker_info(appid, type, new_uri, group, thumbnail, description, disp_type); + __insert_sticker_info(appid, type, new_uri, group, thumbnail_path, description, disp_type); free(new_uri); new_uri = NULL; @@ -656,7 +700,7 @@ static int __get_sticker_info_from_json(const char *appid, const char *file_path } } } else { - __insert_sticker_info(appid, type, uri, group, thumbnail, description, disp_type); + __insert_sticker_info(appid, type, uri, group, thumbnail_path, description, disp_type); } for (int j = 0; j < keyword_arr_len; j++) { @@ -674,9 +718,9 @@ free_memory: group = NULL; } - if (thumbnail) { - free(thumbnail); - thumbnail = NULL; + if (thumbnail_path) { + free(thumbnail_path); + thumbnail_path = NULL; } if (description) { @@ -696,7 +740,7 @@ cleanup: return ret; } -static void __delete_sticker_whitelist(const char *db_path, const char *app_id) +static void __delete_sticker_allowlist(const char *db_path, const char *app_id) { int ret; sqlite3 *db = NULL; @@ -708,7 +752,7 @@ static void __delete_sticker_whitelist(const char *db_path, const char *app_id) ret = sqlite3_prepare_v2(db, "DELETE FROM sticker_whitelist_info WHERE provider_id = ?", -1, &stmt, NULL); if (ret != SQLITE_OK) { - LOGE("failed to delete sticker whitelist : %s", sqlite3_errmsg(db)); + LOGE("failed to delete sticker allowlist : %s", sqlite3_errmsg(db)); sqlite3_finalize(stmt); sqlite3_close(db); goto cleanup; @@ -921,7 +965,7 @@ int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgid, const char *appid, GList sqlite3_close(db); } - __delete_sticker_whitelist(db_path, appid); + __delete_sticker_allowlist(db_path, appid); return 0; }