mc_retvm_if(app_id == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid app_id");
/* Update server_state to deactivated, if the server is latest.
- * Drop the table of server_name, if it is not latest.
+ * Remove server from app_list, if it is not latest.
*/
if (__mc_db_is_latest(db_handle, app_id)) {
ret = __mc_update_latest_server_info_to_db(db_handle, MC_SERVER_STATE_DEACTIVATE, MC_PLAYBACK_STATE_STOPPED);
return ret;
}
- /* Delete application from server/client list */
+ /* Delete application from app list */
ret = __mc_db_delete_from_list(db_handle, app_id, priv_type);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_secure_error("__mc_db_delete_from_list error : %d", ret);
- /* Drop server table to remove application information if it is not latest.
- * Update application information if it is latest.
- */
+ /* Update application information if it is server */
if (priv_type == MC_PRIV_TYPE_SERVER) {
ret = __mc_db_deactivate_server(db_handle, app_id);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
return ret;
}
+
+gboolean mc_db_util_is_exist_table(sqlite3 *handle, const char *table_name)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+ int result = 0;
+ sqlite3_stmt *stmt = NULL;
+
+ mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ mc_retvm_if(!table_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "table_name is NULL");
+
+ sql_str = sqlite3_mprintf("SELECT count(*) FROM sqlite_master WHERE tbl_name=%Q", table_name);
+ mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null");
+
+ ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), &stmt, NULL);
+ SQLITE3_SAFE_FREE(sql_str);
+ mc_retvm_if(SQLITE_OK != ret, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "prepare error [%s]", sqlite3_errmsg(handle));
+
+ if (sqlite3_step(stmt) == SQLITE_ROW)
+ result = sqlite3_column_int(stmt, 0);
+
+ SQLITE3_FINALIZE(stmt);
+
+ return (gboolean)result;
+}
+
+int mc_db_util_get_latest_server(sqlite3 *handle, char **latest_server_name)
+{
+ /* NOTICE : This function for upgrade tizen 5.0 to 5.5 only. */
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ mc_retvm_if(!latest_server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "latest_server_name is NULL");
+
+ sql_str = sqlite3_mprintf("SELECT server_name FROM %q", MC_DB_TABLE_LATEST_SERVER);
+ mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null");
+
+ ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), &stmt, NULL);
+ SQLITE3_SAFE_FREE(sql_str);
+ mc_retvm_if(SQLITE_OK != ret, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "prepare error [%s]", sqlite3_errmsg(handle));
+
+ if (sqlite3_step(stmt) == SQLITE_ROW)
+ *latest_server_name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
+
+ SQLITE3_FINALIZE(stmt);
+
+ return ret;
+}
+
+int mc_db_util_drop_table(sqlite3 *handle, const char *table_name)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+
+ mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ mc_retvm_if(!MC_STRING_VALID(table_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "table_name is NULL");
+
+ sql_str = sqlite3_mprintf("DROP TABLE %Q", table_name);
+ ret = mc_db_util_update_db(handle, sql_str);
+ SQLITE3_SAFE_FREE(sql_str);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Drop table failed [%d]", ret);
+
+ return ret;
+}
+
+int mc_db_util_migration(sqlite3 *handle, const char *table_name)
+{
+ /* NOTICE : This function for upgrade tizen 5.0 to 5.5 only. */
+ /* If latest_server is exists, insert into new table and drop {latest_server_name} table */
+ /* Insert into server_meta */
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+
+ mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ mc_retvm_if(!MC_STRING_VALID(table_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "table_name is NULL");
+
+ /* Insert into latest_server */
+ sql_str = sqlite3_mprintf("INSERT INTO %q VALUES (%Q)", MC_DB_TABLE_LATEST_SERVER, table_name);
+ ret = mc_db_util_update_db(handle, sql_str);
+ SQLITE3_SAFE_FREE(sql_str);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Insert into latest_server failed [%d]", ret);
+
+ /* Insert into server_info */
+ sql_str = sqlite3_mprintf("INSERT INTO %q(name, playback_position, playlist_name, playlist_index, playback_content_type, age_rating, shuffle_mode, repeat_mode, icon_uri, ability_decided, ability_supported) \
+ SELECT server_name, playback_position, playlist_name, playlist_index, playback_content_type, age_rating, shuffle_mode, repeat_mode, icon_uri, ability_decided, ability_supported FROM %Q", MC_DB_TABLE_SERVER_INFO, table_name);
+
+ ret = mc_db_util_update_db(handle, sql_str);
+ SQLITE3_SAFE_FREE(sql_str);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Insert into server_info failed [%d]", ret);
+
+ /* Insert into server_meta */
+ sql_str = sqlite3_mprintf("INSERT INTO %q(name, title, artist, album, author, genre, duration, date, copyright, description, track_num, picture) \
+ SELECT %Q, title, artist, album, author, genre, duration, date, copyright, description, track_num, picture FROM %Q", MC_DB_TABLE_LATEST_META, table_name, table_name);
+
+ ret = mc_db_util_update_db(handle, sql_str);
+ SQLITE3_SAFE_FREE(sql_str);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Insert into latest_meta failed [%d]", ret);
+
+ /* Drop {table_name} table */
+ ret = mc_db_util_drop_table(handle, table_name);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "mc_db_util_drop_table failed [%d]", ret);
+
+ return ret;
+}
\ No newline at end of file
{
int res = MEDIA_CONTROLLER_ERROR_NONE;
int version = 0;
+ gboolean is_exist = FALSE;
+ char *latest_server_name = NULL;
sqlite3 *db_handle = NULL;
/* Connect media controller DB*/
/* Create tables */
res = mc_db_util_get_user_version(db_handle, &version);
if (res == MEDIA_CONTROLLER_ERROR_NONE && version == 0) {
+ /* Notice : User version of tizen 5.0 is 0. So, need to check table count. */
+ is_exist = mc_db_util_is_exist_table(db_handle, "server_list");
+ if (is_exist) {
+ mc_info("Upgrade tables");
+ /* Get latest server name */
+ res = mc_db_util_get_latest_server(db_handle, &latest_server_name);
+ if (res != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("mc_db_util_get_latest_server failed [%d]", res);
+
+ /* Drop old tables */
+ res = mc_db_util_drop_table(db_handle, "server_list");
+ if (res != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("mc_db_util_drop_table failed [%d]", res);
+
+ res = mc_db_util_drop_table(db_handle, "client_list");
+ if (res != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("mc_db_util_drop_table failed [%d]", res);
+
+ res = mc_db_util_drop_table(db_handle, "server_playlist");
+ if (res != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("mc_db_util_drop_table failed [%d]", res);
+
+ res = mc_db_util_drop_table(db_handle, "latest_server");
+ if (res != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("mc_db_util_drop_table failed [%d]", res);
+
+ } else {
+ mc_info("Create tables");
+ }
+
+ /* Create tables */
res = mc_db_util_create_tables(db_handle);
if (res != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("mc_db_util_create_tables failed [%d]", res);
res = mc_db_util_set_user_version(db_handle);
if (res != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("mc_db_util_set_user_version failed [%d]", res);
+
+ if (MC_STRING_VALID(latest_server_name)) {
+ res = mc_db_util_migration(db_handle, latest_server_name);
+ if (res != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("mc_db_util_migration failed [%d]", res);
+
+ MC_SAFE_FREE(latest_server_name);
+ }
}
/* Delete app_list */