return bundle_decode(col_bundle, strlen((char *)col_bundle));
}
+/* db upgrade sequece*/
+static int __check_db_version(sqlite3 *db) {
+ int ret;
+ int result;
+ sqlite3_stmt *stmt = NULL;
+
+ WARN("@@ __check_db_version");
+
+ ret = sqlite3_prepare_v2(db, "PRAGMA user_version", -1, &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ ERR("@@ Failed to sqlite3_prepare_v2[%d][%s]",
+ ret, sqlite3_errmsg(db));
+ return -1;
+ }
+
+ ret = sqlite3_step(stmt);
+ if (ret == SQLITE_ROW)
+ result = sqlite3_column_int(stmt, 0);
+ else
+ result = 0;
+
+ WARN("@@ db version : %d", result);
+
+ if (stmt)
+ sqlite3_finalize(stmt);
+
+ if (result != DB_VERSION) {
+ WARN("@@ db is not latest version");
+ return -1;
+ }
+
+ return 0;
+}
+
+static int __upgrade_noti_table(sqlite3 *db) {
+ int ret;
+ char *errmsg = NULL;
+
+ WARN("@@ upgrade noti list");
+
+ ret = sqlite3_table_column_metadata(db, NULL, "noti_list",
+ "b_event_handler_click_on_button_7", NULL, NULL, NULL, NULL, NULL);
+ if (ret != SQLITE_OK) {
+ WARN("@@ btn column not exist");
+ goto upgrade;
+ }
+
+ ret = sqlite3_table_column_metadata(db, NULL, "noti_list",
+ "check_box", NULL, NULL, NULL, NULL, NULL);
+ if (ret == SQLITE_OK) {
+ WARN("@@ columns are exist");
+ return NOTIFICATION_ERROR_NONE;
+ }
+
+upgrade:
+ ret = sqlite3_exec(db, NOTIFICATION_UPGRADE_DB, NULL, NULL, &errmsg);
+ if (ret != SQLITE_OK) {
+ ERR("@@ Failed to upgrade noti db[%d][%s]", ret, errmsg);
+ ret = NOTIFICATION_ERROR_FROM_DB;
+ } else {
+ ret = NOTIFICATION_ERROR_NONE;
+ }
+
+ if (errmsg)
+ sqlite3_free(errmsg);
+
+ WARN("@@ upgrade noti list done");
+
+ return ret;
+}
+
+static int __upgrade_noti_template_table(sqlite3 *db) {
+ int ret;
+ char *errmsg = NULL;
+
+ WARN("@@ upgrade noti templage");
+
+ ret = sqlite3_table_column_metadata(db, NULL, "noti_template",
+ "b_event_handler_click_on_button_7", NULL, NULL, NULL, NULL, NULL);
+ if (ret != SQLITE_OK) {
+ WARN("@@ btn column not exist");
+ goto upgrade;
+ }
+
+ ret = sqlite3_table_column_metadata(db, NULL, "noti_template",
+ "check_box", NULL, NULL, NULL, NULL, NULL);
+ if (ret == SQLITE_OK) {
+ WARN("@@ columns are exist");
+ return NOTIFICATION_ERROR_NONE;
+ }
+
+upgrade:
+ ret = sqlite3_exec(db, NOTIFICATION_UPGRADE_TEMPLATE_DB, NULL, NULL, &errmsg);
+ if (ret != SQLITE_OK) {
+ ERR("@@ Failed to upgrade noti db[%d][%s]", ret, errmsg);
+ ret = NOTIFICATION_ERROR_FROM_DB;
+ } else {
+ ret = NOTIFICATION_ERROR_NONE;
+ }
+
+ if (errmsg)
+ sqlite3_free(errmsg);
+
+ WARN("@@ upgrade noti templage done");
+
+ return ret;
+}
+
+EXPORT_API int notification_upgrade_db(void)
+{
+ sqlite3 *db;
+ int ret = NOTIFICATION_ERROR_NONE;
+ char *errmsg = NULL;
+ char *query = NULL;
+
+ WARN("@@ upgrade db");
+
+ ret = sqlite3_open_v2(DBPATH, &db, SQLITE_OPEN_READWRITE, NULL);
+ if (ret != SQLITE_OK) {
+ ERR("@@ Failed to open db");
+ ret = NOTIFICATION_ERROR_FROM_DB;
+ goto out;
+ }
+
+ // 1. check version
+ if (__check_db_version(db) == 0) {
+ WARN("@@ db is latest version");
+ ret = NOTIFICATION_ERROR_NONE;
+ goto out;
+ }
+
+ // 2. run upgrade query
+ ret = __upgrade_noti_table(db);
+ if (ret != NOTIFICATION_ERROR_NONE) {
+ ERR("@@ Failed to upgrade noti table");
+ goto out;
+ }
+
+ ret = __upgrade_noti_template_table(db);
+ if (ret != NOTIFICATION_ERROR_NONE) {
+ ERR("@@ Failed to upgrade noti template table");
+ goto out;
+ }
+
+ // 3. set new version
+ query = sqlite3_mprintf("PRAGMA user_version=%d", DB_VERSION);
+ if (query == NULL) {
+ ERR("@@ Failed to set verion query");
+ ret = NOTIFICATION_ERROR_OUT_OF_MEMORY;
+ goto out;
+ }
+
+ ret = sqlite3_exec(db, query, NULL, NULL, &errmsg);
+ if (ret != SQLITE_OK) {
+ ERR("@@ Failed to ser user version[%d][%s]", ret, errmsg);
+ ret = NOTIFICATION_ERROR_FROM_DB;
+ }
+ WARN("@@ upgrade db done");
+
+out:
+ if (errmsg)
+ sqlite3_free(errmsg);
+
+ if (query)
+ sqlite3_free(query);
+
+ if (db)
+ notification_db_close(&db);
+
+ return NOTIFICATION_ERROR_NONE;
+}
#define NOTIFICATION_SETTING_DB_TABLE "notification_setting"
#define NOTIFICATION_SYSTEM_SETTING_DB_TABLE "notification_system_setting"
#define NOTIFICATION_DND_ALLOW_EXCEPTION "dnd_allow_exception"
+#define DB_VERSION 2
#define CREATE_NOTIFICATION_TABLE \
"PRAGMA journal_mode = PERSIST;\n" \
"dnd_schedule_day, dnd_start_hour, dnd_start_min, dnd_end_hour, " \
"dnd_end_min, lock_screen_content_level"
+#define NOTIFICATION_UPGRADE_DB \
+ "DROP TABLE IF EXISTS noti_list_temp;\n" \
+ "CREATE TABLE noti_list_temp (\n" \
+ " type INTEGER NOT NULL,\n" \
+ " layout INTEGER NOT NULL default 0,\n" \
+ " pkg_id TEXT NOT NULL,\n" \
+ " caller_app_id TEXT NOT NULL,\n" \
+ " launch_app_id TEXT,\n" \
+ " app_label TEXT,\n" \
+ " image_path TEXT,\n" \
+ " priv_image_path TEXT,\n" \
+ " group_id INTEGER default 0,\n" \
+ " internal_group_id INTEGER default 0,\n" \
+ " priv_id INTEGER PRIMARY KEY AUTOINCREMENT,\n" \
+ " title_key TEXT,\n" \
+ " b_text TEXT,\n" \
+ " b_key TEXT,\n" \
+ " tag TEXT,\n" \
+ " b_format_args TEXT,\n" \
+ " num_format_args INTEGER default 0,\n" \
+ " text_domain TEXT,\n" \
+ " text_dir TEXT,\n" \
+ " time INTEGER default 0,\n" \
+ " insert_time INTEGER default 0,\n" \
+ " args TEXT,\n" \
+ " group_args TEXT,\n" \
+ " b_execute_option TEXT,\n" \
+ " b_service_responding TEXT,\n" \
+ " b_service_single_launch TEXT,\n" \
+ " b_service_multi_launch TEXT,\n" \
+ " b_event_handler_click_on_button_1 TEXT,\n" \
+ " b_event_handler_click_on_button_2 TEXT,\n" \
+ " b_event_handler_click_on_button_3 TEXT,\n" \
+ " b_event_handler_click_on_button_4 TEXT,\n" \
+ " b_event_handler_click_on_button_5 TEXT,\n" \
+ " b_event_handler_click_on_button_6 TEXT,\n" \
+ " b_event_handler_click_on_icon TEXT,\n" \
+ " b_event_handler_click_on_thumbnail TEXT,\n" \
+ " b_event_handler_click_on_text_input_button TEXT,\n" \
+ " b_event_handler_click_on_button_7 TEXT,\n" \
+ " b_event_handler_click_on_button_8 TEXT,\n" \
+ " b_event_handler_click_on_button_9 TEXT,\n" \
+ " b_event_handler_click_on_button_10 TEXT,\n" \
+ " sound_type INTEGER default 0,\n" \
+ " sound_path TEXT,\n" \
+ " priv_sound_path TEXT,\n" \
+ " vibration_type INTEGER default 0,\n" \
+ " vibration_path TEXT,\n" \
+ " priv_vibration_path TEXT,\n" \
+ " led_operation INTEGER default 0,\n" \
+ " led_argb INTEGER default 0,\n" \
+ " led_on_ms INTEGER default -1,\n" \
+ " led_off_ms INTEGER default -1,\n" \
+ " flags_for_property INTEGER default 0,\n" \
+ " flag_simmode INTEGER default 0,\n" \
+ " display_applist INTEGER,\n" \
+ " progress_size DOUBLE default 0,\n" \
+ " progress_percentage DOUBLE default 0,\n" \
+ " ongoing_flag INTEGER default 0,\n" \
+ " ongoing_value_type INTEGER default 0,\n" \
+ " ongoing_current INTEGER default 0,\n" \
+ " ongoing_duration INTEGER default 0,\n" \
+ " auto_remove INTEGER default 1,\n" \
+ " default_button_index INTEGER default 0,\n" \
+ " hide_timeout INTEGER default 0,\n" \
+ " delete_timeout INTEGER default 0,\n" \
+ " text_input_max_length INTEGER default 0,\n" \
+ " event_flag INTEGER default 0,\n" \
+ " extension_image_size INTEGER default 0,\n" \
+ " uid INTEGER,\n" \
+ " check_box INTEGER DEFAULT 0,\n" \
+ " check_box_value INTEGER DEFAULT 0 );\n" \
+ " INSERT INTO noti_list_temp (type, layout, pkg_id, caller_app_id, launch_app_id, image_path, priv_image_path, group_id, internal_group_id, priv_id, title_key, b_text, b_key, tag, b_format_args, num_format_args, text_domain, text_dir, time, insert_time, args, group_args, b_execute_option, b_service_responding, b_service_single_launch, b_service_multi_launch, b_event_handler_click_on_button_1, b_event_handler_click_on_button_2, b_event_handler_click_on_button_3, b_event_handler_click_on_button_4, b_event_handler_click_on_button_5, b_event_handler_click_on_button_6, b_event_handler_click_on_icon, b_event_handler_click_on_thumbnail, b_event_handler_click_on_text_input_button, sound_type, sound_path, priv_sound_path, vibration_type, vibration_path, priv_vibration_path, led_operation, led_argb, led_on_ms, led_off_ms, flags_for_property, flag_simmode, display_applist, progress_size, progress_percentage, ongoing_flag, ongoing_value_type, ongoing_current, ongoing_duration, auto_remove, default_button_index, hide_timeout, delete_timeout, text_input_max_length, event_flag, extension_image_size, uid) \n" \
+ " SELECT type, layout, pkg_id, caller_app_id, launch_app_id, image_path, priv_image_path, group_id, internal_group_id, priv_id, title_key, b_text, b_key, tag, b_format_args, num_format_args, text_domain, text_dir, time, insert_time, args, group_args, b_execute_option, b_service_responding, b_service_single_launch, b_service_multi_launch, b_event_handler_click_on_button_1, b_event_handler_click_on_button_2, b_event_handler_click_on_button_3, b_event_handler_click_on_button_4, b_event_handler_click_on_button_5, b_event_handler_click_on_button_6, b_event_handler_click_on_icon, b_event_handler_click_on_thumbnail, b_event_handler_click_on_text_input_button, sound_type, sound_path, priv_sound_path, vibration_type, vibration_path, priv_vibration_path, led_operation, led_argb, led_on_ms, led_off_ms, flags_for_property, flag_simmode, display_applist, progress_size, progress_percentage, ongoing_flag, ongoing_value_type, ongoing_current, ongoing_duration, auto_remove, default_button_index, hide_timeout, delete_timeout, text_input_max_length, event_flag, extension_image_size, uid FROM noti_list;\n" \
+ " DROP TABLE noti_list;\n" \
+ " ALTER TABLE noti_list_temp RENAME TO noti_list;\n"
+
+#define NOTIFICATION_UPGRADE_TEMPLATE_DB \
+ "DROP TABLE IF EXISTS noti_template_temp;\n" \
+ "CREATE TABLE noti_template_temp (\n" \
+ " type INTEGER NOT NULL,\n" \
+ " layout INTEGER NOT NULL default 0,\n" \
+ " pkg_id TEXT NOT NULL,\n" \
+ " caller_app_id TEXT NOT NULL,\n" \
+ " launch_app_id TEXT,\n" \
+ " app_label TEXT,\n" \
+ " image_path TEXT,\n" \
+ " priv_image_path TEXT,\n" \
+ " group_id INTEGER default 0,\n" \
+ " internal_group_id INTEGER default 0,\n" \
+ " priv_id INTEGER PRIMARY KEY AUTOINCREMENT,\n" \
+ " title_key TEXT,\n" \
+ " b_text TEXT,\n" \
+ " b_key TEXT,\n" \
+ " tag TEXT,\n" \
+ " b_format_args TEXT,\n" \
+ " num_format_args INTEGER default 0,\n" \
+ " text_domain TEXT,\n" \
+ " text_dir TEXT,\n" \
+ " time INTEGER default 0,\n" \
+ " insert_time INTEGER default 0,\n" \
+ " args TEXT,\n" \
+ " group_args TEXT,\n" \
+ " b_execute_option TEXT,\n" \
+ " b_service_responding TEXT,\n" \
+ " b_service_single_launch TEXT,\n" \
+ " b_service_multi_launch TEXT,\n" \
+ " b_event_handler_click_on_button_1 TEXT,\n" \
+ " b_event_handler_click_on_button_2 TEXT,\n" \
+ " b_event_handler_click_on_button_3 TEXT,\n" \
+ " b_event_handler_click_on_button_4 TEXT,\n" \
+ " b_event_handler_click_on_button_5 TEXT,\n" \
+ " b_event_handler_click_on_button_6 TEXT,\n" \
+ " b_event_handler_click_on_icon TEXT,\n" \
+ " b_event_handler_click_on_thumbnail TEXT,\n" \
+ " b_event_handler_click_on_text_input_button TEXT,\n" \
+ " b_event_handler_click_on_button_7 TEXT,\n" \
+ " b_event_handler_click_on_button_8 TEXT,\n" \
+ " b_event_handler_click_on_button_9 TEXT,\n" \
+ " b_event_handler_click_on_button_10 TEXT,\n" \
+ " sound_type INTEGER default 0,\n" \
+ " sound_path TEXT,\n" \
+ " priv_sound_path TEXT,\n" \
+ " vibration_type INTEGER default 0,\n" \
+ " vibration_path TEXT,\n" \
+ " priv_vibration_path TEXT,\n" \
+ " led_operation INTEGER default 0,\n" \
+ " led_argb INTEGER default 0,\n" \
+ " led_on_ms INTEGER default -1,\n" \
+ " led_off_ms INTEGER default -1,\n" \
+ " flags_for_property INTEGER default 0,\n" \
+ " flag_simmode INTEGER default 0,\n" \
+ " display_applist INTEGER,\n" \
+ " progress_size DOUBLE default 0,\n" \
+ " progress_percentage DOUBLE default 0,\n" \
+ " ongoing_flag INTEGER default 0,\n" \
+ " ongoing_value_type INTEGER default 0,\n" \
+ " ongoing_current INTEGER default 0,\n" \
+ " ongoing_duration INTEGER default 0,\n" \
+ " auto_remove INTEGER default 1,\n" \
+ " default_button_index INTEGER default 0,\n" \
+ " hide_timeout INTEGER default 0,\n" \
+ " delete_timeout INTEGER default 0,\n" \
+ " text_input_max_length INTEGER default 0,\n" \
+ " event_flag INTEGER default 0,\n" \
+ " extension_image_size INTEGER default 0,\n" \
+ " uid INTEGER,\n" \
+ " check_box INTEGER DEFAULT 0,\n" \
+ " check_box_value INTEGER DEFAULT 0,\n" \
+ " template_name TEXT,\n" \
+ " UNIQUE (caller_app_id, template_name) );\n" \
+ " INSERT INTO noti_template_temp (type, layout, pkg_id, caller_app_id, launch_app_id, image_path, priv_image_path, group_id, internal_group_id, priv_id, title_key, b_text, b_key, tag, b_format_args, num_format_args, text_domain, text_dir, time, insert_time, args, group_args, b_execute_option, b_service_responding, b_service_single_launch, b_service_multi_launch, b_event_handler_click_on_button_1, b_event_handler_click_on_button_2, b_event_handler_click_on_button_3, b_event_handler_click_on_button_4, b_event_handler_click_on_button_5, b_event_handler_click_on_button_6, b_event_handler_click_on_icon, b_event_handler_click_on_thumbnail, b_event_handler_click_on_text_input_button, sound_type, sound_path, priv_sound_path, vibration_type, vibration_path, priv_vibration_path, led_operation, led_argb, led_on_ms, led_off_ms, flags_for_property, flag_simmode, display_applist, progress_size, progress_percentage, ongoing_flag, ongoing_value_type, ongoing_current, ongoing_duration, auto_remove, default_button_index, hide_timeout, delete_timeout, text_input_max_length, event_flag, extension_image_size, uid) \n" \
+ " SELECT type, layout, pkg_id, caller_app_id, launch_app_id, image_path, priv_image_path, group_id, internal_group_id, priv_id, title_key, b_text, b_key, tag, b_format_args, num_format_args, text_domain, text_dir, time, insert_time, args, group_args, b_execute_option, b_service_responding, b_service_single_launch, b_service_multi_launch, b_event_handler_click_on_button_1, b_event_handler_click_on_button_2, b_event_handler_click_on_button_3, b_event_handler_click_on_button_4, b_event_handler_click_on_button_5, b_event_handler_click_on_button_6, b_event_handler_click_on_icon, b_event_handler_click_on_thumbnail, b_event_handler_click_on_text_input_button, sound_type, sound_path, priv_sound_path, vibration_type, vibration_path, priv_vibration_path, led_operation, led_argb, led_on_ms, led_off_ms, flags_for_property, flag_simmode, display_applist, progress_size, progress_percentage, ongoing_flag, ongoing_value_type, ongoing_current, ongoing_duration, auto_remove, default_button_index, hide_timeout, delete_timeout, text_input_max_length, event_flag, extension_image_size, uid FROM noti_template;\n" \
+ " DROP TABLE noti_template;\n" \
+ " ALTER TABLE noti_template_temp RENAME TO noti_template;\n"
+
#define __BIND_TEXT(db, stmt, i, text, ret, label) \
do { \
ret = sqlite3_bind_text(stmt, i, text, -1, SQLITE_TRANSIENT); \