Make test client save its state and load it on startup

The save data goes to $XDG_CACHE_HOME/matrix-glib-sdk/base_url_sha1

Signed-off-by: Gergely Polonkai <gergely@polonkai.eu>
This commit is contained in:
Gergely Polonkai 2016-03-21 10:39:16 +00:00
parent 33bb63e4f1
commit d9a032ac28

View File

@ -33,13 +33,50 @@ static GOptionEntry entries[] = {
{G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &homeserver, "The homeserver to connect to", "homeserver"}, {G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &homeserver, "The homeserver to connect to", "homeserver"},
}; };
static gchar *
save_file_name(MatrixClient *client)
{
const gchar *base_url = matrix_http_api_get_base_url(
MATRIX_HTTP_API(client));
gchar *filename = g_compute_checksum_for_string(
G_CHECKSUM_SHA1, base_url, -1);
gchar *dir = g_strdup_printf("%s/matrix-glib-sdk", g_get_user_cache_dir());
gchar *full_fn = g_strdup_printf("%s/%s", dir, filename);
g_mkdir_with_parents(dir);
g_free(dir);
g_free(filename);
return full_fn;
}
static void
save_state(MatrixClient *client)
{
gchar *filename = save_file_name(client);
matrix_client_save_state(client, filename, NULL);
g_free(filename);
}
static void
load_state(MatrixClient *client)
{
gchar *filename = save_file_name(client);
matrix_client_load_state(client, filename, NULL);
g_printf("Token loaded: %s\n", matrix_api_get_token(MATRIX_API(client)));
g_free(filename);
}
void void
login_finished(MatrixClient *client, gboolean success, GMainLoop *loop) login_finished(MatrixClient *client, gboolean success, GMainLoop *loop)
{ {
g_printerr("Login %s.\n", (success) ? "succesful" : "failed"); g_printerr("Login %s.\n", (success) ? "succesful" : "failed");
if (success) { if (success) {
matrix_client_begin_polling(client, NULL); save_state(client);
} else { } else {
g_main_loop_quit(loop); g_main_loop_quit(loop);
} }
@ -134,7 +171,13 @@ main(int argc, char *argv[])
matrix_client_connect_event(client, MATRIX_EVENT_TYPE_ROOM_MESSAGE, matrix_client_connect_event(client, MATRIX_EVENT_TYPE_ROOM_MESSAGE,
cb_room_message_event, NULL, NULL); cb_room_message_event, NULL, NULL);
load_state(client);
if (matrix_api_get_token(MATRIX_API(client)) == NULL) {
matrix_client_login_with_password(client, user, password, NULL); matrix_client_login_with_password(client, user, password, NULL);
} else {
matrix_client_begin_polling(client, NULL);
}
g_main_loop_run(loop); g_main_loop_run(loop);