Add support for CTCP ACTION

Wed, 04 Sep 2024 00:27:44 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Wed, 04 Sep 2024 00:27:44 -0500
changeset 42920
897667cab3ce
parent 42919
bcd046ee00ed
child 42921
a595e51a5bfa

Add support for CTCP ACTION

Testing Done:
Received a `CTCP ACTION` in a chat and verified it was styled properly. Also received a `CTCP VERSION` to verify it was rendered like a normal message.

Bugs closed: PIDGIN-17921

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

im.pidgin.Pidgin3.yml file | annotate | diff | comparison | revisions
protocols/ircv3/meson.build file | annotate | diff | comparison | revisions
protocols/ircv3/purpleircv3messagehandlers.c file | annotate | diff | comparison | revisions
subprojects/ibis.wrap file | annotate | diff | comparison | revisions
--- a/im.pidgin.Pidgin3.yml	Tue Sep 03 01:14:11 2024 -0500
+++ b/im.pidgin.Pidgin3.yml	Wed Sep 04 00:27:44 2024 -0500
@@ -41,8 +41,8 @@
     sources:
       - type: archive
         archive-type: tar-xz
-        url: https://sourceforge.net/projects/pidgin/files/ibis/0.6.0/ibis-0.6.0.tar.xz/download
-        sha256: 6e2fc0db2678ec5bdfcea218112895612c31b755a8f8aeab578929fd8c30f59f
+        url: https://sourceforge.net/projects/pidgin/files/ibis/0.7.1/ibis-0.7.1.tar.xz/download
+        sha256: d6e50ca1df262c36ce299e0c948fcbcd4c2ce3eca02aff7a76a1cf3f64eddec6
   - name: xeme
     buildsystem: meson
     config-opts:
--- a/protocols/ircv3/meson.build	Tue Sep 03 01:14:11 2024 -0500
+++ b/protocols/ircv3/meson.build	Wed Sep 04 00:27:44 2024 -0500
@@ -18,7 +18,7 @@
 	subdir_done()
 endif
 
-ibis_dep = dependency('ibis', version : '>= 0.5.0')
+ibis_dep = dependency('ibis', version : '>= 0.7.1')
 
 ircv3_filebase = f'purple-@purple_major_version@-ircv3'
 
--- a/protocols/ircv3/purpleircv3messagehandlers.c	Tue Sep 03 01:14:11 2024 -0500
+++ b/protocols/ircv3/purpleircv3messagehandlers.c	Wed Sep 04 00:27:44 2024 -0500
@@ -165,7 +165,7 @@
 	tags = ibis_message_get_tags(ibis_message);
 
 	if(params == NULL) {
-		g_warning("privmsg received with no parameters");
+		g_warning("tagmsg received with no parameters");
 
 		return FALSE;
 	}
@@ -228,12 +228,13 @@
 	PurpleConversation *conversation = NULL;
 	PurpleMessage *message = NULL;
 	GDateTime *dt = NULL;
+	IbisCTCPMessage *ctcp_message = NULL;
 	IbisTags *tags = NULL;
 	GStrv params = NULL;
-	char *stripped = NULL;
 	const char *target = NULL;
 
 	params = ibis_message_get_params(ibis_message);
+	ctcp_message = ibis_message_get_ctcp_message(ibis_message);
 	tags = ibis_message_get_tags(ibis_message);
 
 	if(params == NULL) {
@@ -265,9 +266,33 @@
 
 	purple_ircv3_add_contact_to_conversation(contact, conversation);
 
-	stripped = ibis_formatting_strip(params[1]);
-	message = purple_message_new(PURPLE_CONTACT_INFO(contact), stripped);
-	g_clear_pointer(&stripped, g_free);
+	if(IBIS_IS_CTCP_MESSAGE(ctcp_message)) {
+		if(ibis_ctcp_message_is_command(ctcp_message, IBIS_CTCP_ACTION)) {
+			GStrv ctcp_params = NULL;
+			char *ctcp_body = NULL;
+			char *stripped = NULL;
+
+			ctcp_params = ibis_ctcp_message_get_params(ctcp_message);
+			ctcp_body = g_strjoinv(" ", ctcp_params);
+			stripped = ibis_formatting_strip(ctcp_body);
+			g_free(ctcp_body);
+
+			message = purple_message_new(PURPLE_CONTACT_INFO(contact),
+			                             stripped);
+			g_free(stripped);
+
+			purple_message_set_action(message, TRUE);
+		}
+	}
+
+	if(!PURPLE_IS_MESSAGE(message)) {
+		char *stripped = NULL;
+
+		stripped = ibis_formatting_strip(params[1]);
+		message = purple_message_new(PURPLE_CONTACT_INFO(contact), stripped);
+		g_clear_pointer(&stripped, g_free);
+	}
+
 
 	if(purple_strequal(command, IBIS_MSG_NOTICE)) {
 		purple_message_set_notice(message, TRUE);
--- a/subprojects/ibis.wrap	Tue Sep 03 01:14:11 2024 -0500
+++ b/subprojects/ibis.wrap	Wed Sep 04 00:27:44 2024 -0500
@@ -1,4 +1,4 @@
 [wrap-hg]
 directory = ibis
 url = https://keep.imfreedom.org/ibis/ibis
-revision = v0.5.0
+revision = v0.7.1

mercurial