libpurple/account.c

changeset 41318
56092ffeae95
parent 41314
0dc72eacd8bf
child 41392
b5c84f55d5d2
--- a/libpurple/account.c	Thu Mar 31 22:53:18 2022 -0500
+++ b/libpurple/account.c	Fri Apr 01 01:09:23 2022 -0500
@@ -141,6 +141,7 @@
 	PROP_USER_INFO,
 	PROP_BUDDY_ICON_PATH,
 	PROP_REMEMBER_PASSWORD,
+	PROP_PROXY_INFO,
 	PROP_LAST
 };
 
@@ -562,7 +563,7 @@
  * XmlNode Helpers
  *****************************************************************************/
 static PurpleXmlNode *
-proxy_settings_to_xmlnode(const PurpleProxyInfo *proxy_info)
+proxy_settings_to_xmlnode(PurpleProxyInfo *proxy_info)
 {
 	PurpleXmlNode *node, *child;
 	PurpleProxyType proxy_type;
@@ -576,15 +577,15 @@
 
 	child = purple_xmlnode_new_child(node, "type");
 	purple_xmlnode_insert_data(child,
-			(proxy_type == PURPLE_PROXY_USE_GLOBAL ? "global" :
-			 proxy_type == PURPLE_PROXY_NONE       ? "none"   :
-			 proxy_type == PURPLE_PROXY_HTTP       ? "http"   :
-			 proxy_type == PURPLE_PROXY_SOCKS4     ? "socks4" :
-			 proxy_type == PURPLE_PROXY_SOCKS5     ? "socks5" :
-			 proxy_type == PURPLE_PROXY_TOR        ? "tor" :
-			 proxy_type == PURPLE_PROXY_USE_ENVVAR ? "envvar" : "unknown"), -1);
-
-	if ((value = purple_proxy_info_get_host(proxy_info)) != NULL)
+			(proxy_type == PURPLE_PROXY_TYPE_USE_GLOBAL ? "global" :
+			 proxy_type == PURPLE_PROXY_TYPE_NONE       ? "none"   :
+			 proxy_type == PURPLE_PROXY_TYPE_HTTP       ? "http"   :
+			 proxy_type == PURPLE_PROXY_TYPE_SOCKS4     ? "socks4" :
+			 proxy_type == PURPLE_PROXY_TYPE_SOCKS5     ? "socks5" :
+			 proxy_type == PURPLE_PROXY_TYPE_TOR        ? "tor" :
+			 proxy_type == PURPLE_PROXY_TYPE_USE_ENVVAR ? "envvar" : "unknown"), -1);
+
+	if ((value = purple_proxy_info_get_hostname(proxy_info)) != NULL)
 	{
 		child = purple_xmlnode_new_child(node, "host");
 		purple_xmlnode_insert_data(child, value, -1);
@@ -701,7 +702,7 @@
 {
 	PurpleXmlNode *node, *child;
 	const char *tmp;
-	const PurpleProxyInfo *proxy_info;
+	PurpleProxyInfo *proxy_info;
 	PurpleAccountPrivate *priv = purple_account_get_instance_private(account);
 
 	node = purple_xmlnode_new("account");
@@ -806,6 +807,9 @@
 			purple_account_set_remember_password(account,
 					g_value_get_boolean(value));
 			break;
+		case PROP_PROXY_INFO:
+			purple_account_set_proxy_info(account, g_value_get_object(value));
+			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
 			break;
@@ -849,6 +853,9 @@
 			g_value_set_boolean(value,
 					purple_account_get_remember_password(account));
 			break;
+		case PROP_PROXY_INFO:
+			g_value_set_object(value, purple_account_get_proxy_info(account));
+			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
 			break;
@@ -968,8 +975,7 @@
 
 	purple_account_set_status_types(account, NULL);
 
-	if (priv->proxy_info)
-		purple_proxy_info_destroy(priv->proxy_info);
+	g_clear_object(&priv->proxy_info);
 
 	if (priv->current_error) {
 		g_free(priv->current_error->description);
@@ -1056,6 +1062,12 @@
 				G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
 				G_PARAM_STATIC_STRINGS);
 
+	properties[PROP_PROXY_INFO] = g_param_spec_object(
+		"proxy-info", "proxy-info",
+		"The PurpleProxyInfo for this account.",
+		PURPLE_TYPE_PROXY_INFO,
+		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
 
@@ -1650,12 +1662,12 @@
 
 	priv = purple_account_get_instance_private(account);
 
-	if (priv->proxy_info != NULL)
-		purple_proxy_info_destroy(priv->proxy_info);
-
-	priv->proxy_info = info;
-
-	purple_accounts_schedule_save();
+	if(g_set_object(&priv->proxy_info, info)) {
+		g_object_notify_by_pspec(G_OBJECT(account),
+		                         properties[PROP_PROXY_INFO]);
+
+		purple_accounts_schedule_save();
+	}
 }
 
 void

mercurial