protocols/ircv3/purpleircv3commands.h

Thu, 24 Apr 2025 22:19:39 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 24 Apr 2025 22:19:39 -0500
changeset 43242
a9bc19e23c36
parent 43126
5b5a883528e0
child 43290
01edcfbfebaa
permissions
-rw-r--r--

IRCv3: check if a member is in a conversation before adding them

Awhile ago we update the NAMREPLY handler to build a separate
Purple.ConversationMembers and then splice that onto the existing one to help
with sorting and other performance issues. However, we didn't check if the
users already existed in the existing list, so we would get duplicates. This
address that.

Also fixed a reference leak.

Testing Done:
Joined a channel and sent `/quote names #channel` multiple times and verified that the member list did not grow to include a bunch of duplicates.

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

43097
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Purple - Internet Messaging Library
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This library is free software; you can redistribute it and/or modify
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This library is distributed in the hope that it will be useful,
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this library; if not, see <https://www.gnu.org/licenses/>.
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #if !defined(PURPLE_IRCV3_GLOBAL_HEADER_INSIDE) && \
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24 !defined(PURPLE_IRCV3_COMPILATION)
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 # error "only <libpurple/protocols/ircv3.h> may be included directly"
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26 #endif
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 #ifndef PURPLE_IRCV3_COMMANDS_H
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 #define PURPLE_IRCV3_COMMANDS_H
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 #include <glib.h>
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 #include <purple.h>
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 G_BEGIN_DECLS
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 G_GNUC_INTERNAL gboolean purple_ircv3_command_query_cb(PurpleCommand *command, PurpleConversation *conversation, GStrv params, gpointer data);
43126
5b5a883528e0 IRCv3: Add the quote command to send raw messages
Gary Kramlich <grim@reaperworld.com>
parents: 43097
diff changeset
38 G_GNUC_INTERNAL gboolean purple_ircv3_command_quote_cb(PurpleCommand *command, PurpleConversation *conversation, GStrv params, gpointer data);
43097
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 G_END_DECLS
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41
757575456cc2 IRCv3: Implement the query command
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 #endif /* PURPLE_IRCV3_COMMANDS_H */

mercurial