Stub out our new modern XMPP implementation

Thu, 30 Nov 2023 22:18:04 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 30 Nov 2023 22:18:04 -0600
changeset 42529
f00a798a38a6
parent 42528
6aaf9a66f9d9
child 42530
55b30ce86f17

Stub out our new modern XMPP implementation

This doesn't do anything except show up in the protocol list.

Testing Done:
Verified the protocol showed up in the protocol list.

Reviewed at https://reviews.imfreedom.org/r/2856/

meson.build file | annotate | diff | comparison | revisions
protocols/meson.build file | annotate | diff | comparison | revisions
protocols/xmpp/meson.build file | annotate | diff | comparison | revisions
protocols/xmpp/purplexmppcore.c file | annotate | diff | comparison | revisions
protocols/xmpp/purplexmppcore.h file | annotate | diff | comparison | revisions
protocols/xmpp/purplexmppprotocol.c file | annotate | diff | comparison | revisions
protocols/xmpp/purplexmppprotocol.h file | annotate | diff | comparison | revisions
protocols/xmpp/resources/icons/16x16/apps/im-xmpp.png file | annotate | diff | comparison | revisions
protocols/xmpp/resources/icons/16x16/apps/scalable/im-xmpp.svg file | annotate | diff | comparison | revisions
protocols/xmpp/resources/icons/22x22/apps/im-xmpp.png file | annotate | diff | comparison | revisions
protocols/xmpp/resources/icons/22x22/apps/scalable/im-xmpp.svg file | annotate | diff | comparison | revisions
protocols/xmpp/resources/icons/48x48/apps/im-xmpp.png file | annotate | diff | comparison | revisions
protocols/xmpp/resources/icons/scalable/apps/im-xmpp.svg file | annotate | diff | comparison | revisions
protocols/xmpp/resources/xmpp.gresource.xml file | annotate | diff | comparison | revisions
subprojects/xeme.wrap file | annotate | diff | comparison | revisions
--- a/meson.build	Thu Nov 30 21:40:52 2023 -0600
+++ b/meson.build	Thu Nov 30 22:18:04 2023 -0600
@@ -288,9 +288,14 @@
 	endif
 endif
 
+#######################################################################
+# Check for Xeme XMPP Library
+#######################################################################
+xeme = dependency('xeme')
+
 dependency('shoes', required : false)
 
-DEFAULT_PRPLS = ['bonjour', 'demo', 'gg', 'ircv3', 'jabber']
+DEFAULT_PRPLS = ['bonjour', 'demo', 'gg', 'ircv3', 'jabber', 'xmpp']
 
 dynamic_list = get_option('dynamic-prpls').split(',')
 if dynamic_list == ['all']
@@ -300,10 +305,12 @@
 foreach prpl : dynamic_list
 	if prpl == ''
 		# The list was empty; do nothing.
-	elif prpl == 'bonjour' and not enable_avahi
+	elif prpl == 'bonjour' and not enable_avahi and not xeme.found()
 		# Do nothing.
 	elif prpl == 'gg' and not libgadu.found()
 		# Do nothing.
+	elif prpl == 'xmpp' and not xeme.found()
+		# Do nothing.
 	else
 		DYNAMIC_PRPLS += [prpl]
 	endif
@@ -314,7 +321,7 @@
 DYNAMIC_GG  = DYNAMIC_PRPLS.contains('gg')
 DYNAMIC_IRCV3 = DYNAMIC_PRPLS.contains('ircv3')
 DYNAMIC_JABBER = DYNAMIC_PRPLS.contains('jabber')
