--- a/libpurple/account.c Thu May 19 23:08:59 2022 -0500 +++ b/libpurple/account.c Fri May 20 01:34:32 2022 -0500 @@ -62,6 +62,7 @@ char *buddy_icon_path; /* The buddy icon's non-cached path. */ + gboolean enabled; gboolean remember_pass; /* Remember the password. */ /* @@ -317,7 +318,7 @@ request_password_cancel_cb(PurpleAccount *account, PurpleRequestFields *fields) { /* Disable the account as the user has cancelled connecting */ - purple_account_set_enabled(account, purple_core_get_ui(), FALSE); + purple_account_set_enabled(account, FALSE); } @@ -701,6 +702,7 @@ _purple_account_to_xmlnode(PurpleAccount *account) { PurpleXmlNode *node, *child; + gchar *data = NULL; const char *tmp; PurpleProxyInfo *proxy_info; PurpleAccountPrivate *priv = purple_account_get_instance_private(account); @@ -718,6 +720,11 @@ child = purple_xmlnode_new_child(node, "name"); purple_xmlnode_insert_data(child, purple_account_get_username(account), -1); + child = purple_xmlnode_new_child(node, "enabled"); + data = g_strdup_printf("%d", priv->enabled); + purple_xmlnode_insert_data(child, data, -1); + g_clear_pointer(&data, g_free); + if ((tmp = purple_account_get_private_alias(account)) != NULL) { child = purple_xmlnode_new_child(node, "alias"); @@ -787,8 +794,7 @@ purple_account_set_private_alias(account, g_value_get_string(value)); break; case PROP_ENABLED: - purple_account_set_enabled(account, purple_core_get_ui(), - g_value_get_boolean(value)); + purple_account_set_enabled(account, g_value_get_boolean(value)); break; case PROP_CONNECTION: purple_account_set_connection(account, g_value_get_object(value)); @@ -833,8 +839,7 @@ g_value_set_string(value, purple_account_get_private_alias(account)); break; case PROP_ENABLED: - g_value_set_boolean(value, purple_account_get_enabled(account, - purple_core_get_ui())); + g_value_set_boolean(value, purple_account_get_enabled(account)); break; case PROP_CONNECTION: g_value_set_object(value, purple_account_get_connection(account)); @@ -1092,6 +1097,7 @@ PURPLE_TYPE_ACCOUNT, "username", username, "protocol-id", protocol_id, + "enabled", FALSE, NULL); return account; @@ -1119,7 +1125,7 @@ username = purple_account_get_username(account); - if (!purple_account_get_enabled(account, purple_core_get_ui())) { + if (!purple_account_get_enabled(account)) { purple_debug_info("account", "Account %s not enabled, not connecting.\n", username); @@ -1620,21 +1626,19 @@ } void -purple_account_set_enabled(PurpleAccount *account, const char *ui, - gboolean value) -{ +purple_account_set_enabled(PurpleAccount *account, gboolean value) { PurpleConnection *gc; PurpleAccountPrivate *priv; gboolean was_enabled = FALSE; g_return_if_fail(PURPLE_IS_ACCOUNT(account)); - g_return_if_fail(ui != NULL); - - was_enabled = purple_account_get_enabled(account, ui); - - purple_account_set_ui_bool(account, ui, "auto-login", value); + + priv = purple_account_get_instance_private(account); + + was_enabled = priv->enabled; + priv->enabled = value; + gc = purple_account_get_connection(account); - if(was_enabled && !value) purple_signal_emit(purple_accounts_get_handle(), "account-disabled", account); else if(!was_enabled && value) @@ -1645,12 +1649,12 @@ if ((gc != NULL) && (_purple_connection_wants_to_die(gc))) return; - priv = purple_account_get_instance_private(account); - if (value && purple_presence_is_online(priv->presence)) purple_account_connect(account); else if (!value && !purple_account_is_disconnected(account)) purple_account_disconnect(account); + + purple_accounts_schedule_save(); } void @@ -2076,12 +2080,14 @@ } gboolean -purple_account_get_enabled(PurpleAccount *account, const char *ui) -{ +purple_account_get_enabled(PurpleAccount *account) { + PurpleAccountPrivate *priv = NULL; + g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), FALSE); - g_return_val_if_fail(ui != NULL, FALSE); - - return purple_account_get_ui_bool(account, ui, "auto-login", FALSE); + + priv = purple_account_get_instance_private(account); + + return priv->enabled; } PurpleProxyInfo *