return ret;
}
-int sticker_dbus_get_group_list(GDBusConnection *gdbus_connection, GList **group_list)
+int sticker_dbus_get_group_list(GDBusConnection *gdbus_connection, const char *app_id, GList **group_list)
{
int ret;
GDBusMessage *reply = NULL;
return STICKER_CLIENT_ERROR_INVALID_PARAMETER;
}
- ret = _send_sync_message(gdbus_connection, g_variant_new("()"), &reply, "get_group_list");
+ ret = _send_sync_message(gdbus_connection, g_variant_new("(s)", app_id), &reply, "get_group_list");
if (ret == STICKER_CLIENT_ERROR_NONE) {
reply_body = g_dbus_message_get_body(reply);
g_variant_get(reply_body, "(a(s))", &iter);
return ret;
}
-int sticker_dbus_get_keyword_list(GDBusConnection *gdbus_connection, GList **keyword_list)
+int sticker_dbus_get_keyword_list(GDBusConnection *gdbus_connection, const char *app_id, GList **keyword_list)
{
int ret;
GDBusMessage *reply = NULL;
return STICKER_CLIENT_ERROR_INVALID_PARAMETER;
}
- ret = _send_sync_message(gdbus_connection, g_variant_new("()"), &reply, "get_keyword_list");
+ ret = _send_sync_message(gdbus_connection, g_variant_new("(s)", app_id), &reply, "get_keyword_list");
if (ret == STICKER_CLIENT_ERROR_NONE) {
reply_body = g_dbus_message_get_body(reply);
g_variant_get(reply_body, "(a(s))", &iter);
return ret;
}
-int sticker_dbus_get_all_sticker_info(GDBusConnection *gdbus_connection, int offset, int count, GVariantIter **id_iter)
+int sticker_dbus_get_all_sticker_info(GDBusConnection *gdbus_connection, const char *app_id, int offset, int count, GVariantIter **id_iter)
{
int ret;
GDBusMessage *reply = NULL;
GVariant *reply_body = NULL;
- ret = _send_sync_message(gdbus_connection, g_variant_new("(ii)", offset, count), &reply, "get_all_sticker_info");
+ ret = _send_sync_message(gdbus_connection, g_variant_new("(sii)", app_id, offset, count), &reply, "get_all_sticker_info");
if (ret == STICKER_CLIENT_ERROR_NONE) {
reply_body = g_dbus_message_get_body(reply);
g_variant_get(reply_body, "(a(i))", &(*id_iter));
return ret;
}
-int sticker_dbus_get_sticker_info_by_type(GDBusConnection *gdbus_connection, sticker_data_uri_type_e type, int offset, int count, GVariantIter **id_iter)
+int sticker_dbus_get_sticker_info_by_type(GDBusConnection *gdbus_connection, const char *app_id, sticker_data_uri_type_e type, int offset, int count, GVariantIter **id_iter)
{
int ret;
GDBusMessage *reply = NULL;
GVariant *reply_body = NULL;
- ret = _send_sync_message(gdbus_connection, g_variant_new("(iii)", (int)type, offset, count), &reply, "get_sticker_info_by_type");
+ ret = _send_sync_message(gdbus_connection, g_variant_new("(siii)", app_id, (int)type, offset, count), &reply, "get_sticker_info_by_type");
if (ret == STICKER_CLIENT_ERROR_NONE) {
reply_body = g_dbus_message_get_body(reply);
g_variant_get(reply_body, "(a(i))", &(*id_iter));
return ret;
}
-int sticker_dbus_get_sticker_info_by_group(GDBusConnection *gdbus_connection, const char *group, int offset, int count, GVariantIter **id_iter)
+int sticker_dbus_get_sticker_info_by_group(GDBusConnection *gdbus_connection, const char *app_id, const char *group, int offset, int count, GVariantIter **id_iter)
{
int ret;
GDBusMessage *reply = NULL;
GVariant *reply_body = NULL;
- ret = _send_sync_message(gdbus_connection, g_variant_new("(sii)", group, offset, count), &reply, "get_sticker_info_by_group");
+ ret = _send_sync_message(gdbus_connection, g_variant_new("(ssii)", app_id, group, offset, count), &reply, "get_sticker_info_by_group");
if (ret == STICKER_CLIENT_ERROR_NONE) {
reply_body = g_dbus_message_get_body(reply);
g_variant_get(reply_body, "(a(i))", &(*id_iter));
return ret;
}
-int sticker_dbus_get_sticker_info_by_keyword(GDBusConnection *gdbus_connection, const char *keyword, int offset, int count, GVariantIter **id_iter)
+int sticker_dbus_get_sticker_info_by_keyword(GDBusConnection *gdbus_connection, const char *app_id, const char *keyword, int offset, int count, GVariantIter **id_iter)
{
int ret;
GDBusMessage *reply = NULL;
GVariant *reply_body = NULL;
- ret = _send_sync_message(gdbus_connection, g_variant_new("(sii)", keyword, offset, count), &reply, "get_sticker_info_by_keyword");
+ ret = _send_sync_message(gdbus_connection, g_variant_new("(ssii)", app_id, keyword, offset, count), &reply, "get_sticker_info_by_keyword");
if (ret == STICKER_CLIENT_ERROR_NONE) {
reply_body = g_dbus_message_get_body(reply);
g_variant_get(reply_body, "(a(i))", &(*id_iter));
int sticker_dbus_delete_sticker_info(GDBusConnection *gdbus_connection, int record_id);
int sticker_dbus_update_sticker_info(GDBusConnection *gdbus_connection, sticker_data_h sticker_data);
int sticker_dbus_get_sticker_info_by_record_id(GDBusConnection *gdbus_connection, sticker_data_h sticker_data, int record_id);
-int sticker_dbus_get_group_list(GDBusConnection *gdbus_connection, GList **group_list);
-int sticker_dbus_get_keyword_list(GDBusConnection *gdbus_connection, GList **keyword_list);
+int sticker_dbus_get_group_list(GDBusConnection *gdbus_connection, const char *app_id, GList **group_list);
+int sticker_dbus_get_keyword_list(GDBusConnection *gdbus_connection, const char *app_id, GList **keyword_list);
int sticker_dbus_get_sticker_count(GDBusConnection *gdbus_connection, const char *app_id, int *count);
-int sticker_dbus_get_all_sticker_info(GDBusConnection *gdbus_connection, int offset, int count, GVariantIter **id_iter);
+int sticker_dbus_get_all_sticker_info(GDBusConnection *gdbus_connection, const char *app_id, int offset, int count, GVariantIter **id_iter);
int sticker_dbus_get_sticker_info_by_appid(GDBusConnection *gdbus_connection, const char *app_id, int offset, int count, GVariantIter **id_iter);
-int sticker_dbus_get_sticker_info_by_type(GDBusConnection *gdbus_connection, sticker_data_uri_type_e type, int offset, int count, GVariantIter **id_iter);
-int sticker_dbus_get_sticker_info_by_group(GDBusConnection *gdbus_connection, const char *group, int offset, int count, GVariantIter **id_iter);
-int sticker_dbus_get_sticker_info_by_keyword(GDBusConnection *gdbus_connection, const char *keyword, int offset, int count, GVariantIter **id_iter);
+int sticker_dbus_get_sticker_info_by_type(GDBusConnection *gdbus_connection, const char *app_id, sticker_data_uri_type_e type, int offset, int count, GVariantIter **id_iter);
+int sticker_dbus_get_sticker_info_by_group(GDBusConnection *gdbus_connection, const char *app_id, const char *group, int offset, int count, GVariantIter **id_iter);
+int sticker_dbus_get_sticker_info_by_keyword(GDBusConnection *gdbus_connection, const char *app_id, const char *keyword, int offset, int count, GVariantIter **id_iter);
#ifdef __cplusplus
}
#include <dlog.h>
#include <gio/gio.h>
#include <dbus/dbus.h>
+#include <app_common.h>
#include <cynara-client.h>
#include <cynara-error.h>
#include <cynara-session.h>
if (!consumer_struct)
return STICKER_ERROR_OUT_OF_MEMORY;
+ ret = app_get_id(&consumer_struct->app_id);
+ if (ret != APP_ERROR_NONE) {
+ LOGE("Failed to get app_id : %d", ret);
+ free(consumer_struct);
+ return STICKER_ERROR_OPERATION_FAILED;
+ }
+
ret = sticker_dbus_init(&consumer_struct->gdbus_connection, &consumer_struct->server_watcher_id,
&consumer_struct->monitor_id, &consumer_struct->server_monitor_id, STICKER_CLIENT_LIB_CONSUMER, (void *)consumer_struct);
if (ret != STICKER_ERROR_NONE) {
if (consumer_handle->gdbus_connection)
g_object_unref(consumer_handle->gdbus_connection);
+ if (consumer_handle->app_id) {
+ free(consumer_handle->app_id);
+ consumer_handle->app_id = NULL;
+ }
+
free(consumer_handle);
return STICKER_ERROR_NONE;
if (!consumer_handle || (offset < 0) || (count <= 0) || !result || !callback)
return STICKER_ERROR_INVALID_PARAMETER;
- ret = sticker_dbus_get_all_sticker_info(consumer_handle->gdbus_connection, offset, count, &id_iter);
+ ret = sticker_dbus_get_all_sticker_info(consumer_handle->gdbus_connection, consumer_handle->app_id, offset, count, &id_iter);
if (ret != STICKER_ERROR_NONE) {
LOGE("Failed to get all sticker information : %d", ret);
ret = STICKER_ERROR_OPERATION_FAILED;
if (!consumer_handle || (offset < 0) || (count <= 0) || !result || !keyword || !callback)
return STICKER_ERROR_INVALID_PARAMETER;
- ret = sticker_dbus_get_sticker_info_by_keyword(consumer_handle->gdbus_connection, keyword, offset, count, &id_iter);
+ ret = sticker_dbus_get_sticker_info_by_keyword(consumer_handle->gdbus_connection, consumer_handle->app_id, keyword, offset, count, &id_iter);
if (ret != STICKER_ERROR_NONE) {
LOGE("Failed to get sticker information by keyword : %d", ret);
ret = STICKER_ERROR_OPERATION_FAILED;
if (!consumer_handle || (offset < 0) || (count <= 0) || !result || !group || !callback)
return STICKER_ERROR_INVALID_PARAMETER;
- ret = sticker_dbus_get_sticker_info_by_group(consumer_handle->gdbus_connection, group, offset, count, &id_iter);
+ ret = sticker_dbus_get_sticker_info_by_group(consumer_handle->gdbus_connection, consumer_handle->app_id, group, offset, count, &id_iter);
if (ret != STICKER_ERROR_NONE) {
LOGE("Failed to get sticker information by group : %d", ret);
ret = STICKER_ERROR_OPERATION_FAILED;
if (!consumer_handle || (offset < 0) || (count <= 0) || !result || (type < 1) || !callback)
return STICKER_ERROR_INVALID_PARAMETER;
- ret = sticker_dbus_get_sticker_info_by_type(consumer_handle->gdbus_connection, type, offset, count, &id_iter);
+ ret = sticker_dbus_get_sticker_info_by_type(consumer_handle->gdbus_connection, consumer_handle->app_id, type, offset, count, &id_iter);
if (ret != STICKER_ERROR_NONE) {
LOGE("Failed to get sticker information by group : %d", ret);
ret = STICKER_ERROR_OPERATION_FAILED;
if (!consumer_handle || !callback)
return STICKER_ERROR_INVALID_PARAMETER;
- ret = sticker_dbus_get_group_list(consumer_handle->gdbus_connection, &list);
+ ret = sticker_dbus_get_group_list(consumer_handle->gdbus_connection, consumer_handle->app_id, &list);
if (ret != STICKER_ERROR_NONE) {
LOGE("Failed to get group list : %d", ret);
ret = STICKER_ERROR_OPERATION_FAILED;
if (!consumer_handle || !callback)
return STICKER_ERROR_INVALID_PARAMETER;
- ret = sticker_dbus_get_keyword_list(consumer_handle->gdbus_connection, &list);
+ ret = sticker_dbus_get_keyword_list(consumer_handle->gdbus_connection, consumer_handle->app_id, &list);
if (ret != STICKER_ERROR_NONE) {
LOGE("Failed to get keyword list : %d", ret);
ret = STICKER_ERROR_OPERATION_FAILED;
int server_watcher_id;
int monitor_id;
int server_monitor_id;
+ char *app_id;
};
#ifdef __cplusplus
" </method>"
" <method name='get_group_list'>"
+ " <arg type='s' name='app_id' direction='in'/>"
" <arg type='a(s)' name='group_list' direction='out'/>"
" </method>"
" <method name='get_keyword_list'>"
+ " <arg type='s' name='app_id' direction='in'/>"
" <arg type='a(s)' name='keyword_list' direction='out'/>"
" </method>"
" </method>"
" <method name='get_all_sticker_info'>"
+ " <arg type='s' name='app_id' direction='in'/>"
" <arg type='i' name='offset' direction='in'/>"
" <arg type='i' name='count' direction='in'/>"
" <arg type='a(i)' name='id_list' direction='out'/>"
" </method>"
" <method name='get_sticker_info_by_type'>"
+ " <arg type='s' name='app_id' direction='in'/>"
" <arg type='i' name='type' direction='in'/>"
" <arg type='i' name='offset' direction='in'/>"
" <arg type='i' name='count' direction='in'/>"
" </method>"
" <method name='get_sticker_info_by_group'>"
+ " <arg type='s' name='app_id' direction='in'/>"
" <arg type='s' name='group' direction='in'/>"
" <arg type='i' name='offset' direction='in'/>"
" <arg type='i' name='count' direction='in'/>"
" </method>"
" <method name='get_sticker_info_by_keyword'>"
+ " <arg type='s' name='app_id' direction='in'/>"
" <arg type='s' name='keyword' direction='in'/>"
" <arg type='i' name='offset' direction='in'/>"
" <arg type='i' name='count' direction='in'/>"
{
int ret;
GVariantBuilder *builder = NULL;
+ char *app_id = NULL;
- builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)"));
- ret = stickerd_db_get_group_list(builder);
+ g_variant_get(parameters, "(&s)", &app_id);
+ builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)"));
+ ret = stickerd_db_get_group_list(builder, app_id);
if (ret != STICKERD_SERVER_ERROR_NONE) {
LOGE("Failed to get sticker group list");
g_variant_builder_unref(builder);
{
int ret;
GVariantBuilder *builder = NULL;
+ char *app_id = NULL;
+
+ g_variant_get(parameters, "(&s)", &app_id);
builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)"));
- ret = stickerd_db_get_keyword_list(builder);
+ ret = stickerd_db_get_keyword_list(builder, app_id);
if (ret != STICKERD_SERVER_ERROR_NONE) {
LOGE("Failed to get sticker keyword list");
g_variant_builder_unref(builder);
{
int ret;
int offset, count;
+ char *app_id = NULL;
GList *id_list = NULL;
GVariantBuilder *id_builder = NULL;
- g_variant_get(parameters, "(ii)", &offset, &count);
+ g_variant_get(parameters, "(&sii)", &app_id, &offset, &count);
- ret = stickerd_db_get_record_id(STICKER_DB_STICKER_ALL, &id_list, NULL, offset, count);
+ ret = stickerd_db_get_record_id(STICKER_DB_STICKER_ALL, &id_list, NULL, app_id, offset, count);
if (ret != STICKERD_SERVER_ERROR_NONE) {
LOGE("Failed to get all sticker id");
if(id_list)
g_variant_get(parameters, "(&sii)", &app_id, &offset, &count);
- ret = stickerd_db_get_record_id(STICKER_DB_STICKER_APPID, &id_list, (void *)app_id, offset, count);
+ ret = stickerd_db_get_record_id(STICKER_DB_STICKER_APPID, &id_list, NULL, app_id, offset, count);
if (ret != STICKERD_SERVER_ERROR_NONE) {
LOGE("Failed to get all sticker id");
if(id_list)
{
int ret;
GList *id_list = NULL;
+ char *app_id = NULL;
int type, offset, count;
GVariantBuilder *id_builder = NULL;
- g_variant_get(parameters, "(iii)", &type, &offset, &count);
+ g_variant_get(parameters, "(&siii)", &app_id, &type, &offset, &count);
- ret = stickerd_db_get_record_id(STICKER_DB_STICKER_TYPE, &id_list, &type, offset, count);
+ ret = stickerd_db_get_record_id(STICKER_DB_STICKER_TYPE, &id_list, &type, app_id, offset, count);
if (ret != STICKERD_SERVER_ERROR_NONE) {
LOGE("Failed to get all sticker id");
if(id_list)
{
int ret;
GList *id_list = NULL;
+ char *app_id = NULL;
char *group = NULL;
int offset, count;
GVariantBuilder *id_builder = NULL;
- g_variant_get(parameters, "(&sii)", &group, &offset, &count);
+ g_variant_get(parameters, "(&s&sii)", &app_id, &group, &offset, &count);
- ret = stickerd_db_get_record_id(STICKER_DB_STICKER_GROUP, &id_list, (void *)group, offset, count);
+ ret = stickerd_db_get_record_id(STICKER_DB_STICKER_GROUP, &id_list, (void *)group, app_id, offset, count);
if (ret != STICKERD_SERVER_ERROR_NONE) {
LOGE("Failed to get all sticker id");
if(id_list)
{
int ret;
GList *id_list = NULL;
+ char *app_id = NULL;
char *keyword = NULL;
int offset, count;
GVariantBuilder *id_builder = NULL;
- g_variant_get(parameters, "(&sii)", &keyword, &offset, &count);
+ g_variant_get(parameters, "(&s&sii)", &app_id, &keyword, &offset, &count);
- ret = stickerd_db_get_record_id(STICKER_DB_STICKER_KEYWORD, &id_list, (void *)keyword, offset, count);
+ ret = stickerd_db_get_record_id(STICKER_DB_STICKER_KEYWORD, &id_list, (void *)keyword, app_id, offset, count);
if (ret != STICKERD_SERVER_ERROR_NONE) {
LOGE("Failed to get all sticker id");
if(id_list)
* | keyword_id | sticker_info_id | keyword |
* +------------+-----------------+---------+
*
+ * sticker_whitelist_info
+ * +--------------+-------------+-------------+
+ * | INT | TEXT | TEXT |
+ * +--------------+-------------+-------------+
+ * | whitelist_id | provider_id | consumer_id |
+ * +------------+---------------+-------------+
+ *
*/
#define STICKER_DB_PATH tzplatform_mkpath(TZ_SYS_DB, ".sticker_info.db")
-#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);"
+#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)"
#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_DB_INSERT_STICKER_INFO "INSERT INTO sticker_info (app_id, type, uri, thumbnail, description, group_name, date) VALUES (?, ?, ?, ?, ?, ?, DateTime('now','localtime'))"
#define STICKER_DB_INSERT_STICKER_KEYWORD_INFO "INSERT INTO sticker_keyword_info (sticker_info_id, keyword) VALUES (?, ?)"
#define STICKER_DB_GET_LATEST_RECORD_ID "SELECT sticker_info_id FROM sticker_info ORDER BY sticker_info_id DESC LIMIT 1"
#define STICKER_DB_GET_STICKER_INFO_BY_RECORD_ID "SELECT * FROM sticker_info WHERE sticker_info_id = ?"
#define STICKER_DB_GET_KEYWORD_INFO_BY_RECORD_ID "SELECT keyword FROM sticker_keyword_info WHERE sticker_info_id = ?"
-#define STICKER_DB_GET_ALL_GROUP_LIST "SELECT group_name from (SELECT DISTINCT group_name from sticker_info)"
-#define STICKER_DB_GET_ALL_KEYWORD_LIST "SELECT keyword from (SELECT DISTINCT keyword from sticker_keyword_info)"
+#define STICKER_DB_GET_ALL_GROUP_LIST "SELECT DISTINCT group_name FROM sticker_info WHERE app_id NOT IN (SELECT DISTINCT provider_id FROM sticker_whitelist_info WHERE provider_id NOT IN (SELECT provider_id FROM sticker_whitelist_info WHERE consumer_id = ?))"
+#define STICKER_DB_GET_ALL_KEYWORD_LIST "SELECT DISTINCT keyword FROM sticker_keyword_info WHERE sticker_info_id IN (SELECT sticker_info_id from sticker_info WHERE app_id NOT IN (SELECT DISTINCT provider_id FROM sticker_whitelist_info WHERE provider_id NOT IN (SELECT provider_id FROM sticker_whitelist_info WHERE consumer_id = ?)))"
#define STICKER_DB_GET_STICKER_COUNT "SELECT count(*) FROM sticker_info WHERE app_id = ?"
-#define STICKER_DB_GET_ALL_RECORD_ID "SELECT sticker_info_id from sticker_info LIMIT ?, ?"
+#define STICKER_DB_GET_ALL_RECORD_ID "SELECT sticker_info_id FROM sticker_info WHERE app_id NOT IN (SELECT DISTINCT provider_id FROM sticker_whitelist_info WHERE provider_id NOT IN (SELECT provider_id FROM sticker_whitelist_info WHERE consumer_id = ?)) LIMIT ?, ?"
#define STICKER_DB_GET_RECORD_ID_BY_APP_ID "SELECT sticker_info_id from sticker_info WHERE app_id = ? LIMIT ?, ?"
-#define STICKER_DB_GET_RECORD_ID_BY_TYPE "SELECT sticker_info_id from sticker_info WHERE type = ? LIMIT ?, ?"
-#define STICKER_DB_GET_RECORD_ID_BY_GROUP "SELECT sticker_info_id from sticker_info WHERE group_name = ? LIMIT ?, ?"
-#define STICKER_DB_GET_RECORD_ID_BY_KEYWORD "SELECT sticker_info_id from sticker_keyword_info WHERE keyword = ? LIMIT ?, ?"
+#define STICKER_DB_GET_RECORD_ID_BY_TYPE "SELECT sticker_info_id FROM sticker_info WHERE type = ? AND app_id NOT IN (SELECT DISTINCT provider_id FROM sticker_whitelist_info WHERE provider_id NOT IN (SELECT provider_id FROM sticker_whitelist_info WHERE consumer_id = ?)) LIMIT ?, ?"
+#define STICKER_DB_GET_RECORD_ID_BY_GROUP "SELECT sticker_info_id from sticker_info WHERE group_name = ? AND app_id NOT IN (SELECT DISTINCT provider_id FROM sticker_whitelist_info WHERE provider_id NOT IN (SELECT provider_id FROM sticker_whitelist_info WHERE consumer_id = ?)) LIMIT ?, ?"
+#define STICKER_DB_GET_RECORD_ID_BY_KEYWORD "SELECT sticker_info_id FROM sticker_keyword_info WHERE keyword = ? INTERSECT SELECT sticker_info_id from sticker_info WHERE app_id NOT IN (SELECT DISTINCT provider_id FROM sticker_whitelist_info WHERE provider_id NOT IN (SELECT provider_id FROM sticker_whitelist_info WHERE consumer_id = ?)) LIMIT ?, ?"
typedef enum
{
ret = STICKERD_SERVER_ERROR_DB_FAILED;
}
+ ret = sqlite3_exec(db, STICKER_WHITELIST_INFO_CREATE_TABLE, NULL, NULL, &err);
+ if (ret != SQLITE_OK) {
+ LOGE("Failed to create sticker_whitelist_info table : %s", err);
+ ret = STICKERD_SERVER_ERROR_DB_FAILED;
+ }
+
is_corrupted = FALSE;
cleanup:
goto cleanup;
}
+ ret = sqlite3_exec(db, STICKER_WHITELIST_INFO_CREATE_TABLE, NULL, NULL, &err);
+ if (ret != SQLITE_OK) {
+ LOGE("Failed to create sticker_whitelist_info table : %s", err);
+ ret = STICKERD_SERVER_ERROR_DB_FAILED;
+ }
+
ret = sqlite3_exec(db, "PRAGMA journal_mode = WAL", NULL, NULL, &err);
if (ret != SQLITE_OK) {
LOGE("Failed to set journal_mode : %s", err);
return STICKERD_SERVER_ERROR_DB_FAILED;
}
-int stickerd_db_get_group_list(GVariantBuilder *builder)
+int stickerd_db_get_group_list(GVariantBuilder *builder, char *app_id)
{
int ret;
sqlite3 *db = NULL;
goto cleanup;
}
+ sqlite3_bind_text(stmt, 1, app_id, -1, SQLITE_TRANSIENT);
+
while (sqlite3_step(stmt) == SQLITE_ROW) {
const unsigned char *group = sqlite3_column_text(stmt, 0);
if (group)
return STICKERD_SERVER_ERROR_DB_FAILED;
}
-int stickerd_db_get_keyword_list(GVariantBuilder *builder)
+int stickerd_db_get_keyword_list(GVariantBuilder *builder, char *app_id)
{
int ret;
sqlite3 *db = NULL;
if (!db)
return STICKERD_SERVER_ERROR_DB_FAILED;
+ sqlite3_bind_text(stmt, 1, app_id, -1, SQLITE_TRANSIENT);
+
ret = sqlite3_prepare_v2(db, STICKER_DB_GET_ALL_KEYWORD_LIST, -1, &stmt, NULL);
if (ret != SQLITE_OK) {
LOGE("fail to get keyword list : %s", sqlite3_errmsg(db));
return STICKERD_SERVER_ERROR_DB_FAILED;
}
-int stickerd_db_get_record_id(sticker_info_db_type type, GList **id_list, void *data, int offset, int count)
+int stickerd_db_get_record_id(sticker_info_db_type type, GList **id_list, void *data, char *app_id, int offset, int count)
{
int ret;
sqlite3 *db = NULL;
goto cleanup;
}
- if (type == STICKER_DB_STICKER_TYPE)
- sqlite3_bind_int(stmt, 1, *(int *)data);
- else if (type != STICKER_DB_STICKER_ALL)
- sqlite3_bind_text(stmt, 1, (char *)data, -1, SQLITE_TRANSIENT);
-
- if (type == STICKER_DB_STICKER_ALL) {
- sqlite3_bind_int(stmt, 1, offset);
- sqlite3_bind_int(stmt, 2, count);
- } else {
+ if (type == STICKER_DB_STICKER_ALL || type == STICKER_DB_STICKER_APPID) {
+ sqlite3_bind_text(stmt, 1, app_id, -1, SQLITE_TRANSIENT);
sqlite3_bind_int(stmt, 2, offset);
sqlite3_bind_int(stmt, 3, count);
+ } else {
+ if (type == STICKER_DB_STICKER_TYPE)
+ sqlite3_bind_int(stmt, 1, *(int *)data);
+ else
+ sqlite3_bind_text(stmt, 1, (char *)data, -1, SQLITE_TRANSIENT);
+
+ sqlite3_bind_text(stmt, 2, app_id, -1, SQLITE_TRANSIENT);
+ sqlite3_bind_int(stmt, 3, offset);
+ sqlite3_bind_int(stmt, 4, count);
}
while (sqlite3_step(stmt) == SQLITE_ROW) {
int stickerd_db_delete_sticker_info(int record_id);
int stickerd_db_update_sticker_info(int record_id, sticker_info_db_type type, void *data);
int stickerd_db_get_sticker_info_by_record_id(int record_id, sticker_info_db *sticker_info);
-int stickerd_db_get_group_list(GVariantBuilder *builder);
-int stickerd_db_get_keyword_list(GVariantBuilder *builder);
+int stickerd_db_get_group_list(GVariantBuilder *builder, char *app_id);
+int stickerd_db_get_keyword_list(GVariantBuilder *builder, char *app_id);
int stickerd_db_get_sticker_count(int *count, char *app_id);
-int stickerd_db_get_record_id(sticker_info_db_type type, GList **id_list, void *data, int offset, int count);
+int stickerd_db_get_record_id(sticker_info_db_type type, GList **id_list, void *data, char *app_id, int offset, int count);
#ifdef __cplusplus
}
#define LOG_TAG "STICKER_PARSER"
#define STICKER_DIRECTORY tzplatform_mkpath(TZ_SYS_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);"
+#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)"
#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 UIFW_ID 502
#define APPFW_ID 301
#define MAX_ERROR_BUFFER 256
return type;
}
+static int __change_ownership(const char *path, int user, int group)
+{
+ int ret;
+ uid_t uid = (uid_t)user;
+ gid_t gid = (gid_t)group;
+
+ ret = chown(path, uid, gid);
+ if (ret != 0) {
+ strerror_r(errno, error_buffer, MAX_ERROR_BUFFER);
+ LOGE("chown() failed : %s", error_buffer);
+ }
+
+ return ret;
+}
+
static void __recover_db()
{
int ret;
goto cleanup;
}
+ ret = sqlite3_exec(db, STICKER_WHITELIST_INFO_CREATE_TABLE, NULL, NULL, &err);
+ if (ret != SQLITE_OK) {
+ LOGE("Failed to create sticker_whitelist_info table : %s", err);
+ goto cleanup;
+ }
+
is_corrupted = FALSE;
cleanup:
goto cleanup;
}
+ if (__change_ownership(db_path, UIFW_ID, UIFW_ID) != 0)
+ LOGE("failed to change ownership");
+
ret = sqlite3_exec(db, STICKER_INFO_CREATE_TABLE, NULL, NULL, &err);
if (ret != SQLITE_OK) {
LOGE("Failed to create sticker_info table : %s" , err);
goto cleanup;
}
+ ret = sqlite3_exec(db, STICKER_WHITELIST_INFO_CREATE_TABLE, NULL, NULL, &err);
+ if (ret != SQLITE_OK) {
+ LOGE("Failed to create sticker_whitelist_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);
return db;
}
-static int __change_ownership(const char *path, int user, int group)
-{
- int ret;
- uid_t uid = (uid_t)user;
- gid_t gid = (gid_t)group;
-
- ret = chown(path, uid, gid);
- if (ret != 0) {
- strerror_r(errno, error_buffer, MAX_ERROR_BUFFER);
- LOGE("chown() failed : %s", error_buffer);
- }
-
- return ret;
-}
-
static int __remove_app_path(char *uri, const char *app_path)
{
int n = 0;
return;
}
+static void __insert_sticker_whitelist_info(const char *provider, const char *consumer) {
+ int ret;
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+ const char *db_path;
+
+ db_path = tzplatform_mkpath(TZ_SYS_DB, ".sticker_info.db");
+ db = __db_open(db_path);
+ if (!db)
+ return;
+
+ ret = sqlite3_prepare_v2(db, "INSERT INTO sticker_whitelist_info (provider_id, consumer_id) VALUES (?, ?)", -1, &stmt, NULL);
+ if (ret == SQLITE_OK) {
+ sqlite3_bind_text(stmt, 1, provider, -1, SQLITE_TRANSIENT);
+ sqlite3_bind_text(stmt, 2, consumer, -1, SQLITE_TRANSIENT);
+
+ ret = sqlite3_step(stmt);
+ if (ret != SQLITE_OK && ret != SQLITE_DONE)
+ LOGE("sqlite3_step() failed : ret(%d)", ret);
+
+ if (sqlite3_changes(db) == 0)
+ LOGE("No changes to DB");
+
+ sqlite3_finalize(stmt);
+ sqlite3_close(db);
+ } else {
+ LOGE("fail to insert sticker whiltelist : %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ sqlite3_close(db);
+ }
+
+ return;
+}
+
static int __get_sticker_info_from_json(const char *appid, const char *file_path, const char *app_path)
{
int ret = 1;
+ int arr_len = 0;
JsonParser* parser = NULL;
GError* err_msg = NULL;
char *uri = NULL;
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 *sticker_arr = json_object_get_array_member(root_obj, "sticker");
if (sticker_arr == NULL) {
LOGE("failed to get array member");
goto cleanup;
}
- int arr_len = json_array_get_length(sticker_arr);
+ arr_len = json_array_get_length(sticker_arr);
for (int i = 0; i < arr_len; i++) {
JsonObject *info_object = json_array_get_object_element(sticker_arr, i);
if (info_object != NULL) {
return ret;
}
+static void __delete_sticker_whitelist(const char *db_path, const char *app_id)
+{
+ int ret;
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ db = __db_open(db_path);
+ if (!db)
+ return;
+
+ 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));
+ sqlite3_finalize(stmt);
+ sqlite3_close(db);
+ goto cleanup;
+ }
+
+ sqlite3_bind_text(stmt, 1, app_id, -1, SQLITE_TRANSIENT);
+
+ ret = sqlite3_step(stmt);
+ if (ret != SQLITE_OK && ret != SQLITE_DONE) {
+ LOGE("sqlite3_step() failed : ret(%d)", ret);
+ goto cleanup;
+ }
+
+ if (sqlite3_changes(db) == 0) {
+ LOGE("No changes to DB");
+ goto cleanup;
+ }
+
+ sqlite3_finalize(stmt);
+ sqlite3_close(db);
+ return;
+
+cleanup:
+ sqlite3_finalize(stmt);
+ sqlite3_close(db);
+ return;
+}
+
static void __delete_sticker_info(const char *db_path, int record_id)
{
int ret;
LOGD("METADATA INSTALL");
LOGD("pkgid: %s, appid: %s", pkgid, appid);
- metadata *md = NULL;
- GList *md_list = NULL;
+ metadata *md = (metadata *)list->data;
package_info_h package_info = NULL;
char *app_path = NULL;
char *file_path = NULL;
goto cleanup;
}
- for(md_list = g_list_first(list); md_list != NULL; md_list = md_list->next) {
- md = (metadata *)md_list->data;
- int path_len = strlen(app_path) + strlen((char *)md->value) + 2;
- file_path = (char *)calloc(path_len, sizeof(char));
- if (!file_path) {
- LOGE("failed to alloc memory");
- continue;
- }
+ int path_len = strlen(app_path) + strlen((char *)md->value) + 2;
+ file_path = (char *)calloc(path_len, sizeof(char));
+ if (!file_path) {
+ LOGE("failed to alloc memory");
+ goto cleanup;
+ }
- if ((char)md->value[0] == '/')
- snprintf(file_path, path_len, "%s%s",app_path, (char *)md->value);
- else
- snprintf(file_path, path_len, "%s%s%s",app_path, "/", (char *)md->value);
+ if ((char)md->value[0] == '/')
+ snprintf(file_path, path_len, "%s%s",app_path, (char *)md->value);
+ else
+ snprintf(file_path, path_len, "%s%s%s",app_path, "/", (char *)md->value);
- if (__get_sticker_info_from_json(appid, file_path, app_path) == 0)
+ if (__get_sticker_info_from_json(appid, file_path, app_path) == 0)
LOGE("failed to get sticker information [path : %s]", file_path);
- free(file_path);
- file_path = NULL;
- }
-
cleanup:
if (package_info)
package_info_destroy(package_info);
app_path = NULL;
}
+ if (file_path) {
+ free(file_path);
+ file_path = NULL;
+ }
+
return 0;
}
sqlite3_close(db);
}
+ __delete_sticker_whitelist(db_path, appid);
+
return 0;
}