-
+DYNAMIC_XMPP = DYNAMIC_PRPLS.contains('xmpp')
 
 add_project_arguments(
     '-DPURPLE_DISABLE_DEPRECATED',
@@ -462,6 +469,7 @@
 subdir('purple-history')
 subdir('finch')
 subdir('pidgin')
+subdir('protocols')
 subdir('doc')
 subdir('po')
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/protocols/meson.build	Thu Nov 30 22:18:04 2023 -0600
@@ -0,0 +1,1 @@
+subdir('xmpp')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/protocols/xmpp/meson.build	Thu Nov 30 22:18:04 2023 -0600
@@ -0,0 +1,29 @@
+XMPP_SOURCES = [
+	'purplexmppcore.c',
+	'purplexmppprotocol.c',
+]
+
+XMPP_HEADERS = [
+	'purplexmppcore.h',
+	'purplexmppprotocol.h',
+]
+
+if not DYNAMIC_XMPP
+	subdir_done()
+endif
+
+xmpp_resources = gnome.compile_resources('xmppresource',
+	'resources/xmpp.gresource.xml',
+	source_dir : 'resources',
+	c_name : 'purple_xmpp')
+XMPP_SOURCES += xmpp_resources
+
+xmpp_prpl = library('xmpp',
+	XMPP_SOURCES + XMPP_HEADERS,
+	c_args : ['-DPURPLE_XMPP_COMPILATION', '-DG_LOG_USE_STRUCTURED', '-DG_LOG_DOMAIN="Purple-XMPP"'],
+	gnu_symbol_visibility : 'hidden',
+	dependencies : [libpurple_dep, glib, gio, hasl, xeme],
+	install : true,
+	install_dir : PURPLE_PLUGINDIR)
+
+devenv.append('PURPLE_PLUGIN_PATH', meson.current_build_dir())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/protocols/xmpp/purplexmppcore.c	Thu Nov 30 22:18:04 2023 -0600
@@ -0,0 +1,117 @@
+/*
+ * Purple - Internet Messaging Library
+ * Copyright (C) Pidgin Developers <devel@pidgin.im>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include <gplugin.h>
+#include <gplugin-native.h>
+
+#include <purple.h>
+
+#include "purplexmppcore.h"
+
+#include "purplexmppprotocol.h"
+
+/******************************************************************************
+ * Globals
+ *****************************************************************************/
+static PurpleProtocol *xmpp_protocol = NULL;
+
+/******************************************************************************
+ * GPlugin Exports
+ *****************************************************************************/
+static GPluginPluginInfo *
+purple_xmpp_query(G_GNUC_UNUSED GError **error) {
+	PurplePluginInfoFlags flags = PURPLE_PLUGIN_INFO_FLAGS_INTERNAL |
+	                              PURPLE_PLUGIN_INFO_FLAGS_AUTO_LOAD;
+	const gchar * const authors[] = {
+		"Pidgin Developers <devel@pidgin.im>",
+		NULL
+	};
+
+	return purple_plugin_info_new(
+		"id", "prpl-xmpp",
+		"name", "XMPP Protocol",
+		"authors", authors,
+		"version", DISPLAY_VERSION,
+		"category", N_("Protocol"),
+		"summary", N_("XMPP Protocol Plugin"),
+		"description", N_("Modern XMPP Support"),
+		"website", PURPLE_WEBSITE,
+		"abi-version", PURPLE_ABI_VERSION,
+		"flags", flags,
+		NULL);
+}
+
+static gboolean
+purple_xmpp_load(GPluginPlugin *plugin, GError **error) {
+	PurpleProtocolManager *manager = NULL;
+
+	if(PURPLE_IS_PROTOCOL(xmpp_protocol)) {
+		g_set_error_literal(error, PURPLE_XMPP_DOMAIN, 0,
+		                    "plugin was not cleaned up properly");
+
+		return FALSE;
+	}
+
+	purple_xmpp_protocol_register(GPLUGIN_NATIVE_PLUGIN(plugin));
+
+	xmpp_protocol = purple_xmpp_protocol_new();
+
+	manager = purple_protocol_manager_get_default();
+	if(PURPLE_IS_PROTOCOL_MANAGER(manager)) {
+		if(!purple_protocol_manager_register(manager, xmpp_protocol, error)) {
+			g_clear_object(&xmpp_protocol);
+
+			return FALSE;
+		}
+	}
+
+	return TRUE;
+}
+
+static gboolean
+purple_xmpp_unload(G_GNUC_UNUSED GPluginPlugin *plugin,
+                   G_GNUC_UNUSED gboolean shutdown,
+                   GError **error)
+{
+	PurpleProtocolManager *manager = NULL;
+
+	if(!PURPLE_IS_PROTOCOL(xmpp_protocol)) {
+		g_set_error_literal(error, PURPLE_XMPP_DOMAIN, 0,
+		                    "plugin was not setup properly");
+
+		return FALSE;
+	}
+
+	manager = purple_protocol_manager_get_default();
+	if(PURPLE_IS_PROTOCOL_MANAGER(manager)) {
+		if(!purple_protocol_manager_unregister(manager, xmpp_protocol,
+		                                       error))
+		{
+			return FALSE;
+		}
+	}
+
+	g_clear_object(&xmpp_protocol);
+
+	return TRUE;
+}
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(purple_xmpp)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/protocols/xmpp/purplexmppcore.h	Thu Nov 30 22:18:04 2023 -0600
@@ -0,0 +1,25 @@
+/*
+ * Purple - Internet Messaging Library
+ * Copyright (C) Pidgin Developers <devel@pidgin.im>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
+ */
+#ifndef PURPLE_XMPP_CORE_H
+#define PURPLE_XMPP_CORE_H
+
+#include <glib.h>
+
+#define PURPLE_XMPP_DOMAIN (g_quark_from_static_string("xmpp-plugin"))
+
+#endif /* PURPLE_XMPP_CORE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/protocols/xmpp/purplexmppprotocol.c	Thu Nov 30 22:18:04 2023 -0600
@@ -0,0 +1,102 @@
+/*
+ * Purple - Internet Messaging Library
+ * Copyright (C) Pidgin Developers <devel@pidgin.im>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <glib/gi18n-lib.h>
+
+#include "purplexmppprotocol.h"
+
+struct _PurpleXmppProtocol {
+	PurpleProtocol parent;
+};
+
+/******************************************************************************
+ * PurpleProtocol Implementation
+ *****************************************************************************/
+static GList *
+purple_xmpp_protocol_get_user_splits(G_GNUC_UNUSED PurpleProtocol *protocol) {
+	PurpleAccountUserSplit *split = NULL;
+	GList *splits = NULL;
+
+	split = purple_account_user_split_new(_("Server"), NULL, '@');
+	splits = g_list_append(splits, split);
+
+	return splits;
+}
+
+static GList *
+purple_xmpp_protocol_status_types(G_GNUC_UNUSED PurpleProtocol *protocol,
+                                  G_GNUC_UNUSED PurpleAccount *account)
+{
+	PurpleStatusType *type = NULL;
+	GList *types = NULL;
+
+	type = purple_status_type_new(PURPLE_STATUS_AVAILABLE, NULL, NULL, TRUE);
+	types = g_list_append(types, type);
+
+	type = purple_status_type_new(PURPLE_STATUS_OFFLINE, NULL, NULL, TRUE);
+	types = g_list_append(types, type);
+
+	return types;
+}
+
+/******************************************************************************
+ * GObject Implementation
+ *****************************************************************************/
+G_DEFINE_DYNAMIC_TYPE_EXTENDED(
+	PurpleXmppProtocol,
+	purple_xmpp_protocol,
+	PURPLE_TYPE_PROTOCOL,
+	0,
+	)
+
+static void
+purple_xmpp_protocol_init(G_GNUC_UNUSED PurpleXmppProtocol *protocol) {
+}
+
+static void
+purple_xmpp_protocol_class_finalize(G_GNUC_UNUSED PurpleXmppProtocolClass *klass) {
+}
+
+static void
+purple_xmpp_protocol_class_init(PurpleXmppProtocolClass *klass) {
+	PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass);
+
+	protocol_class->get_user_splits = purple_xmpp_protocol_get_user_splits;
+	protocol_class->status_types = purple_xmpp_protocol_status_types;
+}
+
+/******************************************************************************
+ * Internal API
+ *****************************************************************************/
+void
+purple_xmpp_protocol_register(GPluginNativePlugin *plugin) {
+	purple_xmpp_protocol_register_type(G_TYPE_MODULE(plugin));
+}
+
+PurpleProtocol *
+purple_xmpp_protocol_new(void) {
+	return g_object_new(
+		PURPLE_XMPP_TYPE_PROTOCOL,
+		"id", "prpl-xmpp",
+		"name", "XMPP",
+		"description", _("Modern Extensible Messaging and Presence Protocol."),
+		"icon-name", "im-xmpp",
+		"icon-resource-path", "/im/pidgin/libpurple/protocols/xmpp/icons",
+		"options", OPT_PROTO_PASSWORD_OPTIONAL,
+		NULL);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/protocols/xmpp/purplexmppprotocol.h	Thu Nov 30 22:18:04 2023 -0600
@@ -0,0 +1,50 @@
+/*
+ * Purple - Internet Messaging Library
+ * Copyright (C) Pidgin Developers <devel@pidgin.im>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
+ */
+#ifndef PURPLE_XMPP_PROTOCOL_H
+#define PURPLE_XMPP_PROTOCOL_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <gplugin.h>
+#include <gplugin-native.h>
+
+#include <purple.h>
+
+G_BEGIN_DECLS
+
+#define PURPLE_XMPP_TYPE_PROTOCOL (purple_xmpp_protocol_get_type())
+
+G_DECLARE_FINAL_TYPE(PurpleXmppProtocol, purple_xmpp_protocol, PURPLE_XMPP,
+                     PROTOCOL, PurpleProtocol)
+
+/**
+ * purple_xmpp_protocol_register: (skip)
+ * @plugin: The GTypeModule
+ *
+ * Registers the dynamic type using @plugin.
+ *
+ * Since: 3.0.0
+ */
+G_GNUC_INTERNAL void purple_xmpp_protocol_register(GPluginNativePlugin *plugin);
+
+G_GNUC_INTERNAL PurpleProtocol *purple_xmpp_protocol_new(void);
+
+G_END_DECLS
+
+#endif /* PURPLE_XMPP_PROTOCOL_H */
Binary file protocols/xmpp/resources/icons/16x16/apps/im-xmpp.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/protocols/xmpp/resources/icons/16x16/apps/scalable/im-xmpp.svg	Thu Nov 30 22:18:04 2023 -0600
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   id="svg3302"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docbase="/home/hbons/Desktop"
+   sodipodi:docname="jabber.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/home/hbons/Desktop/xmpp16.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   version="1.0">
+  <defs
+     id="defs3304">
+    <linearGradient
+       id="linearGradient2234"
+       inkscape:collect="always">
+      <stop
+         id="stop2236"
+         offset="0"
+         style="stop-color:#d9541e;stop-opacity:1" />
+      <stop
+         id="stop2238"
+         offset="1"
+         style="stop-color:#717311;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2218"
+       inkscape:collect="always">
+      <stop
+         id="stop2220"
+         offset="0"
+         style="stop-color:#033e6f;stop-opacity:1" />
+      <stop
+         id="stop2222"
+         offset="1"
+         style="stop-color:#0f97cb;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2209"
+       inkscape:collect="always">
+      <stop
+         id="stop2211"
+         offset="0"
+         style="stop-color:#439638;stop-opacity:1" />
+      <stop
+         id="stop2213"
+         offset="1"
+         style="stop-color:#05757c;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3334">
+      <stop
+         style="stop-color:#f0a530;stop-opacity:1;"
+         offset="0"
+         id="stop3336" />
+      <stop
+         style="stop-color:#f0a530;stop-opacity:0;"
+         offset="1"
+         id="stop3338" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       x="-0.49491513"
+       width="1.9898303"
+       y="-1.0582331"
+       height="3.1164663"
+       id="filter3871">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="5.4785069"
+         id="feGaussianBlur3873" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2218"
+       id="linearGradient2244"
+       gradientUnits="userSpaceOnUse"
+       x1="5.0133924"
+       y1="12.455358"
+       x2="15.638392"
+       y2="30.098215"
+       gradientTransform="matrix(0.3406067,0,0,0.3698986,2.395e-3,-0.5863818)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3334"
+       id="linearGradient2252"
+       gradientUnits="userSpaceOnUse"
+       x1="5.0133924"
+       y1="12.455358"
+       x2="15.638392"
+       y2="30.098215"
+       gradientTransform="matrix(-0.3406067,0,0,0.3698986,15.999925,-0.5863818)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2209"
+       id="linearGradient2216"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3406067,0,0,0.3754611,0.1185465,-0.6525396)"
+       x1="18.734463"
+       y1="21.519651"
+       x2="15.642859"
+       y2="23.876795" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2234"
+       id="linearGradient2231"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3406067,0,0,0.3698986,2.025084e-2,-0.6190852)"
+       x1="30.893675"
+       y1="21.130915"
+       x2="37.48666"
+       y2="23.216526" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="28"
+     inkscape:cx="21.256159"
+     inkscape:cy="8.9295837"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1434"
+     inkscape:window-height="823"
+     inkscape:window-x="3"
+     inkscape:window-y="43"
+     width="16px"
+     height="16px" />
+  <metadata
+     id="metadata3307">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#0a6fa2;fill-opacity:1;stroke:#02396a;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 15.5,2.5000001 L 10.454106,2.5327029 C 10.454106,4.6682012 8.4691474,12.778185 3.1541859,14.341671 C 9.641668,14.341671 15.5,7.1171759 15.5,2.5000001 z "
+       id="path2228"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;fill-opacity:1;stroke:url(#linearGradient2231);stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 15.5,2.5062012 L 9.5791052,2.5000001 C 9.5791052,8.214349 8.5048611,12.745482 3.1899,14.308968 C 9.6773816,14.308968 15.5,7.123377 15.5,2.5062012 z "
+       id="path3388"
+       sodipodi:nodetypes="cccc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.29670332;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3871)"
+       id="path3425"
+       sodipodi:cx="22.273863"
+       sodipodi:cy="36.736797"
+       sodipodi:rx="13.283506"
+       sodipodi:ry="6.2124381"
+       d="M 35.557369 36.736797 A 13.283506 6.2124381 0 1 1  8.9903564,36.736797 A 13.283506 6.2124381 0 1 1  35.557369 36.736797 z"
+       transform="matrix(0.3743374,0,0,0.1458475,-0.1571981,8.780618)" />
+    <path
+       style="fill:url(#linearGradient2252);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 14.997635,3.0728311 C 14.887455,4.1217876 13.42731,7.8391015 11.614614,10.013526 C 9.8225375,12.167186 7.1757566,13.602216 4.4938048,14.013055 C 6.5159292,13.016029 7.9668293,11.287886 8.900404,9.5049152 C 9.4616251,8.4330773 9.8347045,7.3512888 10.049952,6.3954548 C 10.244853,5.5299708 10.748164,3.6076606 10.677327,3.0472855 L 14.997635,3.0728311 z "
+       id="path3382"
+       sodipodi:nodetypes="cscsscc" />
+    <path
+       style="fill:#e96d1f;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 11.998273,3.0857646 L 9.853875,3.0746296 C 10.052724,5.704186 9.8431306,10.840842 5,13.99819 C 10.262132,13.127062 12.135446,6.14782 11.998273,3.0857646 z "
+       id="path3384"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="opacity:0.4;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 14.328472,3.5879657 C 13.402352,7.5116178 11.050991,9.896006 7.9932059,11.841578 C 9.4009194,9.3771388 10.613796,8.3204791 10.426187,3.617359 L 14.328472,3.5879657 z "
+       id="path3390"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:#0a6fa2;fill-opacity:1;stroke:#02396a;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 0.50232,2.5000001 L 5.548214,2.5327029 C 5.548214,4.6682012 7.5331725,12.778185 12.848134,14.341671 C 6.3606519,14.341671 0.50232,7.1171759 0.50232,2.5000001 z "
+       id="path2230"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:url(#linearGradient2244);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 1.0046854,3.0728311 C 1.025579,4.1606915 2.5750102,7.8391015 4.3877063,10.013526 C 6.1797822,12.167186 8.8265635,13.602216 11.508516,14.013055 C 9.4863905,13.01603 8.0354905,11.287886 7.1019159,9.5049152 C 6.5406948,8.4330773 6.1676154,7.3512888 5.9523683,6.3954548 C 5.7574673,5.5299709 5.2541559,3.6076606 5.3249925,3.0472854 L 1.0046854,3.0728311 z "
+       id="path2236"
+       sodipodi:nodetypes="cscsscc" />
+    <path
+       style="fill:#a0ce67;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 3.7118046,3.055775 L 6.0094407,3.1813771 C 5.9820727,4.0797021 5.9514165,10.838935 12,13.996284 C 5.4281278,13.125156 3.6296973,5.1178307 3.7118046,3.055775 z "
+       id="rect3326"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="opacity:0.4;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 1.6738483,3.5879662 C 2.5999681,7.5116186 4.9513289,9.8960072 8.0091145,11.841579 C 6.6014005,9.3771399 5.3885239,8.3204801 5.5761331,3.6173594 L 1.6738483,3.5879662 z "
+       id="path2240"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;fill-opacity:1;stroke:url(#linearGradient2216);stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 0.63632979,2.5000002 L 6.7242835,2.6127543 C 6.3286085,4.7177198 7.6493245,12.913003 12.964286,14.500001 C 6.4768045,14.500001 0.63632979,7.1866089 0.63632979,2.5000002 z "
+       id="path3352"
+       sodipodi:nodetypes="cccc" />
+  </g>
+</svg>
Binary file protocols/xmpp/resources/icons/22x22/apps/im-xmpp.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/protocols/xmpp/resources/icons/22x22/apps/scalable/im-xmpp.svg	Thu Nov 30 22:18:04 2023 -0600
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="24"
+   height="24"
+   id="svg3302"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docbase="/home/hbons/Desktop"
+   sodipodi:docname="jabber.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/home/hbons/Desktop/xmpp22.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   version="1.0">
+  <defs
+     id="defs3304">
+    <linearGradient
+       id="linearGradient2222"
+       inkscape:collect="always">
+      <stop
+         id="stop2224"
+         offset="0"
+         style="stop-color:#429538;stop-opacity:1" />
+      <stop
+         id="stop2226"
+         offset="1"
+         style="stop-color:#033e6f;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2214"
+       inkscape:collect="always">
+      <stop
+         id="stop2216"
+         offset="0"
+         style="stop-color:#033e6f;stop-opacity:1" />
+      <stop
+         id="stop2218"
+         offset="1"
+         style="stop-color:#14a9de;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3417">
+      <stop
+         style="stop-color:#df5219;stop-opacity:1"
+         offset="0"
+         id="stop3419" />
+      <stop
+         style="stop-color:#034072;stop-opacity:1"
+         offset="1"
+         id="stop3421" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3334">
+      <stop
+         style="stop-color:#034072;stop-opacity:1"
+         offset="0"
+         id="stop3336" />
+      <stop
+         style="stop-color:#109cd3;stop-opacity:1"
+         offset="1"
+         id="stop3338" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3417"
+       id="linearGradient3423"
+       x1="31.736355"
+       y1="20.841261"
+       x2="35.292381"
+       y2="22.255474"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4696897,0,0,0.4693264,1.1291183,0.5593256)" />
+    <filter
+       inkscape:collect="always"
+       x="-0.49491513"
+       width="1.9898303"
+       y="-1.0582331"
+       height="3.1164663"
+       id="filter3871">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="5.4785069"
+         id="feGaussianBlur3873" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2222"
+       id="linearGradient2206"
+       gradientUnits="userSpaceOnUse"
+       x1="18.734463"
+       y1="21.519651"
+       x2="15.642859"
+       y2="23.876795"
+       gradientTransform="matrix(0.4696897,0,0,0.4693264,0.7859883,0.5593256)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3334"
+       id="linearGradient2427"
+       gradientUnits="userSpaceOnUse"
+       x1="5.0133924"
+       y1="12.455358"
+       x2="15.638392"
+       y2="30.098215"
+       gradientTransform="matrix(-0.4731084,0,0,0.4693403,23.025142,0.6736289)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2214"
+       id="linearGradient2429"
+       gradientUnits="userSpaceOnUse"
+       x1="5.0133924"
+       y1="12.455358"
+       x2="15.638392"
+       y2="30.098215"
+       gradientTransform="matrix(0.4731084,0,0,0.4693403,0.7795066,0.6736289)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="14"
+     inkscape:cx="11.10389"
+     inkscape:cy="13.373032"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1434"
+     inkscape:window-height="823"
+     inkscape:window-x="3"
+     inkscape:window-y="43"
+     inkscape:snap-bbox="true"
+     inkscape:snap-nodes="false"
+     objecttolerance="9"
+     gridtolerance="12">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2421"
+       visible="true"
+       enabled="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3307">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.29670332;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3871)"
+       id="path3425"
+       sodipodi:cx="22.273863"
+       sodipodi:cy="36.736797"
+       sodipodi:rx="13.283506"
+       sodipodi:ry="6.2124381"
+       d="M 35.557369,36.736797 A 13.283506,6.2124381 0 1 1 8.9903564,36.736797 A 13.283506,6.2124381 0 1 1 35.557369,36.736797 z"
+       transform="matrix(0.5199608,0,0,0.1850564,0.5826339,12.558808)" />
+    <path
+       style="fill:#da6812;fill-opacity:1;stroke:#a24900;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 22.499999,4.5000001 L 14.975448,6.4912682 C 15.521075,9.1224749 12.829223,17.516252 5.5000001,19.499999 C 14.446104,19.499999 22.499999,10.35826 22.499999,4.5000001 z"
+       id="path3380"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:url(#linearGradient2427);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 22.005002,4.971026 C 21.851961,7.7335015 19.92301,11.265451 16.933871,14.123162 C 14.261115,16.678402 10.768225,18.676617 7.0429489,19.197904 C 9.8517135,17.932843 11.867038,15.740114 13.163789,13.477819 C 13.943334,12.117834 14.259517,10.820984 14.558499,9.6081884 C 14.82922,8.5100321 14.983993,6.7178749 14.8856,6.0068516 L 22.005002,4.971026 z"
+       id="path3382"
+       sodipodi:nodetypes="cscsscc" />
+    <path
+       style="fill:#abbb25;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 18.868549,5.7525618 L 15.016096,6.7750535 C 15.049889,7.9148799 14.627471,15.172893 7.1591181,19.179048 C 15.27359,18.073731 18.969928,8.3689705 18.868549,5.7525618 z"
+       id="path3384"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;fill-opacity:1;stroke:url(#linearGradient3423);stroke-width:1.00000024;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 22.499999,4.5000003 L 14.317055,5.5583642 C 14.862682,8.1895711 12.829223,17.516254 5.4999998,19.500001 C 14.446104,19.500001 22.499999,10.358261 22.499999,4.5000003 z"
+       id="path3388"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:#df5219;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 19.203087,5.4052024 L 15.293888,5.9416777 C 15.327681,7.0815041 14.627471,15.172893 7.1591181,19.179048 C 15.27359,18.073731 19.304466,8.0216111 19.203087,5.4052024 z"
+       id="path3386"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:#e96d1f;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 17.202112,5.6933762 L 14.951055,6.0174391 C 14.984849,7.1572655 14.688699,15.172893 7.2203467,19.179048 C 15.706546,17.068001 18.393936,6.9484519 17.202112,5.6933762 z"
+       id="path2228"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="opacity:0.4;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 21.5,5.5000001 C 21.259562,7.8476013 19.283758,10.890908 16.721197,13.322762 C 14.636171,15.301438 12.341463,16.82458 9.4999988,17.5 C 11.488026,16.319811 12.990581,14.640432 13.991693,12.906761 C 14.701922,11.676826 14.851876,10.636782 15.125188,9.5362725 C 15.351957,8.6231762 15.486367,7.0468868 15.426863,6.3988159 L 21.5,5.5000001 z"
+       id="path3390"
+       sodipodi:nodetypes="cscsscc" />
+    <path
+       style="fill:#da6812;fill-opacity:1;stroke:#a24900;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 1.5,4.5000001 L 9.0245518,6.4912682 C 8.4789251,9.1224749 11.170778,17.516252 18.499999,19.499999 C 9.5538954,19.499999 1.5,10.35826 1.5,4.5000001 z"
+       id="rect3321"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:url(#linearGradient2429);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 1.7996466,4.971026 C 1.9526876,7.7335015 3.8816385,11.265451 6.8707772,14.123162 C 9.5435341,16.678402 13.036424,18.676617 16.7617,19.197904 C 13.952935,17.932843 11.937611,15.740114 10.64086,13.477819 C 9.8613144,12.117834 9.3431008,10.745223 9.044119,9.532427 C 8.7733983,8.4342707 8.9721786,6.8188901 9.0705719,6.1078667 L 1.7996466,4.971026 z"
+       id="path3332"
+       sodipodi:nodetypes="cscsscc" />
+    <path
+       style="fill:#08aec5;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 4.936101,5.7525618 L 8.7885541,6.7750535 C 8.7547609,7.9148799 9.1771789,15.172893 16.645531,19.179048 C 8.5310592,18.073731 4.8347205,8.3689705 4.936101,5.7525618 z"
+       id="rect3326"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:#429538;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 4.6746077,5.4242622 L 8.9905846,5.9416777 C 8.9567914,7.0815041 9.1771789,15.172893 16.645531,19.179048 C 8.5310592,18.073731 4.4776451,8.3725446 4.6746077,5.4242622 z"
+       id="path3342"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:#a0ce67;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 6.8152887,5.6933762 L 8.9905846,6.0679467 C 8.9567914,7.2077731 9.1771789,15.172893 16.645531,19.179048 C 8.1593314,17.068001 5.6948939,7.1270234 6.8152887,5.6933762 z"
+       id="path2220"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;fill-opacity:1;stroke:url(#linearGradient2206);stroke-width:1.00000024;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 1.5000001,4.5000003 L 9.5252953,5.6445861 C 8.9796685,8.275793 11.170777,17.516254 18.5,19.500001 C 9.5538955,19.500001 1.5000001,10.358261 1.5000001,4.5000003 z"
+       id="path3352"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="opacity:0.4;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 2.6528401,5.6995163 C 3.1155917,8.0886161 4.8685432,11.14436 7.4405852,13.603314 C 9.0643917,15.155725 10.886287,16.515122 12.976833,17.423211 C 11.790214,16.318736 11.187637,15.199935 10.457851,13.926759 C 9.6473369,12.512747 9.1262733,11.255179 8.8124406,9.9821414 C 8.5924509,9.0897701 8.4306975,7.2046934 8.4453019,6.4949387 L 2.6528401,5.6995163 z"
+       id="path3366"
+       sodipodi:nodetypes="cscsscc" />
+  </g>
+</svg>
Binary file protocols/xmpp/resources/icons/48x48/apps/im-xmpp.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/protocols/xmpp/resources/icons/scalable/apps/im-xmpp.svg	Thu Nov 30 22:18:04 2023 -0600
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg3302"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docbase="/home/hbons/Desktop"
+   sodipodi:docname="jabber.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/home/hbons/Desktop/xmpp.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3304">
+    <linearGradient
+       id="linearGradient2222"
+       inkscape:collect="always">
+      <stop
+         id="stop2224"
+         offset="0"
+         style="stop-color:#429538;stop-opacity:1" />
+      <stop
+         id="stop2226"
+         offset="1"
+         style="stop-color:#033e6f;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2214"
+       inkscape:collect="always">
+      <stop
+         id="stop2216"
+         offset="0"
+         style="stop-color:#033e6f;stop-opacity:1" />
+      <stop
+         id="stop2218"
+         offset="1"
+         style="stop-color:#14a9de;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3417">
+      <stop
+         style="stop-color:#df5219;stop-opacity:1"
+         offset="0"
+         id="stop3419" />
+      <stop
+         style="stop-color:#034072;stop-opacity:1"
+         offset="1"
+         id="stop3421" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3334">
+      <stop
+         style="stop-color:#034072;stop-opacity:1"
+         offset="0"
+         id="stop3336" />
+      <stop
+         style="stop-color:#109cd3;stop-opacity:1"
+         offset="1"
+         id="stop3338" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2214"
+       id="linearGradient3340"
+       x1="5.0133924"
+       y1="12.455358"
+       x2="15.638392"
+       y2="30.098215"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3334"
+       id="linearGradient3392"
+       gradientUnits="userSpaceOnUse"
+       x1="5.0133924"
+       y1="12.455358"
+       x2="15.638392"
+       y2="30.098215" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3417"
+       id="linearGradient3423"
+       x1="31.736355"
+       y1="20.841261"
+       x2="35.292381"
+       y2="22.255474"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       x="-0.49491513"
+       width="1.9898303"
+       y="-1.0582332"
+       height="3.1164664"
+       id="filter3871">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="5.4785069"
+         id="feGaussianBlur3873" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2222"
+       id="linearGradient2206"
+       gradientUnits="userSpaceOnUse"
+       x1="18.734463"
+       y1="21.519651"
+       x2="15.642859"
+       y2="23.876795" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4.9497475"
+     inkscape:cx="81.961371"
+     inkscape:cy="4.928944"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1434"
+     inkscape:window-height="823"
+     inkscape:window-x="3"
+     inkscape:window-y="43" />
+  <metadata
+     id="metadata3307">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.2967033;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3871)"
+       id="path3425"
+       sodipodi:cx="22.273863"
+       sodipodi:cy="36.736797"
+       sodipodi:rx="13.283506"
+       sodipodi:ry="6.2124381"
+       d="M 35.557369 36.736797 A 13.283506 6.2124381 0 1 1  8.9903564,36.736797 A 13.283506 6.2124381 0 1 1  35.557369 36.736797 z"
+       transform="matrix(1.0990312,0,0,0.3942904,-0.4161261,25.323157)" />
+    <path
+       style="fill:#da6812;fill-opacity:1;stroke:#a24900;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 45.5,8.3964466 L 29.479739,12.639268 C 30.641414,18.245615 24.910285,36.130347 9.305892,40.357143 C 28.352732,40.357143 45.5,20.878719 45.5,8.3964466 z "
+       id="path3380"
+       sodipodi:nodetypes="cccc" />
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-0.56227452"
+       inkscape:original="M 1.53125 8.40625 C 1.53125 20.888522 18.671909 40.34375 37.71875 40.34375 C 22.114357 36.116954 16.369574 18.231347 17.53125 12.625 L 1.53125 8.40625 z "
+       style="fill:url(#linearGradient3392);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       id="path3382"
+       d="M 2.15625,9.15625 C 2.4797298,15.042119 6.5569158,22.567467 12.875,28.65625 C 18.524354,34.100573 25.907207,38.35807 33.78125,39.46875 C 27.844419,36.773348 23.584667,32.10141 20.84375,27.28125 C 19.19604,24.383597 18.100702,21.459043 17.46875,18.875 C 16.896533,16.535213 16.729528,14.546192 16.9375,13.03125 L 2.15625,9.15625 z "
+       transform="matrix(-1,0,0,1,47.020178,0)" />
+    <path
+       style="fill:#abbb25;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 38.234464,10.821428 L 30.091607,13 C 30.163035,15.428571 29.270178,30.892857 13.484463,39.428571 C 30.635869,37.073525 38.448749,16.396079 38.234464,10.821428 z "
+       id="path3384"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;fill-opacity:1;stroke:url(#linearGradient3423);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 45.5,8.3964466 L 29.479739,12.639268 C 30.641414,18.245615 24.910285,36.130347 9.305892,40.357143 C 28.352732,40.357143 45.5,20.878719 45.5,8.3964466 z "
+       id="path3388"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:#df5219;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 38.941571,10.619397 L 30.091607,13 C 30.163035,15.428571 29.270178,30.892857 13.484463,39.428571 C 30.635869,37.073525 39.155856,16.194048 38.941571,10.619397 z "
+       id="path3386"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:#e96d1f;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 34.3385,11.986693 L 30.221025,13 C 30.292453,15.428571 29.399596,30.892857 13.613881,39.428571 C 31.551001,34.930668 35.951771,13.823779 34.3385,11.986693 z "
+       id="path2228"
+       sodipodi:nodetypes="cccc" />
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-1.0305283"
+       inkscape:original="M 1.53125 8.40625 C 1.53125 20.888522 18.671909 40.34375 37.71875 40.34375 C 22.114357 36.116954 16.369574 18.231347 17.53125 12.625 L 1.53125 8.40625 z "
+       style="opacity:0.4;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       id="path3390"
+       d="M 2.78125,9.8125 C 3.3466531,15.418621 7.1614784,22.50518 13.1875,28.3125 C 18.090567,33.03762 24.31812,36.855835 31,38.46875 C 26.325029,35.650434 22.791678,31.640043 20.4375,27.5 C 18.767353,24.562889 17.642711,21.596789 17,18.96875 C 16.46674,16.788257 16.328823,14.953857 16.46875,13.40625 L 2.78125,9.8125 z "
+       transform="matrix(-1,0,0,1,47.020178,0)" />
+    <path
+       style="fill:#da6812;fill-opacity:1;stroke:#a24900;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 1.5201775,8.3964466 L 17.540439,12.639268 C 16.378764,18.245615 22.109893,36.130347 37.714286,40.357143 C 18.667446,40.357143 1.5201775,20.878719 1.5201775,8.3964466 z "
+       id="rect3321"
+       sodipodi:nodetypes="cccc" />
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-0.56227452"
+       inkscape:original="M 1.53125 8.40625 C 1.53125 20.888522 18.671909 40.34375 37.71875 40.34375 C 22.114357 36.116954 16.369574 18.231347 17.53125 12.625 L 1.53125 8.40625 z "
+       style="fill:url(#linearGradient3340);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       id="path3332"
+       d="M 2.15625,9.15625 C 2.4797298,15.042119 6.5569158,22.567467 12.875,28.65625 C 18.524354,34.100573 25.907207,38.35807 33.78125,39.46875 C 27.844419,36.773348 23.584667,32.10141 20.84375,27.28125 C 19.19604,24.383597 18.100702,21.459043 17.46875,18.875 C 16.896533,16.535213 16.729528,14.546192 16.9375,13.03125 L 2.15625,9.15625 z " />
+    <path
+       style="fill:#08aec5;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 8.7857143,10.821428 L 16.928571,13 C 16.857143,15.428571 17.75,30.892857 33.535715,39.428571 C 16.384309,37.073525 8.5714286,16.396079 8.7857143,10.821428 z "
+       id="rect3326"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:#429538;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 8.1796228,10.821428 L 16.928571,13 C 16.857143,15.428571 17.75,30.892857 33.535715,39.428571 C 16.384309,37.073525 7.7633066,17.103186 8.1796228,10.821428 z "
+       id="path3342"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:#a0ce67;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 12.811096,11.986693 L 16.928571,13 C 16.857143,15.428571 17.75,30.892857 33.535715,39.428571 C 15.598595,34.930668 11.197825,13.823779 12.811096,11.986693 z "
+       id="path2220"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;fill-opacity:1;stroke:url(#linearGradient2206);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 1.5201775,8.3964466 L 17.540439,12.639268 C 16.378764,18.245615 22.109893,36.130347 37.714286,40.357143 C 18.667446,40.357143 1.5201775,20.878719 1.5201775,8.3964466 z "
+       id="path3352"
+       sodipodi:nodetypes="cccc" />
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-1.0305283"
+       inkscape:original="M 1.53125 8.40625 C 1.53125 20.888522 18.671909 40.34375 37.71875 40.34375 C 22.114357 36.116954 16.369574 18.231347 17.53125 12.625 L 1.53125 8.40625 z "
+       style="opacity:0.4;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       id="path3366"
+       d="M 2.78125,9.8125 C 3.3466531,15.418621 7.1614784,22.50518 13.1875,28.3125 C 18.090567,33.03762 24.31812,36.855835 31,38.46875 C 26.325029,35.650434 22.791678,31.640043 20.4375,27.5 C 18.767353,24.562889 17.642711,21.596789 17,18.96875 C 16.46674,16.788257 16.328823,14.953857 16.46875,13.40625 L 2.78125,9.8125 z " />
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/protocols/xmpp/resources/xmpp.gresource.xml	Thu Nov 30 22:18:04 2023 -0600
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/im/pidgin/libpurple/protocols/xmpp">
+    <file>icons/16x16/apps/im-xmpp.png</file>
+    <file compressed="true" preprocess="xml-stripblanks">icons/16x16/apps/scalable/im-xmpp.svg</file>
+    <file>icons/22x22/apps/im-xmpp.png</file>
+    <file compressed="true" preprocess="xml-stripblanks">icons/22x22/apps/scalable/im-xmpp.svg</file>
+    <file>icons/48x48/apps/im-xmpp.png</file>
+    <file compressed="true" preprocess="xml-stripblanks">icons/scalable/apps/im-xmpp.svg</file>
+  </gresource>
+</gresources>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/subprojects/xeme.wrap	Thu Nov 30 22:18:04 2023 -0600
@@ -0,0 +1,4 @@
+[wrap-hg]
+directory = xeme
+url = https://keep.imfreedom.org/xeme/xeme/
+revision = 29f9d1d3dc73

mercurial