Mon, 23 Dec 2024 20:44:41 -0600
IRCv3: Implement Purple.ProtocolConversation.refresh
This just checks if the conversation is offline, sets it to online, and
rejoins it if is a channel.
Testing Done:
Called in the turtles.
Bugs closed: PIDGIN-17989
Reviewed at https://reviews.imfreedom.org/r/3700/
| protocols/ircv3/purpleircv3protocolconversation.c | file | annotate | diff | comparison | revisions |
--- a/protocols/ircv3/purpleircv3protocolconversation.c Mon Dec 23 20:39:36 2024 -0600 +++ b/protocols/ircv3/purpleircv3protocolconversation.c Mon Dec 23 20:44:41 2024 -0600 @@ -289,6 +289,44 @@ ibis_client_write(client, message); } +static void +purple_ircv3_protocol_conversation_refresh(G_GNUC_UNUSED PurpleProtocolConversation *protocol, + PurpleConversation *conversation) +{ + PurpleIRCv3Connection *connection; + PurpleAccount *account = NULL; + PurpleConnection *purple_connection = NULL; + IbisClient *client = NULL; + IbisMessage *message = NULL; + + if(purple_conversation_get_online(conversation)) { + return; + } + + if(!purple_conversation_is_channel(conversation)) { + /* We need to mark DM's as online again. */ + purple_conversation_set_online(conversation, TRUE); + + return; + } + + account = purple_conversation_get_account(conversation); + purple_connection = purple_account_get_connection(account); + connection = PURPLE_IRCV3_CONNECTION(purple_connection); + + message = ibis_message_new(IBIS_MSG_JOIN); + ibis_message_set_params(message, purple_conversation_get_id(conversation), + NULL); + + client = purple_ircv3_connection_get_client(connection); + ibis_client_write(client, message); + + /* TODO: We need to validate the JOIN by handling the join from the server, + * but right now we just assume it was successful. + */ + purple_conversation_set_online(conversation, TRUE); +} + void purple_ircv3_protocol_conversation_init(PurpleProtocolConversationInterface *iface) { iface->send_message_async = @@ -310,4 +348,6 @@ iface->send_typing = purple_ircv3_protocol_conversation_send_typing; + iface->refresh = + purple_ircv3_protocol_conversation_refresh; }