aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2016-04-25 19:26:51 +0200
committerMarius Halden <marius.h@lden.org>2016-05-07 14:31:03 +0200
commit55ae34366cc42a3c1822718b47b4b65eb67c014b (patch)
treef025cdd091cc53fb0167424480dccd1fadc3b747
parent5c743e0ed30650c40a3989bb9e13563dfffeeaaf (diff)
Save password for purple accounts on logout if password is missing or if
it has changed, this is useful for accounts using oauth e.g. purple-hangouts.
-rw-r--r--protocols/purple/purple.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/protocols/purple/purple.c b/protocols/purple/purple.c
index 11a7eac6..2b3a09a3 100644
--- a/protocols/purple/purple.c
+++ b/protocols/purple/purple.c
@@ -278,6 +278,18 @@ static void purple_init(account_t *acc)
purple_accounts_remove(pa);
}
+static void purple_save_password(account_t *acc, PurpleAccount *pa)
+{
+ char *old_password, *new_password;
+
+ old_password = set_getstr(&acc->set, "password");
+ new_password = g_strdup(purple_account_get_password(pa));
+ if (!old_password || !*old_password || g_strcmp0(old_password, new_password) != 0) {
+ set_setstr(&acc->set, "password", new_password);
+ }
+ g_free(new_password);
+}
+
static void purple_sync_settings(account_t *acc, PurpleAccount *pa)
{
PurplePlugin *prpl = purple_plugins_find_with_id(pa->protocol_id);
@@ -365,6 +377,8 @@ static void purple_logout(struct im_connection *ic)
imcb_chat_free(ic->groupchats->data);
}
+ purple_save_password(ic->acc, pd->account);
+
purple_account_set_enabled(pd->account, "BitlBee", FALSE);
purple_connections = g_slist_remove(purple_connections, ic);
purple_accounts_remove(pd->account);