Save latest server status by using vconf 94/205794/4
authorhj kim <backto.kim@samsung.com>
Thu, 9 May 2019 07:59:11 +0000 (16:59 +0900)
committerhj kim <backto.kim@samsung.com>
Thu, 9 May 2019 09:18:56 +0000 (18:18 +0900)
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

CMakeLists.txt
include/media_controller_db.h
include/media_controller_private.h
packaging/capi-media-controller.spec
src/media_controller_db.c
svc/media_controller_db_util.c

index 49cc99e..992d96c 100755 (executable)
@@ -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})
index a67486e..27b9260 100644 (file)
@@ -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);
index ac68729..8521f6d 100644 (file)
@@ -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*/
index 05b7a31..725abd2 100644 (file)
@@ -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"
index 632ac4d..f293369 100644 (file)
@@ -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;
index 302112d..d63b367 100644 (file)
@@ -19,6 +19,7 @@
 #include <sqlite3.h>
 #include <tzplatform_config.h>
 #include <gio/gio.h>
+#include <vconf.h>
 
 #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();