protocols/ircv3/purpleircv3protocolconversation.c

Sun, 03 Nov 2024 00:05:44 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Sun, 03 Nov 2024 00:05:44 -0500
changeset 43045
308e8d0ce68c
parent 43030
97ed7473351f
child 43059
c574888ce9e2
permissions
-rw-r--r--

remove purple3-url-handler.desktop.in.in

The application that did the launching was removed long ago. Also this should
be implemented by the user interfaces and they might provide separate files to
groups schemas as well.

Testing Done:
Called in the turtles.

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

42320
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Purple - Internet Messaging Library
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
42568
31e8c7c92e2f Make sure all of the license headers for IRCv3 are GPLv2
Gary Kramlich <grim@reaperworld.com>
parents: 42511
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
31e8c7c92e2f Make sure all of the license headers for IRCv3 are GPLv2
Gary Kramlich <grim@reaperworld.com>
parents: 42511
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
31e8c7c92e2f Make sure all of the license headers for IRCv3 are GPLv2
Gary Kramlich <grim@reaperworld.com>
parents: 42511
diff changeset
7 * source distribution.
31e8c7c92e2f Make sure all of the license headers for IRCv3 are GPLv2
Gary Kramlich <grim@reaperworld.com>
parents: 42511
diff changeset
8 *
31e8c7c92e2f Make sure all of the license headers for IRCv3 are GPLv2
Gary Kramlich <grim@reaperworld.com>
parents: 42511
diff changeset
9 * This library is free software; you can redistribute it and/or modify
31e8c7c92e2f Make sure all of the license headers for IRCv3 are GPLv2
Gary Kramlich <grim@reaperworld.com>
parents: 42511
diff changeset
10 * it under the terms of the GNU General Public License as published by
31e8c7c92e2f Make sure all of the license headers for IRCv3 are GPLv2
Gary Kramlich <grim@reaperworld.com>
parents: 42511
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
31e8c7c92e2f Make sure all of the license headers for IRCv3 are GPLv2
Gary Kramlich <grim@reaperworld.com>
parents: 42511
diff changeset
12 * (at your option) any later version.
42320
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This library is distributed in the hope that it will be useful,
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
42568
31e8c7c92e2f Make sure all of the license headers for IRCv3 are GPLv2
Gary Kramlich <grim@reaperworld.com>
parents: 42511
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
31e8c7c92e2f Make sure all of the license headers for IRCv3 are GPLv2
Gary Kramlich <grim@reaperworld.com>
parents: 42511
diff changeset
17 * GNU General Public License for more details.
42320
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
42568
31e8c7c92e2f Make sure all of the license headers for IRCv3 are GPLv2
Gary Kramlich <grim@reaperworld.com>
parents: 42511
diff changeset
19 * You should have received a copy of the GNU General Public License
31e8c7c92e2f Make sure all of the license headers for IRCv3 are GPLv2
Gary Kramlich <grim@reaperworld.com>
parents: 42511
diff changeset
20 * along with this library; if not, see <https://www.gnu.org/licenses/>.
42320
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include <glib/gi18n-lib.h>
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
42769
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
25 #include <ibis.h>
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
26
42320
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 #include "purpleircv3protocolconversation.h"
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 #include "purpleircv3connection.h"
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
30 #include "purpleircv3core.h"
42320
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32 /******************************************************************************
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 * PurpleProtocolConversation Implementation
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 *****************************************************************************/
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 static void
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 purple_ircv3_protocol_conversation_send_message_async(PurpleProtocolConversation *protocol,
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 PurpleConversation *conversation,
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 PurpleMessage *message,
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 GCancellable *cancellable,
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 GAsyncReadyCallback callback,
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 gpointer data)
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 {
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 PurpleIRCv3Connection *v3_connection = NULL;
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 PurpleAccount *account = NULL;
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 PurpleConnection *connection = NULL;
42933
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
46 PurpleConversation *status_conversation = NULL;
42769
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
47 IbisClient *client = NULL;
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
48 IbisMessage *ibis_message = NULL;
42320
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 GTask *task = NULL;
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 const char *id = NULL;
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 account = purple_conversation_get_account(conversation);
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 connection = purple_account_get_connection(account);
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 v3_connection = PURPLE_IRCV3_CONNECTION(connection);
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55
42933
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
56 /* We ignore non commands to the status conversation. */
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
57 status_conversation = purple_ircv3_connection_get_status_conversation(v3_connection);
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
58 if(conversation == status_conversation) {
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
59 task = g_task_new(protocol, cancellable, callback, data);
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
60 g_task_return_boolean(task, TRUE);
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
61 g_clear_object(&task);
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
62
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
63 return;
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
64 }
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
65
42320
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 id = purple_conversation_get_id(conversation);
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67 /* TODO: the new message dialog sets the name but not the id and we want to
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 * use the id only, so for now if id is NULL we grab the name.
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 */
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 if(purple_strempty(id)) {
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71 id = purple_conversation_get_name(conversation);
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 }
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73
42769
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
74 ibis_message = ibis_message_new(IBIS_MSG_PRIVMSG);
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
75 ibis_message_set_params(ibis_message, id,
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
76 purple_message_get_contents(message), NULL);
42933
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
77
4abacb3d5773 IRCv3: Don't send message that the user input into the status conversation
Gary Kramlich <grim@reaperworld.com>
parents: 42900
diff changeset
78 client = purple_ircv3_connection_get_client(v3_connection);
42769
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
79 ibis_client_write(client, ibis_message);
42320
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 task = g_task_new(protocol, cancellable, callback, data);
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 g_task_return_boolean(task, TRUE);
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 g_clear_object(&task);
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 /* This will be made conditional when we add echo-message support.
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 * https://ircv3.net/specs/extensions/echo-message
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 */
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88 purple_conversation_write_message(conversation, message);
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89 }
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 static gboolean
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 purple_ircv3_protocol_conversation_send_message_finish(G_GNUC_UNUSED PurpleProtocolConversation *protocol,
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 GAsyncResult *result,
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 GError **error)
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 {
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96 return g_task_propagate_boolean(G_TASK(result), error);
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97 }
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
99 static PurpleChannelJoinDetails *
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
100 purple_ircv3_protocol_conversation_get_channel_join_details(G_GNUC_UNUSED PurpleProtocolConversation *protocol,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
101 G_GNUC_UNUSED PurpleAccount *account)
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
102 {
42799
8b06291db25c Add properties for the maximum length of properties to ChannelJoinDetails
Gary Kramlich <grim@reaperworld.com>
parents: 42769
diff changeset
103 return purple_channel_join_details_new(0, FALSE, 0, TRUE, 0);
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
104 }
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
105
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
106 static void
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
107 purple_ircv3_protocol_conversation_join_channel_async(PurpleProtocolConversation *protocol,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
108 PurpleAccount *account,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
109 PurpleChannelJoinDetails* details,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
110 GCancellable* cancellable,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
111 GAsyncReadyCallback callback,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
112 gpointer data)
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
113 {
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
114 PurpleIRCv3Connection *v3_connection = NULL;
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
115 PurpleConnection *connection = NULL;
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
116 PurpleConversation *conversation = NULL;
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
117 PurpleConversationManager *manager = NULL;
42769
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
118 IbisClient *client = NULL;
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
119 IbisMessage *message = NULL;
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
120 GTask *task = NULL;
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
121 const char *name = NULL;
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
122 const char *password = NULL;
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
123
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
124 connection = purple_account_get_connection(account);
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
125 v3_connection = PURPLE_IRCV3_CONNECTION(connection);
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
126
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
127 task = g_task_new(protocol, cancellable, callback, data);
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
128
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
129 /* Validate that the name isn't empty. */
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
130 /* TODO: check that name match the ISUPPORT channel prefixes. */
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
131 name = purple_channel_join_details_get_name(details);
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
132 if(purple_strempty(name)) {
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
133 g_task_return_new_error(task, PURPLE_IRCV3_DOMAIN, 0,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
134 "channel name is empty");
42450
bd1327c022d4 fix some memory leaks
Markus Fischer <ivanhoe@fiscari.de>
parents: 42378
diff changeset
135 g_clear_object(&task);
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
136
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
137 return;
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
138 }
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
139
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
140 manager = purple_conversation_manager_get_default();
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
141 conversation = purple_conversation_manager_find_with_id(manager, account,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
142 name);
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
143
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
144 /* If the conversation already exists, just return TRUE. */
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
145 if(PURPLE_IS_CONVERSATION(conversation)) {
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
146 g_task_return_boolean(task, TRUE);
42450
bd1327c022d4 fix some memory leaks
Markus Fischer <ivanhoe@fiscari.de>
parents: 42378
diff changeset
147 g_clear_object(&task);
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
148
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
149 return;
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
150 }
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
151
42769
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
152 message = ibis_message_new(IBIS_MSG_JOIN);
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
153
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
154 password = purple_channel_join_details_get_password(details);
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
155 if(!purple_strempty(password)) {
42769
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
156 ibis_message_set_params(message, name, password, NULL);
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
157 } else {
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
158 ibis_message_set_params(message, name, NULL);
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
159 }
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
160
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
161 conversation = g_object_new(
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
162 PURPLE_TYPE_CONVERSATION,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
163 "account", account,
42653
584895b844d2 PurpleConversationType's values were pascal case when they should be upper snake case
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
164 "type", PURPLE_CONVERSATION_TYPE_CHANNEL,
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
165 "id", name,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
166 "name", name,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
167 NULL);
43030
97ed7473351f Update the protocols for the ConversationManager deprecations
Gary Kramlich <grim@reaperworld.com>
parents: 43022
diff changeset
168 purple_conversation_manager_add(manager, conversation);
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
169 g_clear_object(&conversation);
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
170
42769
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
171 client = purple_ircv3_connection_get_client(v3_connection);
c488d7af2923 Move the IRCv3 protocol plugin to our new Ibis library
Gary Kramlich <grim@reaperworld.com>
parents: 42653
diff changeset
172 ibis_client_write(client, message);
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
173
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
174 g_task_return_boolean(task, TRUE);
42450
bd1327c022d4 fix some memory leaks
Markus Fischer <ivanhoe@fiscari.de>
parents: 42378
diff changeset
175 g_clear_object(&task);
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
176 }
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
177
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
178 static gboolean
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
179 purple_ircv3_protocol_conversation_join_channel_finish(G_GNUC_UNUSED PurpleProtocolConversation *protocol,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
180 GAsyncResult *result,
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
181 GError **error)
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
182 {
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
183 return g_task_propagate_boolean(G_TASK(result), error);
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
184 }
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
185
42889
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
186 static void
42900
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
187 purple_ircv3_protocol_conversation_leave_conversation_async(PurpleProtocolConversation *protocol,
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
188 PurpleConversation *conversation,
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
189 GCancellable *cancellable,
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
190 GAsyncReadyCallback callback,
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
191 gpointer data)
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
192 {
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
193 GTask *task = NULL;
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
194
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
195 if(purple_conversation_is_channel(conversation)) {
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
196 PurpleIRCv3Connection *v3_connection = NULL;
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
197 PurpleAccount *account = NULL;
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
198 PurpleConnection *connection = NULL;
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
199 IbisClient *client = NULL;
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
200 IbisMessage *message = NULL;
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
201
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
202 account = purple_conversation_get_account(conversation);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
203 connection = purple_account_get_connection(account);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
204 v3_connection = PURPLE_IRCV3_CONNECTION(connection);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
205 client = purple_ircv3_connection_get_client(v3_connection);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
206
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
207 message = ibis_message_new(IBIS_MSG_PART);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
208 ibis_message_set_params(message,
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
209 purple_conversation_get_id(conversation),
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
210 NULL);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
211 ibis_client_write(client, message);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
212 }
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
213
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
214 task = g_task_new(protocol, cancellable, callback, data);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
215 g_task_set_source_tag(task,
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
216 purple_ircv3_protocol_conversation_leave_conversation_async);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
217 g_task_return_boolean(task, TRUE);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
218 g_clear_object(&task);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
219 }
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
220
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
221 static gboolean
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
222 purple_ircv3_protocol_conversation_leave_conversation_finish(G_GNUC_UNUSED PurpleProtocolConversation *protocol,
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
223 GAsyncResult *result,
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
224 GError **error)
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
225 {
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
226 g_return_val_if_fail(G_IS_ASYNC_RESULT(result), FALSE);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
227
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
228 if(!g_async_result_is_tagged(result,
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
229 purple_ircv3_protocol_conversation_leave_conversation_async))
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
230 {
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
231 g_set_error_literal(error, PURPLE_IRCV3_DOMAIN, 0,
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
232 "result has unexpected tag");
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
233 return FALSE;
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
234 }
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
235
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
236 return g_task_propagate_boolean(G_TASK(result), error);
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
237 }
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
238
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
239 static void
42889
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
240 purple_ircv3_protocol_conversation_send_typing(G_GNUC_UNUSED PurpleProtocolConversation *protocol,
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
241 PurpleConversation *conversation,
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
242 PurpleTypingState state)
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
243 {
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
244 PurpleIRCv3Connection *connection;
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
245 PurpleAccount *account = NULL;
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
246 PurpleConnection *purple_connection = NULL;
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
247 IbisClient *client = NULL;
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
248 IbisMessage *message = NULL;
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
249 IbisTags *tags = NULL;
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
250 const char *value = NULL;
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
251
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
252 if(state == PURPLE_TYPING_STATE_TYPING) {
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
253 value = IBIS_TYPING_ACTIVE;
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
254 } else if(state == PURPLE_TYPING_STATE_PAUSED) {
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
255 value = IBIS_TYPING_PAUSED;
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
256 } else if(state == PURPLE_TYPING_STATE_NONE) {
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
257 value = IBIS_TYPING_DONE;
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
258 }
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
259
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
260 if(value == NULL) {
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
261 return;
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
262 }
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
263
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
264 account = purple_conversation_get_account(conversation);
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
265 purple_connection = purple_account_get_connection(account);
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
266 connection = PURPLE_IRCV3_CONNECTION(purple_connection);
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
267
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
268 message = ibis_message_new(IBIS_MSG_TAGMSG);
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
269 ibis_message_set_params(message, purple_conversation_get_id(conversation),
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
270 NULL);
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
271
43022
567e86fd4234 IRCv3: Fix an ibis deprecation
Gary Kramlich <grim@reaperworld.com>
parents: 42933
diff changeset
272 tags = ibis_message_get_tags(message);
42889
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
273 ibis_tags_add(tags, IBIS_TAG_TYPING, value);
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
274
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
275 client = purple_ircv3_connection_get_client(connection);
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
276 ibis_client_write(client, message);
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
277 }
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
278
42320
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
279 void
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
280 purple_ircv3_protocol_conversation_init(PurpleProtocolConversationInterface *iface) {
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
281 iface->send_message_async =
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
282 purple_ircv3_protocol_conversation_send_message_async;
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
283 iface->send_message_finish =
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
284 purple_ircv3_protocol_conversation_send_message_finish;
42378
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
285
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
286 iface->get_channel_join_details =
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
287 purple_ircv3_protocol_conversation_get_channel_join_details;
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
288 iface->join_channel_async =
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
289 purple_ircv3_protocol_conversation_join_channel_async;
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
290 iface->join_channel_finish =
b64cb320215a IRCv3: Implement the channel joining functions in PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents: 42320
diff changeset
291 purple_ircv3_protocol_conversation_join_channel_finish;
42889
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
292
42900
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
293 iface->leave_conversation_async =
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
294 purple_ircv3_protocol_conversation_leave_conversation_async;
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
295 iface->leave_conversation_finish =
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
296 purple_ircv3_protocol_conversation_leave_conversation_finish;
f7601128636b IRCv3: Implement leaving conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42889
diff changeset
297
42889
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
298 iface->send_typing =
9e329eab0f9d IRCv3: Implement sending typing notifications
Gary Kramlich <grim@reaperworld.com>
parents: 42799
diff changeset
299 purple_ircv3_protocol_conversation_send_typing;
42320
21cab78fb7d2 IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
300 }

mercurial