Create setter for MatrixAPI.user_id and MatrixAPI.homeserver

This commit is contained in:
Gergely Polonkai 2018-02-28 11:11:00 +01:00
parent b0bb97c804
commit 8831f808bb
6 changed files with 63 additions and 22 deletions

View File

@ -71,7 +71,9 @@ matrix_api_media_upload
matrix_api_get_token
matrix_api_set_token
matrix_api_get_user_id
matrix_api_set_user_id
matrix_api_get_homeserver
matrix_api_set_homeserver
<SUBSECTION Standard>
MatrixAPI
MATRIX_TYPE_API

View File

@ -101,7 +101,9 @@
* @get_token: the virtual function pointer to matrix_api_get_token()
* @set_token: the virtual function pointer to matrix_api_set_token()
* @get_user_id: the virtual function pointer to matrix_api_get_user_id()
* @set_user_id: the virtual function pointer to matrix_api_set_user_id()
* @get_homeserver: the virtual function pointer to matrix_api_get_homeserver()
* @set_homeserver: the virtual function pointer to matrix_api_set_homeserver()
*
* The virtual function table for for #MatrixAPI.
*/
@ -1935,6 +1937,21 @@ matrix_api_get_user_id(MatrixAPI *matrix_api)
return MATRIX_API_GET_IFACE(matrix_api)->get_user_id(matrix_api);
}
/**
* matrix_api_set_user_id:
* @api: a #MatrixAPI
* @user_id: (nullable): a Matrix ID
*
* Set the user ID of the user logged in using @api. This might be useful for restoring state.
*/
void
matrix_api_set_user_id(MatrixAPI *matrix_api, const gchar *user_id)
{
g_return_if_fail(matrix_api != NULL);
MATRIX_API_GET_IFACE(matrix_api)->set_user_id(matrix_api, user_id);
}
/**
* matrix_api_get_homeserver:
* @api: a #MatrixAPI
@ -1953,6 +1970,22 @@ matrix_api_get_homeserver(MatrixAPI *matrix_api)
return MATRIX_API_GET_IFACE(matrix_api)->get_homeserver(matrix_api);
}
/**
* matrix_api_set_homeserver:
* @api: a #MatrixAPI
* @homeserver: (nullable): a homeserver name
*
* Set the name of the homeserver, as it calls itself. This might be useful for
* restoring state.
*/
void
matrix_api_set_homeserver(MatrixAPI *api, const gchar *homeserver)
{
g_return_if_fail(api != NULL);
MATRIX_API_GET_IFACE(api)->set_homeserver(api, homeserver);
}
static void
matrix_api_default_init(MatrixAPIInterface *iface)
{

View File

@ -456,7 +456,9 @@ struct _MatrixAPIInterface {
const gchar *(*get_token)(MatrixAPI *api);
void (*set_token)(MatrixAPI *api, const gchar *token);
const gchar *(*get_user_id)(MatrixAPI *api);
void (*set_user_id)(MatrixAPI *api, const gchar *user_id);
const gchar *(*get_homeserver)(MatrixAPI *api);
void (*set_homeserver)(MatrixAPI *api, const gchar *homeserver);
};
void matrix_api_abort_pending(MatrixAPI *api);
@ -875,7 +877,9 @@ void matrix_api_media_upload(MatrixAPI *api,
const gchar *matrix_api_get_token(MatrixAPI *api);
void matrix_api_set_token(MatrixAPI *api, const gchar *token);
const gchar *matrix_api_get_user_id(MatrixAPI *api);
void matrix_api_set_user_id(MatrixAPI *api, const gchar *user_id);
const gchar *matrix_api_get_homeserver(MatrixAPI *api);
void matrix_api_set_homeserver(MatrixAPI *api, const gchar *homeserver);
G_END_DECLS

View File

@ -51,6 +51,8 @@ typedef struct {
SoupURI *api_uri;
SoupURI *media_uri;
gchar *token;
gchar *homeserver;
gchar *user_id;
} MatrixHTTPAPIPrivate;
static void matrix_http_api_matrix_api_interface_init(MatrixAPIInterface * iface);
@ -216,8 +218,8 @@ _matrix_http_api_response_callback(SoupSession *session, SoupMessage *msg, gpoin
g_debug("Our home server calls itself %s", homeserver);
#endif
g_free(matrix_http_api->_homeserver);
matrix_http_api->_homeserver = g_strdup(homeserver);
g_free(priv->homeserver);
priv->homeserver = g_strdup(homeserver);
}
/* Check if the response holds a user ID; if it does,
@ -229,8 +231,8 @@ _matrix_http_api_response_callback(SoupSession *session, SoupMessage *msg, gpoin
g_debug("We are reported to be logged in as %s", user_id);
#endif
g_free(matrix_http_api->_user_id);
matrix_http_api->_user_id = g_strdup(user_id);
g_free(priv->user_id);
priv->user_id = g_strdup(user_id);
}
/* Check if the response holds an error */
@ -2231,11 +2233,11 @@ matrix_http_api_set_base_url(MatrixHTTPAPI *matrix_http_api, const gchar *base_u
priv->base_url = g_strdup(base_url);
g_free(priv->token);
g_free(matrix_http_api->_homeserver);
g_free(matrix_http_api->_user_id);
priv->token = NULL;
matrix_http_api->_homeserver = NULL;
matrix_http_api->_user_id = NULL;
g_free(priv->homeserver);
g_free(priv->user_id);
priv->homeserver = NULL;
priv->user_id = NULL;
#if DEBUG
gchar *uri;
@ -2287,7 +2289,9 @@ matrix_http_api_set_validate_certificate(MatrixHTTPAPI *matrix_http_api, gboolea
static const gchar *
matrix_http_api_get_user_id (MatrixAPI *api)
{
return MATRIX_HTTP_API(matrix_api)->_user_id;
MatrixHTTPAPIPrivate *priv = matrix_http_api_get_instance_private(MATRIX_HTTP_API(api));
return priv->user_id;
}
static const gchar *
@ -2313,13 +2317,14 @@ matrix_http_api_set_token(MatrixAPI *matrix_api, const gchar *token)
static const gchar *
matrix_http_api_get_homeserver(MatrixAPI *api) {
return MATRIX_HTTP_API(api)->_homeserver;
MatrixHTTPAPIPrivate *priv = matrix_http_api_get_instance_private(MATRIX_HTTP_API(api));
return priv->homeserver;
}
static void
matrix_http_api_finalize(GObject *gobject)
{
MatrixHTTPAPI *matrix_http_api = MATRIX_HTTP_API(gobject);
MatrixHTTPAPIPrivate *priv = matrix_http_api_get_instance_private(MATRIX_HTTP_API(gobject));
g_object_unref(priv->soup_session);
@ -2333,9 +2338,9 @@ matrix_http_api_finalize(GObject *gobject)
soup_uri_free(priv->media_uri);
}
g_free(matrix_http_api->_user_id);
g_free(priv->token);
g_free(matrix_http_api->_homeserver);
g_free(priv->user_id);
g_free(priv->homeserver);
G_OBJECT_CLASS(matrix_http_api_parent_class)->finalize(gobject);
}
@ -2531,4 +2536,6 @@ matrix_http_api_init(MatrixHTTPAPI *matrix_http_api)
priv->api_uri = NULL;
priv->media_uri = NULL;
priv->token = NULL;
priv->homeserver = NULL;
priv->user_id = NULL;
}

View File

@ -37,9 +37,6 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(MatrixHTTPAPI, g_object_unref)
struct _MatrixHTTPAPI {
GObject parent_instance;
gchar *_homeserver;
gchar *_user_id;
};
struct _MatrixHTTPAPIClass {

View File

@ -802,20 +802,18 @@ matrix_http_client_real_load_state(MatrixClient *matrix_client, const gchar *fil
matrix_http_api_set_validate_certificate(MATRIX_HTTP_API(matrix_client), json_node_get_boolean(node));
if ((node = json_object_get_member(root, "user_id")) != NULL) {
g_free(MATRIX_HTTP_API(matrix_client)->_user_id);
MATRIX_HTTP_API(matrix_client)->_user_id = g_strdup(json_node_get_string(node));
matrix_api_set_user_id(MATRIX_API(matrix_client), json_node_get_string(node));
#if DEBUG
g_debug("Loaded user ID %s", MATRIX_HTTP_API(matrix_client)->_user_id);
g_debug("Loaded user ID %s", matrix_api_get_user_id(MATRIX_API(matrix_client)));
#endif
}
if ((node = json_object_get_member(root, "homeserver_name")) != NULL) {
g_free(MATRIX_HTTP_API(matrix_client)->_homeserver);
MATRIX_HTTP_API(matrix_client)->_homeserver = g_strdup(json_node_get_string(node));
matrix_api_set_homeserver(MATRIX_API(matrix_client), json_node_get_string(node));
#if DEBUG
g_debug("Loaded homeserver name %s", MATRIX_HTTP_API(matrix_client)->_homeserver);
g_debug("Loaded homeserver name %s", matrix_api_get_homeserver(MATRIX_API(matrix_client)));
#endif
}