- Problem: Users want to change their name.
- Cause: it is not supported to change the user name once user information
added to ua-manager DB.
- Solution: Make the user can change his name even user-information added.
Change-Id: I54901e5c24da13239e8cce7d35063d15ed6ca975
Signed-off-by: saerome.kim <saerome.kim@samsung.com>
int _uam_remove_user(char *account);
/**
+ * @brief Updates user info.
+ * @since_tizen 5.5
+ *
+ * @param[in] user User information.
+ *
+ * @return 0 on success, otherwise a negative error value
+ * @retval #UAM_ERROR_NONE Successful
+ * @retval #UAM_ERROR_INVALID_PARAMETER Invalid parameters
+ * @retval #UAM_ERROR_INTERNAL Internal error
+ *
+ * @exception
+ * @pre
+ * @post
+ */
+int _uam_update_user(uam_user_info_s *user);
+
+/**
* @brief Brings user information that meet the user account.
* @since_tizen 5.5
*
REQUEST(UAM_REQUEST_GET_DEFAULT_USER) \
REQUEST(UAM_REQUEST_ADD_USER) \
REQUEST(UAM_REQUEST_DELETE_USER) \
+ REQUEST(UAM_REQUEST_UPDATE_USER) \
REQUEST(UAM_REQUEST_GET_USER_BY_ACCOUNT) \
REQUEST(UAM_REQUEST_GET_USER_BY_DEVICE_ID) \
REQUEST(UAM_REQUEST_GET_USER_BY_MAC) \
Name: ua-manager
Summary: User awareness manager
-Version: 0.12.16
+Version: 0.12.17
Release: 1
License: Apache-2.0
Source0: %{name}-%{version}.tar.gz
-DLIB_PATH=%{_lib} \
-DFULLVER=%{version} \
-DMAJORVER=${MAJORVER} \
- -DDBPATH=%{database_full_pathi \
+ -DDBPATH=%{database_full_path} \
-DBUILD_GCOV=%{?gcov:1}%{!?gcov:0}} \
-DBUILD_GTESTS=%{?gtests:1}%{!?gtests:0}}
return ret;
}
+UAM_EXPORT_API int _uam_update_user(uam_user_info_s *user)
+{
+ FUNC_ENTRY;
+ int ret;
+
+ UAM_VALIDATE_INPUT_PARAMETER(user);
+
+ UAM_INIT_PARAMS();
+ UAM_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+
+ g_array_append_vals(in_param1, user, sizeof(uam_user_info_s));
+ ret = _uam_sync_request(UAM_REQUEST_UPDATE_USER,
+ in_param1, in_param2, in_param3, in_param4, &out_param);
+
+ UAM_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+
+ FUNC_EXIT;
+ return ret;
+}
+
UAM_EXPORT_API int _uam_request_get_user_by_account(char *account,
uam_user_info_s *user)
{
int _uam_core_remove_user(const char *account);
+int _uam_core_update_user(uam_user_info_s *user);
+
int _uam_core_add_device(const char *account, const uam_device_info_s *dev_info);
int _uam_core_remove_device(const char *account, const uam_device_info_s *dev_info);
/* insert */
int _uam_db_insert_user_info(int* user_id, const char *name, const char *account);
+/* update */
+int _uam_db_update_user_info(uam_db_user_info_t *user);
+
/* DEVICE QUERIES */
typedef struct {
int user_id;
return UAM_ERROR_NONE;
}
+int _uam_core_update_user(uam_user_info_s *user)
+{
+ FUNC_ENTRY;
+ GSList *l;
+ uam_db_user_info_t *user_info;
+
+ retv_if(NULL == user, UAM_ERROR_INVALID_PARAMETER);
+
+ /* Retrieve user from list */
+ l = g_slist_find_custom(users, user->account, __compare_user_account);
+ retv_if((NULL == l) || (l->data == NULL), UAM_ERROR_NOT_REGISTERED);
+
+ user_info = l->data;
+ g_strlcpy(user_info->name, user->name, UAM_USER_NAME_MAX_STRING_LEN);
+
+ /* Update user to database */
+ if (UAM_ERROR_NONE != _uam_db_update_user_info(user_info)) {
+ UAM_ERR("_uam_db_update_user_info failed");
+ return UAM_ERROR_DB_FAILED;
+ }
+
+ FUNC_EXIT;
+ return UAM_ERROR_NONE;
+}
+
int _uam_core_add_device(const char *account, const uam_device_info_s *dev_info)
{
FUNC_ENTRY;
result = _uam_core_remove_user(account);
break;
}
+ case UAM_REQUEST_UPDATE_USER: {
+ uam_user_info_s user;
+
+ __uam_manager_copy_params(in_param1,
+ &user, sizeof(uam_user_info_s));
+ UAM_DBG("Account: [%s] Name: [%s]", user.account, user.name);
+
+ result = _uam_core_update_user(&user);
+ break;
+
+ }
case UAM_REQUEST_GET_USER_BY_ACCOUNT: {
const char *account;
uam_user_info_s user;
case UAM_REQUEST_GET_DEFAULT_USER:
case UAM_REQUEST_ADD_USER:
case UAM_REQUEST_DELETE_USER:
+ case UAM_REQUEST_UPDATE_USER:
case UAM_REQUEST_GET_USER_BY_ACCOUNT:
case UAM_REQUEST_GET_USER_BY_DEVICE_ID:
case UAM_REQUEST_GET_USER_BY_MAC:
#include "ua-manager-common.h"
#include "ua-manager-database.h"
-#define SELECT_ALL_USERS_DATA "SELECT user_id, " \
- "name, account FROM userdata"
+#define SELECT_ALL_USERS_DATA "SELECT user_id, name, account FROM userdata"
-#define SELECT_USER_DATA "SELECT user_id, " \
- "name, account FROM userdata WHERE user_id = ?"
+#define SELECT_USER_DATA "SELECT user_id, name, account FROM userdata WHERE user_id = ?"
#define SELECT_MAX_USER_ID "SELECT MAX(user_id) FROM userdata"
-#define INSERT_USER_INFO "insert into userdata " \
- "(name, account)" \
- "values (?, ?)"
+#define INSERT_USER_INFO "insert into userdata (name, account) values (?, ?)"
#define DELETE_ALL_USERS_DATA "delete from userdata "
-#define DELETE_USER_INFO "delete from userdata " \
- "WHERE user_id = ? "
+#define DELETE_USER_INFO "delete from userdata WHERE user_id = ? "
+
+#define UPDATE_USER_INFO "UPDATE userdata SET name = ? WHERE account = ?"
/* DELETE statements */
static sqlite3_stmt *delete_all_users_data;
/* INSERT statements */
static sqlite3_stmt *insert_user_info;
+/* UPDATE statements */
+static sqlite3_stmt *update_user_info;
+
extern sqlite3 *database_handle;
static int max_user_id;
FUNC_EXIT;
}
+static void __uam_finalize_update(void)
+{
+ FUNC_ENTRY;
+
+ FINALIZE(update_user_info);
+
+ FUNC_EXIT;
+}
+
static int __uam_prepare_delete(sqlite3 *db)
{
FUNC_ENTRY;
return rc;
}
-static int __uam_prepare_update(sqlite3 *db)
+static int __uam_prepare_insert(sqlite3 *db)
{
FUNC_ENTRY;
- //TODO
+ int rc;
+ static int initialized;
+
+ if (initialized) {
+ FUNC_EXIT;
+ return SQLITE_OK;
+ }
+
+ PREPARE_QUERY(rc, db, insert_user_info,
+ INSERT_USER_INFO, __uam_finalize_insert);
+
+ initialized = 1;
FUNC_EXIT;
- return 0;
+ return rc;
}
-static int __uam_prepare_insert(sqlite3 *db)
+static int __uam_prepare_update(sqlite3 *db)
{
FUNC_ENTRY;
int rc;
return SQLITE_OK;
}
- PREPARE_QUERY(rc, db, insert_user_info,
- INSERT_USER_INFO, __uam_finalize_insert);
+ PREPARE_QUERY(rc, db, update_user_info,
+ UPDATE_USER_INFO, __uam_finalize_update);
initialized = 1;
FUNC_EXIT;
sqlite3_reset(stmt);
return error_code;
}
+
+int _uam_db_update_user_info(uam_db_user_info_t *user)
+{
+ FUNC_ENTRY;
+ int error_code = UAM_ERROR_NONE;
+ sqlite3_stmt *stmt = update_user_info;
+ int sql_ret = SQLITE_OK;
+
+ retv_if(NULL == user, UAM_ERROR_INVALID_PARAMETER);
+
+ UAM_INFO("%s-%s", user->account, user->name);
+
+ DB_ACTION(sqlite3_bind_text(stmt, 1, user->name, -1, SQLITE_TRANSIENT),
+ error_code, handle_error);
+ DB_ACTION(sqlite3_bind_text(stmt, 2, user->account, -1, SQLITE_TRANSIENT),
+ error_code, handle_error);
+
+ sql_ret = sqlite3_step(stmt);
+ if (sql_ret != SQLITE_DONE) {
+ UAM_ERR("Failed to update user info [%d:%s]",
+ sql_ret, sqlite3_errmsg(database_handle));
+ error_code = UAM_ERROR_DB_FAILED;
+ goto handle_error;
+ }
+
+ UAM_DBG("User info updated");
+
+handle_error:
+ sqlite3_reset(stmt);
+ FUNC_EXIT;
+ return error_code;
+}
+