aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/purple/purple.c
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 /protocols/purple/purple.c
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.
Diffstat (limited to 'protocols/purple/purple.c')
-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);