From 268e5bdd50fd57ba6bf393376571dd71ecc9c24e Mon Sep 17 00:00:00 2001 From: Jiyong Min Date: Wed, 17 May 2017 15:29:57 +0900 Subject: [PATCH] Fix the problem getting wrong server & playback state for latest_server after reboot and change the location of header files Change-Id: I0a3f41de8d484f334b06709630bfc9dba3c2bc14 Signed-off-by: jiyong min --- CMakeLists.txt | 2 +- packaging/capi-media-controller.spec | 2 +- svc/daemon/media_controller_main.c | 4 +- svc/{ => include}/media_controller_cynara.h | 0 svc/{ => include}/media_controller_db_util.h | 5 ++- svc/{ => include}/media_controller_socket.h | 0 svc/{ => include}/media_controller_svc.h | 0 svc/media_controller_db_util.c | 57 ++++++++++++++++++++++++++++ svc/media_controller_svc.c | 8 +++- 9 files changed, 72 insertions(+), 6 deletions(-) rename svc/{ => include}/media_controller_cynara.h (100%) rename svc/{ => include}/media_controller_db_util.h (83%) rename svc/{ => include}/media_controller_socket.h (100%) rename svc/{ => include}/media_controller_svc.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d52595..78c61d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,7 +34,7 @@ SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(VERSION ${version}) SET(INC_DIR include) -SET(SVC_DIR svc) +SET(SVC_DIR svc/include) INCLUDE_DIRECTORIES(${INC_DIR} ${SVC_DIR}) diff --git a/packaging/capi-media-controller.spec b/packaging/capi-media-controller.spec index aa6312d..5d2ff2c 100755 --- a/packaging/capi-media-controller.spec +++ b/packaging/capi-media-controller.spec @@ -1,6 +1,6 @@ Name: capi-media-controller Summary: A media controller library in Tizen Native API -Version: 0.1.38 +Version: 0.1.39 Release: 1 Group: Multimedia/API License: Apache-2.0 diff --git a/svc/daemon/media_controller_main.c b/svc/daemon/media_controller_main.c index 691a50b..be6538e 100755 --- a/svc/daemon/media_controller_main.c +++ b/svc/daemon/media_controller_main.c @@ -17,8 +17,8 @@ #include #include "media_controller_private.h" -#include "../media_controller_socket.h" -#include "../media_controller_svc.h" +#include "media_controller_socket.h" +#include "media_controller_svc.h" #include "media_controller_cynara.h" GMainLoop *g_mc_mainloop = NULL; diff --git a/svc/media_controller_cynara.h b/svc/include/media_controller_cynara.h similarity index 100% rename from svc/media_controller_cynara.h rename to svc/include/media_controller_cynara.h diff --git a/svc/media_controller_db_util.h b/svc/include/media_controller_db_util.h similarity index 83% rename from svc/media_controller_db_util.h rename to svc/include/media_controller_db_util.h index 78386ff..1e6d15c 100755 --- a/svc/media_controller_db_util.h +++ b/svc/include/media_controller_db_util.h @@ -26,7 +26,9 @@ #define MC_DB_TABLE_SERVER_LIST "server_list" #define MC_DB_TABLE_LATEST_SERVER "latest_server" -#define DB_SELECT_ALL_SERVER_LIST_EXCEPT_LATEST "SELECT name FROM SQLITE_MASTER WHERE type='table' AND (name != '%q') AND (name NOT IN (SELECT server_name FROM "MC_DB_TABLE_LATEST_SERVER"))" +#define DB_SELECT_ALL_SERVER_LIST_EXCEPT_LATEST "SELECT name FROM SQLITE_MASTER WHERE type='table' AND (name != '%q') AND (name NOT IN (SELECT server_name FROM "MC_DB_TABLE_LATEST_SERVER"));" +#define DB_SELECT_LATEST_SERVER "SELECT COUNT(*), server_name FROM "MC_DB_TABLE_LATEST_SERVER";" +#define DB_UPDATE_STATES "UPDATE '%q' SET server_state=%d, playback_state=%d;" #define SQLITE3_SAFE_FREE(sql_string) {if (sql_string) {sqlite3_free(sql_string); sql_string = NULL; } } #define SQLITE3_FINALIZE(x) {if (x != NULL) sqlite3_finalize(x); } @@ -36,5 +38,6 @@ int mc_db_util_disconnect(void *handle); int mc_db_util_create_tables(void *handle); int mc_db_util_update_db(void *handle, const char *sql_str); int mc_db_util_delete_whole_server_tables(void *handle); +int mc_db_util_init_latest_server_table(void *handle); #endif /*__TIZEN_MEDIA_CONTROLLER_DB_UTIL_H__*/ diff --git a/svc/media_controller_socket.h b/svc/include/media_controller_socket.h similarity index 100% rename from svc/media_controller_socket.h rename to svc/include/media_controller_socket.h diff --git a/svc/media_controller_svc.h b/svc/include/media_controller_svc.h similarity index 100% rename from svc/media_controller_svc.h rename to svc/include/media_controller_svc.h diff --git a/svc/media_controller_db_util.c b/svc/media_controller_db_util.c index a621ea4..dd1f86f 100755 --- a/svc/media_controller_db_util.c +++ b/svc/media_controller_db_util.c @@ -311,3 +311,60 @@ int mc_db_util_delete_whole_server_tables(void *handle) return ret; } + +int mc_db_util_init_latest_server_table(void *handle) +{ + int ret = MEDIA_CONTROLLER_ERROR_NONE; + sqlite3 *db_handle = (sqlite3 *)handle; + char *sql_str = NULL; + sqlite3_stmt *stmt = NULL; + char *latest_server_name = NULL; + + mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL"); + + /* Get latest server name */ + sql_str = sqlite3_mprintf(DB_SELECT_LATEST_SERVER); + mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null"); + + ret = sqlite3_prepare_v2(db_handle, sql_str, strlen(sql_str), &stmt, NULL); + if (SQLITE_OK != ret) { + mc_error("prepare error [%s]\n", sqlite3_errmsg(db_handle)); + SQLITE3_SAFE_FREE(sql_str); + return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; + } + + ret = sqlite3_step(stmt); + while (SQLITE_ROW == ret) { + if (sqlite3_column_int(stmt, 0) == 0) { + mc_debug("latest_server table does not exist"); + SQLITE3_FINALIZE(stmt); + SQLITE3_SAFE_FREE(sql_str); + return MEDIA_CONTROLLER_ERROR_NONE; + } + if (MC_STRING_VALID((const char *)sqlite3_column_text(stmt, 1))) { + latest_server_name = strdup((const char *)sqlite3_column_text(stmt, 1)); + mc_debug("latest_server_name: %s", latest_server_name); + } + ret = sqlite3_step(stmt); + } + + SQLITE3_FINALIZE(stmt); + SQLITE3_SAFE_FREE(sql_str); + + mc_retvm_if(latest_server_name == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "latest_server is not exist"); + + /* Update server_state and playbakc_state to 0 */ + sql_str = sqlite3_mprintf(DB_UPDATE_STATES, latest_server_name, MC_SERVER_STATE_NONE, MC_PLAYBACK_STATE_NONE); + mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null"); + + ret = mc_db_util_update_db(handle, sql_str); + if (ret != MEDIA_CONTROLLER_ERROR_NONE) { + mc_error("Error mc_db_util_update_db %d", ret); + SQLITE3_SAFE_FREE(sql_str); + return ret; + } + + SQLITE3_SAFE_FREE(sql_str); + + return ret; +} diff --git a/svc/media_controller_svc.c b/svc/media_controller_svc.c index 041af1e..209b41f 100755 --- a/svc/media_controller_svc.c +++ b/svc/media_controller_svc.c @@ -215,6 +215,12 @@ static int _mc_service_reset_db(uid_t uid) return res; } + /* Initialize latest server table */ + res = mc_db_util_init_latest_server_table(db_handle); + if (res != MEDIA_CONTROLLER_ERROR_NONE) { + mc_error("mc_db_util_create_tables failed [%d]", res); + } + /* Disconnect media controller DB*/ res = mc_db_util_disconnect(db_handle); if (res != MEDIA_CONTROLLER_ERROR_NONE) @@ -533,7 +539,7 @@ gboolean _mc_read_service_request_tcp_socket(GIOChannel *src, GIOCondition condi } else { req->permission = 2; } - } else { + } else { req->permission = 1; } -- 2.7.4