From: hj kim Date: Thu, 9 May 2019 07:59:11 +0000 (+0900) Subject: Save latest server status by using vconf X-Git-Tag: accepted/tizen/unified/20190513.082541~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8387338dc1c1c66d480d073cc5b15c314243ebe2;p=platform%2Fcore%2Fapi%2Fmedia-controller.git Save latest server status by using vconf Some clients want to get latest server information before mc_create_client(). Because mc_create_client() takes some time. To reduce the delay, we support vconf. Change-Id: I372191d0ec01c91041f05a55af238611eab14fca --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 49cc99e..992d96c 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ SET(submodule "controller") SET(fw_name "${project_prefix}-${service}-${submodule}") # for package file -SET(dependents "capi-base-common glib-2.0 gio-2.0 dlog sqlite3 aul bundle libtzplatform-config cynara-client cynara-session cynara-creds-socket uuid") +SET(dependents "capi-base-common glib-2.0 gio-2.0 dlog sqlite3 aul bundle libtzplatform-config cynara-client cynara-session cynara-creds-socket uuid vconf") SET(pc_dependents "capi-base-common bundle") PROJECT(${fw_name}) diff --git a/include/media_controller_db.h b/include/media_controller_db.h index a67486e..27b9260 100644 --- a/include/media_controller_db.h +++ b/include/media_controller_db.h @@ -50,7 +50,6 @@ int mc_db_get_playlist_item(void *handle, const char *server_name, char *playlis int mc_db_foreach_server_list(void *handle, mc_activated_server_cb callback, void *user_data); int mc_db_foreach_client_list(void *handle, mc_activated_client_cb callback, void *user_data); -int mc_db_update_server_and_playback_state(const char *server_name, mc_server_state_e server_state, mc_playback_states_e playback_state); int mc_db_update_latest_server_table(const char *server_name); int mc_db_remove_playlist(const char *server_name, const char *playlist_name); int mc_db_update_playlist(const char *server_name, const char *playlist_name, GList *query_list); diff --git a/include/media_controller_private.h b/include/media_controller_private.h index ac68729..8521f6d 100644 --- a/include/media_controller_private.h +++ b/include/media_controller_private.h @@ -196,7 +196,6 @@ extern "C" { #define MC_DB_CMD_UPDATE_PLAYBACK "DB_CMD_UPDATE_PLAYBACK" /* Update Server Playback info*/ -#define MC_DB_CMD_UPDATE_STATE_PLAYBACK "DB_CMD_UPDATE_STATE_PLAYBACK" /* Update Server State and Playback state*/ #define MC_DB_CMD_UPDATE_META "DB_CMD_UPDATE_META" /* Update Server Meta info*/ #define MC_DB_CMD_UPDATE_SHUFFLE "DB_CMD_UPDATE_SHUFFLE" /* Update Server Shuffle mode*/ #define MC_DB_CMD_UPDATE_REPEAT "DB_CMD_UPDATE_REPEAT" /* Update Server Repeat mode*/ diff --git a/packaging/capi-media-controller.spec b/packaging/capi-media-controller.spec index 05b7a31..725abd2 100644 --- a/packaging/capi-media-controller.spec +++ b/packaging/capi-media-controller.spec @@ -23,6 +23,7 @@ BuildRequires: pkgconfig(cynara-client) BuildRequires: pkgconfig(cynara-session) BuildRequires: pkgconfig(uuid) BuildRequires: pkgconfig(capi-appfw-app-control) +BuildRequires: pkgconfig(vconf) # socket activation enable(1), disable(0) %if "%{tizen_profile_name}" == "tv" diff --git a/src/media_controller_db.c b/src/media_controller_db.c index 632ac4d..f293369 100644 --- a/src/media_controller_db.c +++ b/src/media_controller_db.c @@ -207,7 +207,7 @@ int mc_db_update_playback_info(const char *server_name, const media_controller_p _query = sqlite3_mprintf("UPDATE '%q' SET playback_state=%d, playback_position=%llu, playlist_name=%Q, playlist_index=%Q, playback_content_type=%d, age_rating=%d;", server_name, playback.state, playback.position, playback.playlist_name, playback.index, playback.content_type, playback.age_rating); - sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_UPDATE_PLAYBACK, MC_STRING_DELIMITER, _query); + sql_str = g_strdup_printf("%s%s%s%s%d%s%s", MC_DB_CMD_UPDATE_PLAYBACK, MC_STRING_DELIMITER, server_name, MC_STRING_DELIMITER, playback.state, MC_STRING_DELIMITER, _query); ret = __mc_db_update_db(MC_PRIV_TYPE_SERVER, sql_str); @@ -974,22 +974,6 @@ int mc_db_foreach_client_list(void *handle, mc_activated_client_cb callback, voi return MEDIA_CONTROLLER_ERROR_NONE; } -int mc_db_update_server_and_playback_state(const char *server_name, mc_server_state_e server_state, mc_playback_states_e playback_state) -{ - int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; - - mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name"); - - sql_str = g_strdup_printf("%s%s%s%s%d%s%d", MC_DB_CMD_UPDATE_STATE_PLAYBACK, MC_STRING_DELIMITER, server_name, MC_STRING_DELIMITER, server_state, MC_STRING_DELIMITER, playback_state); - - ret = __mc_db_update_db(MC_PRIV_TYPE_SERVER, sql_str); - - MC_SAFE_FREE(sql_str); - - return ret; -} - int mc_db_update_latest_server_table(const char *server_name) { int ret = MEDIA_CONTROLLER_ERROR_NONE; diff --git a/svc/media_controller_db_util.c b/svc/media_controller_db_util.c index 302112d..d63b367 100644 --- a/svc/media_controller_db_util.c +++ b/svc/media_controller_db_util.c @@ -19,6 +19,7 @@ #include #include #include +#include #include "media_controller_private.h" #include "media_controller_db_util.h" @@ -296,6 +297,40 @@ static gboolean __mc_db_is_latest(void *handle, const char *server_name) return is_latest; } +static int __mc_update_latest_server_info(void *handle, const char *server_name, mc_server_state_e server_state, mc_playback_states_e playback_state, gboolean update_server_name) +{ + int ret = MEDIA_CONTROLLER_ERROR_NONE; + char *sql_str = NULL; + + mc_retvm_if(!MC_STRING_VALID(server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid server_name"); + + mc_secure_debug("server_name [%s], server_state [%d], playback_state [%d] update_server_name[%d]", server_name, server_state, playback_state, update_server_name); + + /* Update DB */ + if (handle) { + sql_str = sqlite3_mprintf(DB_UPDATE_STATE_PLAYBACK, server_name, server_state, playback_state); + ret = mc_db_util_update_db(handle, sql_str); + SQLITE3_SAFE_FREE(sql_str); + mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to mc_db_util_update_db [%d]", ret); + } + + /* Update vconf */ + if (update_server_name) { + ret = vconf_set_str(VCONFKEY_MEDIA_CONTROLLER_LATEST_SERVER_NAME, server_name); + if (ret != VCONF_OK) + mc_error("fail to set latest server name [%d]", ret); + } + + ret = vconf_set_int(VCONFKEY_MEDIA_CONTROLLER_LATEST_SERVER_STATE, server_state); + if (ret != VCONF_OK) + mc_error("fail to set latest server state [%d]", ret); + + ret = vconf_set_int(VCONFKEY_MEDIA_CONTROLLER_LATEST_SERVER_PLAYBACK_STATE, playback_state); + if (ret != VCONF_OK) + mc_error("fail to set latest server playback state [%d]", ret); + + return ret; +} static int __mc_update_dead_server(void *handle, const char *server_name) { @@ -308,18 +343,13 @@ static int __mc_update_dead_server(void *handle, const char *server_name) /* Update server_state to deactivated, if the server is latest. * Drop the table of server_name, if it is not latest. */ - if (__mc_db_is_latest(handle, server_name)) - sql_str = sqlite3_mprintf(DB_UPDATE_STATE_PLAYBACK, server_name, MC_SERVER_STATE_DEACTIVATE, MC_PLAYBACK_STATE_STOPPED); - else + if (__mc_db_is_latest(handle, server_name)) { + ret = __mc_update_latest_server_info(handle, server_name, MC_SERVER_STATE_DEACTIVATE, MC_PLAYBACK_STATE_STOPPED, FALSE); + } else { sql_str = sqlite3_mprintf(DB_DROP_TABLE, server_name); - - 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_secure_error("Error mc_db_util_update_db %d", ret); - - SQLITE3_SAFE_FREE(sql_str); + ret = mc_db_util_update_db(handle, sql_str); + SQLITE3_SAFE_FREE(sql_str); + } return ret; } @@ -530,7 +560,6 @@ int mc_db_util_delete_whole_server_tables(void *handle) int mc_db_util_init_latest_server_table(void *handle) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; char *latest_server_name = NULL; mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL"); @@ -540,13 +569,8 @@ int mc_db_util_init_latest_server_table(void *handle) mc_retvm_if(latest_server_name == NULL, MEDIA_CONTROLLER_ERROR_NONE, "[No-Error] latest_server does not exist"); /* Update server_state and playback_state to 0 */ - sql_str = sqlite3_mprintf(DB_UPDATE_STATE_PLAYBACK, latest_server_name, MC_SERVER_STATE_DEACTIVATE, MC_PLAYBACK_STATE_STOPPED); + ret = __mc_update_latest_server_info(handle, latest_server_name, MC_SERVER_STATE_DEACTIVATE, MC_PLAYBACK_STATE_STOPPED, FALSE); MC_SAFE_FREE(latest_server_name); - 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); - - SQLITE3_SAFE_FREE(sql_str); return ret; } @@ -557,7 +581,6 @@ int mc_db_parse_and_update_db(uid_t uid, const char *data, int data_size) char *sql_str = NULL; gchar **params = NULL; int i_value = 0; - int i_value_1 = 0; unsigned long long llu_value = 0, llu_value2 = 0; void* _db_handle = NULL; gboolean is_query_from_client = FALSE; @@ -574,20 +597,8 @@ int mc_db_parse_and_update_db(uid_t uid, const char *data, int data_size) goto ERROR; } - if (strncmp(MC_DB_CMD_UPDATE_STATE_PLAYBACK, params[0], strlen(MC_DB_CMD_UPDATE_STATE_PLAYBACK)) == 0) { - if (params[2] == NULL || params[3] == NULL) { - mc_error("wrong query"); - ret = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; - goto ERROR; - } - - mc_safe_strtoi(params[2], &i_value); - mc_safe_strtoi(params[3], &i_value_1); - - sql_str = sqlite3_mprintf(DB_UPDATE_STATE_PLAYBACK, params[1], i_value, i_value_1); - - } else if (strncmp(MC_DB_CMD_UPDATE_PLAYBACK, params[0], strlen(MC_DB_CMD_UPDATE_PLAYBACK)) == 0) { - sql_str = params[1]; + if (strncmp(MC_DB_CMD_UPDATE_PLAYBACK, params[0], strlen(MC_DB_CMD_UPDATE_PLAYBACK)) == 0) { + sql_str = params[3]; is_query_from_client = TRUE; } else if (strncmp(MC_DB_CMD_UPDATE_META, params[0], strlen(MC_DB_CMD_UPDATE_META)) == 0) { @@ -674,6 +685,17 @@ ERROR: if (ret != MEDIA_CONTROLLER_ERROR_NONE) mc_error("media_db_update_db error : %d", ret); + /* Update vconf */ + if (strncmp(MC_DB_CMD_UPDATE_LATEST, params[0], strlen(MC_DB_CMD_UPDATE_LATEST)) == 0) { + ret = __mc_update_latest_server_info(NULL, params[1], MC_SERVER_STATE_ACTIVATE, MC_PLAYBACK_STATE_PLAYING, TRUE); + + } else if (strncmp(MC_DB_CMD_UPDATE_PLAYBACK, params[0], strlen(MC_DB_CMD_UPDATE_PLAYBACK)) == 0) { + if (__mc_db_is_latest(_db_handle, params[1])) { + mc_safe_strtoi(params[2], &i_value); + ret = __mc_update_latest_server_info(NULL, params[1], MC_SERVER_STATE_ACTIVATE, i_value, FALSE); + } + } + mc_db_disconnect(_db_handle); if (!is_query_from_client) @@ -698,26 +720,18 @@ int mc_db_util_activate_server_table(uid_t uid, const char *app_id) ret = mc_db_connect(&_db_handle, uid, TRUE); if (ret != MEDIA_CONTROLLER_ERROR_NONE) { mc_error("mc_db_connect error : %d", ret); - goto ERROR; + mc_db_disconnect(_db_handle); + return ret; } - if (__mc_db_is_latest(_db_handle, app_id)) - sql_str = sqlite3_mprintf(DB_UPDATE_STATE_PLAYBACK, app_id, MC_SERVER_STATE_ACTIVATE, MC_PLAYBACK_STATE_STOPPED); - else + if (__mc_db_is_latest(_db_handle, app_id)) { + ret = __mc_update_latest_server_info(_db_handle, app_id, MC_SERVER_STATE_ACTIVATE, MC_PLAYBACK_STATE_STOPPED, FALSE); + } else { sql_str = sqlite3_mprintf(DB_CREATE_SERVER_TABLE, app_id, app_id, DB_META_FIELD, app_id, app_id); - - if (sql_str == NULL) { - mc_error("sql_str is NULL"); - ret = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY; - goto ERROR; + ret = mc_db_util_update_db(_db_handle, sql_str); + SQLITE3_SAFE_FREE(sql_str); } - ret = mc_db_util_update_db(_db_handle, sql_str); - if (ret != MEDIA_CONTROLLER_ERROR_NONE) - mc_error("media_db_update_db error : %d", ret); - -ERROR: - SQLITE3_SAFE_FREE(sql_str); mc_db_disconnect(_db_handle); mc_debug_fleave(); @@ -738,26 +752,18 @@ int mc_db_util_deactivate_server_table(uid_t uid, const char *app_id) ret = mc_db_connect(&_db_handle, uid, TRUE); if (ret != MEDIA_CONTROLLER_ERROR_NONE) { mc_error("mc_db_connect error : %d", ret); - goto ERROR; + mc_db_disconnect(_db_handle); + return ret; } - if (__mc_db_is_latest(_db_handle, app_id)) - sql_str = sqlite3_mprintf(DB_UPDATE_STATE_PLAYBACK, app_id, MC_SERVER_STATE_DEACTIVATE, MC_PLAYBACK_STATE_STOPPED); - else + if (__mc_db_is_latest(_db_handle, app_id)) { + ret = __mc_update_latest_server_info(_db_handle, app_id, MC_SERVER_STATE_DEACTIVATE, MC_PLAYBACK_STATE_STOPPED, FALSE); + } else { sql_str = sqlite3_mprintf(DB_DROP_TABLE, app_id); - - if (sql_str == NULL) { - mc_error("sql_str is NULL"); - ret = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY; - goto ERROR; + ret = mc_db_util_update_db(_db_handle, sql_str); + SQLITE3_SAFE_FREE(sql_str); } - ret = mc_db_util_update_db(_db_handle, sql_str); - if (ret != MEDIA_CONTROLLER_ERROR_NONE) - mc_error("media_db_update_db error : %d", ret); - -ERROR: - SQLITE3_SAFE_FREE(sql_str); mc_db_disconnect(_db_handle); mc_debug_fleave();