Wed, 04 Sep 2024 00:27:44 -0500
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/
--- 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);