libpurple/purplechatconversation.c

Tue, 03 Aug 2021 03:04:06 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Tue, 03 Aug 2021 03:04:06 -0500
changeset 41007
90d2dee9b3dc
parent 40992
3a973a9c5a64
child 41137
3c1574216aed
permissions
-rw-r--r--

Fix the includes for the purpleenums rename

Testing Done:
Full build after a `meson --wipe`

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

34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1 /*
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
2 * purple
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
3 *
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
6 * source distribution.
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
7 *
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
11 * (at your option) any later version.
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
12 *
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
16 * GNU General Public License for more details.
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
17 *
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
21 */
40441
f23c7e772667 Make sure we're not including the gettext macros in header files and deal with the repercussions of that.
Gary Kramlich <grim@reaperworld.com>
parents: 40439
diff changeset
22
f23c7e772667 Make sure we're not including the gettext macros in header files and deal with the repercussions of that.
Gary Kramlich <grim@reaperworld.com>
parents: 40439
diff changeset
23 #include <glib/gi18n-lib.h>
f23c7e772667 Make sure we're not including the gettext macros in header files and deal with the repercussions of that.
Gary Kramlich <grim@reaperworld.com>
parents: 40439
diff changeset
24
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
25 #include "internal.h"
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
26 #include "debug.h"
40992
3a973a9c5a64 migrate libpurple to the ConversationManager API
Gary Kramlich <grim@reaperworld.com>
parents: 40885
diff changeset
27 #include "purpleconversationmanager.h"
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
28 #include "purplechatconversation.h"
41007
90d2dee9b3dc Fix the includes for the purpleenums rename
Gary Kramlich <grim@reaperworld.com>
parents: 40992
diff changeset
29 #include "purpleenums.h"
40439
e9838d634d5e Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents: 40244
diff changeset
30 #include "purpleprivate.h"
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
31
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
32 typedef struct {
35460
96946e21fce5 Fix some more gtk-doc warnings till dnssrv
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
33 GList *ignored; /* Ignored users. */
96946e21fce5 Fix some more gtk-doc warnings till dnssrv
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
34 char *who; /* The person who set the topic. */
96946e21fce5 Fix some more gtk-doc warnings till dnssrv
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
35 char *topic; /* The topic. */
96946e21fce5 Fix some more gtk-doc warnings till dnssrv
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
36 int id; /* The chat ID. */
96946e21fce5 Fix some more gtk-doc warnings till dnssrv
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
37 char *nick; /* Your nick in this chat. */
96946e21fce5 Fix some more gtk-doc warnings till dnssrv
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
38 gboolean left; /* We left the chat and kept the window open */
96946e21fce5 Fix some more gtk-doc warnings till dnssrv
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
39 GHashTable *users; /* Hash table of the users in the room. */
39535
beb0afdb325c Regroup conversation types definitions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39423
diff changeset
40 } PurpleChatConversationPrivate;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
41
34646
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
42 /* Chat Property enums */
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
43 enum {
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
44 PROP_0,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
45 PROP_TOPIC_WHO,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
46 PROP_TOPIC,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
47 PROP_CHAT_ID,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
48 PROP_NICK,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
49 PROP_LEFT,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
50 N_PROPERTIES
34646
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
51 };
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
52 static GParamSpec *properties[N_PROPERTIES] = { NULL, };
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
53
39535
beb0afdb325c Regroup conversation types definitions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39423
diff changeset
54 G_DEFINE_TYPE_WITH_PRIVATE(PurpleChatConversation, purple_chat_conversation,
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
55 PURPLE_TYPE_CONVERSATION);
39535
beb0afdb325c Regroup conversation types definitions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39423
diff changeset
56
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
57 /**************************************************************************
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
58 * Helpers
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
59 **************************************************************************/
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
60 static guint
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
61 purple_conversation_user_hash(gconstpointer data) {
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
62 gchar *collated;
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
63 guint hash;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
64
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
65 collated = g_utf8_collate_key((const gchar *)data, -1);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
66 hash = g_str_hash(collated);
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
67 g_free(collated);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
68
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
69 return hash;
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
70 }
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
71
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
72 static gboolean
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
73 purple_conversation_user_equal(gconstpointer a, gconstpointer b) {
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
74 return !g_utf8_collate(a, b);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
75 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
76
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
77 static void
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
78 purple_chat_conversation_clear_users_helper(gpointer data, gpointer user_data)
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
79 {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
80 PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(user_data);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
81 const gchar *name = (const gchar *)data;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
82 gpointer handle = purple_conversations_get_handle();
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
83
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
84 purple_signal_emit(handle, "chat-user-leaving", chat, name, NULL);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
85 purple_signal_emit(handle, "chat-user-left", chat, name, NULL);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
86 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
87
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
88 /******************************************************************************
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
89 * PurpleConversation Implementation
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
90 *****************************************************************************/
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
91 static void
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
92 chat_conversation_write_message(PurpleConversation *conv, PurpleMessage *msg) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
93 PurpleChatConversation *chat_conv = PURPLE_CHAT_CONVERSATION(conv);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
94 PurpleChatConversationPrivate *priv = NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
95 PurpleMessageFlags flags;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
96 const gchar *author = NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
97
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
98 g_return_if_fail(msg != NULL);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
99
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
100 priv = purple_chat_conversation_get_instance_private(chat_conv);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
101
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
102 /* Don't display this if the person who wrote it is ignored. */
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
103 author = purple_message_get_author(msg);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
104 if(purple_chat_conversation_is_ignored_user(chat_conv, author)) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
105 return;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
106 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
107
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
108 flags = purple_message_get_flags(msg);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
109 if(flags & PURPLE_MESSAGE_RECV) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
110 if(purple_utf8_has_word(purple_message_get_contents(msg), priv->nick)) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
111 flags |= PURPLE_MESSAGE_NICK;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
112 purple_message_set_flags(msg, flags);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
113 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
114 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
115
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
116 _purple_conversation_write_common(conv, msg);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
117 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
118
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
119 /******************************************************************************
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
120 * GObject Implementation
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
121 *****************************************************************************/
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
122 static void
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
123 purple_chat_conversation_set_property(GObject *obj, guint param_id,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
124 const GValue *value, GParamSpec *pspec)
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
125 {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
126 PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(obj);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
127
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
128 switch(param_id) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
129 case PROP_CHAT_ID:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
130 purple_chat_conversation_set_id(chat, g_value_get_int(value));
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
131 break;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
132 case PROP_NICK:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
133 purple_chat_conversation_set_nick(chat, g_value_get_string(value));
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
134 break;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
135 case PROP_LEFT:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
136 if(g_value_get_boolean(value)) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
137 purple_chat_conversation_leave(chat);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
138 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
139 break;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
140 default:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
141 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
142 break;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
143 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
144 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
145
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
146 static void
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
147 purple_chat_conversation_get_property(GObject *obj, guint param_id,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
148 GValue *value, GParamSpec *pspec)
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
149 {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
150 PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(obj);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
151
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
152 switch(param_id) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
153 case PROP_TOPIC_WHO:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
154 g_value_set_string(value, purple_chat_conversation_get_topic_who(chat));
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
155 break;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
156 case PROP_TOPIC:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
157 g_value_set_string(value, purple_chat_conversation_get_topic(chat));
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
158 break;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
159 case PROP_CHAT_ID:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
160 g_value_set_int(value, purple_chat_conversation_get_id(chat));
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
161 break;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
162 case PROP_NICK:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
163 g_value_set_string(value, purple_chat_conversation_get_nick(chat));
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
164 break;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
165 case PROP_LEFT:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
166 g_value_set_boolean(value, purple_chat_conversation_has_left(chat));
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
167 break;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
168 default:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
169 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
170 break;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
171 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
172 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
173
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
174 static void
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
175 purple_chat_conversation_init(PurpleChatConversation *chat) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
176 PurpleChatConversationPrivate *priv = NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
177
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
178 priv = purple_chat_conversation_get_instance_private(chat);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
179
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
180 priv->users = g_hash_table_new_full(purple_conversation_user_hash,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
181 purple_conversation_user_equal,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
182 g_free, g_object_unref);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
183 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
184
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
185 static void
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
186 purple_chat_conversation_constructed(GObject *obj) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
187 PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(obj);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
188 PurpleAccount *account = NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
189 PurpleConnection *connection = NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
190 const gchar *display_name = NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
191
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
192 G_OBJECT_CLASS(purple_chat_conversation_parent_class)->constructed(obj);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
193
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
194 g_object_get(obj, "account", &account, NULL);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
195
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
196 connection = purple_account_get_connection(account);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
197 display_name = purple_connection_get_display_name(connection);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
198 if(display_name != NULL) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
199 purple_chat_conversation_set_nick(chat, display_name);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
200 } else {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
201 const gchar *username = purple_account_get_username(account);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
202
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
203 purple_chat_conversation_set_nick(chat, username);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
204 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
205
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
206 if(purple_prefs_get_bool("/purple/logging/log_chats")) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
207 purple_conversation_set_logging(PURPLE_CONVERSATION(chat), TRUE);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
208 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
209
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
210 g_object_unref(account);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
211 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
212
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
213 static void
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
214 purple_chat_conversation_dispose(GObject *obj) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
215 PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(obj);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
216 PurpleChatConversationPrivate *priv = NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
217
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
218 priv = purple_chat_conversation_get_instance_private(chat);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
219
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
220 g_hash_table_remove_all(priv->users);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
221
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
222 G_OBJECT_CLASS(purple_chat_conversation_parent_class)->dispose(obj);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
223 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
224
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
225 static void
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
226 purple_chat_conversation_finalize(GObject *obj) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
227 PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(obj);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
228 PurpleConversation *conv = PURPLE_CONVERSATION(chat);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
229 PurpleConnection *gc = purple_conversation_get_connection(conv);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
230 PurpleChatConversationPrivate *priv = NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
231
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
232 priv = purple_chat_conversation_get_instance_private(chat);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
233
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
234 if(PURPLE_IS_CONNECTION(gc)) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
235 /* Still connected */
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
236 gint chat_id = purple_chat_conversation_get_id(chat);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
237
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
238 /*
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
239 * Close the window when the user tells us to, and let the protocol
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
240 * deal with the internals on its own time. Don't do this if the
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
241 * protocol already knows it left the chat.
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
242 */
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
243 if(!purple_chat_conversation_has_left(chat)) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
244 purple_serv_chat_leave(gc, chat_id);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
245 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
246
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
247 /*
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
248 * If they didn't call purple_serv_got_chat_left by now, it's too late.
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
249 * So we better do it for them before we destroy the thing.
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
250 */
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
251 if(!purple_chat_conversation_has_left(chat)) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
252 purple_serv_got_chat_left(gc, chat_id);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
253 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
254 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
255
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
256 g_clear_pointer(&priv->users, g_hash_table_destroy);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
257
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
258 g_list_free_full(priv->ignored, g_free);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
259 priv->ignored = NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
260
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
261 g_clear_pointer(&priv->who, g_free);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
262 g_clear_pointer(&priv->topic, g_free);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
263 g_clear_pointer(&priv->nick, g_free);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
264
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
265 G_OBJECT_CLASS(purple_chat_conversation_parent_class)->finalize(obj);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
266 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
267
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
268 static void
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
269 purple_chat_conversation_class_init(PurpleChatConversationClass *klass) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
270 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
271 PurpleConversationClass *conv_class = PURPLE_CONVERSATION_CLASS(klass);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
272
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
273 obj_class->constructed = purple_chat_conversation_constructed;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
274 obj_class->dispose = purple_chat_conversation_dispose;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
275 obj_class->finalize = purple_chat_conversation_finalize;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
276 obj_class->get_property = purple_chat_conversation_get_property;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
277 obj_class->set_property = purple_chat_conversation_set_property;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
278
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
279 conv_class->write_message = chat_conversation_write_message;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
280
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
281 /**
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
282 * PurpleChatConversation::topic-who:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
283 *
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
284 * The username who changed the topic last.
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
285 */
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
286 properties[PROP_TOPIC_WHO] = g_param_spec_string(
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
287 "topic-who", "who set topic",
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
288 "Who set the topic of the chat.",
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
289 NULL,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
290 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
291
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
292 /**
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
293 * PurpleChatConversation::topic:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
294 *
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
295 * The text of the topic.
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
296 */
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
297 properties[PROP_TOPIC] = g_param_spec_string(
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
298 "topic", "topic",
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
299 "The topic of the chat.",
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
300 NULL,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
301 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
302
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
303 /**
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
304 * PurpleChatConversation::chat-id:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
305 *
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
306 * The identifier of the chat.
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
307 */
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
308 properties[PROP_CHAT_ID] = g_param_spec_int(
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
309 "chat-id", "chat id",
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
310 "The identifier of the chat.",
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
311 G_MININT, G_MAXINT, 0,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
312 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
313
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
314 /**
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
315 * PurpleChatConversation::nick:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
316 *
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
317 * The nickname of the user in the chat.
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
318 */
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
319 properties[PROP_NICK] = g_param_spec_string(
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
320 "nick", "nick",
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
321 "The nickname of the user in a chat.",
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
322 NULL,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
323 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
324
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
325 /**
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
326 * PurpleChatConversation::left:
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
327 *
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
328 * Whether the user has left the chat or not.
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
329 */
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
330 properties[PROP_LEFT] = g_param_spec_boolean(
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
331 "left", "left",
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
332 "Whether the user has left the chat.",
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
333 FALSE,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
334 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
335
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
336 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
337 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
338
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
339 /******************************************************************************
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
340 * Public API
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
341 *****************************************************************************/
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40838
diff changeset
342 PurpleConversation *
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
343 purple_chat_conversation_new(PurpleAccount *account, const gchar *name) {
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40838
diff changeset
344 PurpleConversation *chat = NULL;
40992
3a973a9c5a64 migrate libpurple to the ConversationManager API
Gary Kramlich <grim@reaperworld.com>
parents: 40885
diff changeset
345 PurpleConversationManager *manager = NULL;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
346 PurpleConnection *connection = NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
347
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
348 g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
349 g_return_val_if_fail(name != NULL, NULL);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
350
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
351 /* Check if this conversation already exists. */
40992
3a973a9c5a64 migrate libpurple to the ConversationManager API
Gary Kramlich <grim@reaperworld.com>
parents: 40885
diff changeset
352 manager = purple_conversation_manager_get_default();
3a973a9c5a64 migrate libpurple to the ConversationManager API
Gary Kramlich <grim@reaperworld.com>
parents: 40885
diff changeset
353 chat = purple_conversation_manager_find_chat(manager, account, name);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
354 if(PURPLE_IS_CHAT_CONVERSATION(chat)) {
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40838
diff changeset
355 if(!purple_chat_conversation_has_left(PURPLE_CHAT_CONVERSATION(chat))) {
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
356 purple_debug_warning("chat-conversation", "A chat named %s "
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
357 "already exists.", name);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
358 return NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
359 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
360 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
361
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
362 connection = purple_account_get_connection(account);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
363 if(!PURPLE_IS_CONNECTION(connection)) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
364 purple_debug_warning("chat-conversation", "Refusing to create chat "
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
365 "for disconnected account %s",
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
366 purple_account_get_username(account));
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
367 return NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
368 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
369
40885
87f6241da196 Update purple_conversations_find_* to return PurpleConversations instead of subclasses
Gary Kramlich <grim@reaperworld.com>
parents: 40838
diff changeset
370 return PURPLE_CONVERSATION(g_object_new(
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
371 PURPLE_TYPE_CHAT_CONVERSATION,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
372 "account", account,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
373 "name", name,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
374 "title", name,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
375 NULL));
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
376 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
377
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
378 GList *
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
379 purple_chat_conversation_get_users(PurpleChatConversation *chat) {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
380 PurpleChatConversationPrivate *priv = NULL;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
381
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
382 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
383
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
384 priv = purple_chat_conversation_get_instance_private(chat);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
385
35639
7391a9c98a1d Remove _PurpleChatConversationPrivate->in_room
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35638
diff changeset
386 return g_hash_table_get_values(priv->users);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
387 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
388
35638
1ae6f7c41db3 Implement purple_chat_conversation_get_users_count and use it instead of counting the list
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
389 guint
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
390 purple_chat_conversation_get_users_count(PurpleChatConversation *chat) {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
391 PurpleChatConversationPrivate *priv = NULL;
35638
1ae6f7c41db3 Implement purple_chat_conversation_get_users_count and use it instead of counting the list
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
392
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
393 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), 0);
35638
1ae6f7c41db3 Implement purple_chat_conversation_get_users_count and use it instead of counting the list
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
394
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
395 priv = purple_chat_conversation_get_instance_private(chat);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
396
35638
1ae6f7c41db3 Implement purple_chat_conversation_get_users_count and use it instead of counting the list
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
397 return g_hash_table_size(priv->users);
1ae6f7c41db3 Implement purple_chat_conversation_get_users_count and use it instead of counting the list
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
398 }
1ae6f7c41db3 Implement purple_chat_conversation_get_users_count and use it instead of counting the list
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
399
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
400 void
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
401 purple_chat_conversation_ignore(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
402 const gchar *name)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
403 {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
404 PurpleChatConversationPrivate *priv = NULL;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
405
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
406 g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
407 g_return_if_fail(name != NULL);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
408
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
409 priv = purple_chat_conversation_get_instance_private(chat);
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
410
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
411 /* Make sure the user isn't already ignored. */
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
412 if(purple_chat_conversation_is_ignored_user(chat, name)) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
413 return;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
414 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
415
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
416 priv->ignored = g_list_prepend(priv->ignored, g_strdup(name));
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
417 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
418
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
419 void
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
420 purple_chat_conversation_unignore(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
421 const gchar *name)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
422 {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
423 PurpleChatConversationPrivate *priv = NULL;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
424 GList *item;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
425
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
426 g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
427 g_return_if_fail(name != NULL);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
428
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
429 priv = purple_chat_conversation_get_instance_private(chat);
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
430
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
431 /* Make sure the user is actually ignored. */
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
432 if(!purple_chat_conversation_is_ignored_user(chat, name)) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
433 return;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
434 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
435
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
436 item = g_list_find(priv->ignored,
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
437 purple_chat_conversation_get_ignored_user(chat, name));
40061
b3ac7a4a6fc7 Replace g_list_remove_link+g_list_free_1 with g_list_delete_link
qarkai <qarkai@gmail.com>
parents: 39908
diff changeset
438 g_free(item->data);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
439
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
440 priv->ignored = g_list_delete_link(priv->ignored, item);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
441 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
442
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
443 GList *
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
444 purple_chat_conversation_set_ignored(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
445 GList *ignored)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
446 {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
447 PurpleChatConversationPrivate *priv = NULL;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
448
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
449 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
450
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
451 priv = purple_chat_conversation_get_instance_private(chat);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
452
34646
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
453 priv->ignored = ignored;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
454
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
455 return ignored;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
456 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
457
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
458 GList *
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
459 purple_chat_conversation_get_ignored(PurpleChatConversation *chat) {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
460 PurpleChatConversationPrivate *priv = NULL;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
461
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
462 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
463
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
464 priv = purple_chat_conversation_get_instance_private(chat);
34646
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
465 return priv->ignored;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
466 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
467
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
468 const gchar *
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
469 purple_chat_conversation_get_ignored_user(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
470 const gchar *user)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
471 {
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
472 GList *ignored;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
473
34983
81638be26f41 Check types of GObjects instead of just for NULL values
Ankit Vani <a@nevitus.org>
parents: 34945
diff changeset
474 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
475 g_return_val_if_fail(user != NULL, NULL);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
476
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
477 ignored = purple_chat_conversation_get_ignored(chat);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
478 for(; ignored != NULL; ignored = ignored->next) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
479 const gchar *ign = (const gchar *)ignored->data;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
480
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
481 if(!purple_utf8_strcasecmp(user, ign) ||
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
482 ((*ign == '+' || *ign == '%') &&
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
483 !purple_utf8_strcasecmp(user, ign + 1)))
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
484 {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
485 return ign;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
486 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
487
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
488 if(*ign == '@') {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
489 ign++;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
490
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
491 if((*ign == '+' && !purple_utf8_strcasecmp(user, ign + 1)) ||
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
492 (*ign != '+' && !purple_utf8_strcasecmp(user, ign)))
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
493 {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
494 return ign;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
495 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
496 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
497 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
498
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
499 return NULL;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
500 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
501
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
502 gboolean
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
503 purple_chat_conversation_is_ignored_user(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
504 const gchar *user)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
505 {
34983
81638be26f41 Check types of GObjects instead of just for NULL values
Ankit Vani <a@nevitus.org>
parents: 34945
diff changeset
506 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), FALSE);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
507 g_return_val_if_fail(user != NULL, FALSE);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
508
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
509 return (purple_chat_conversation_get_ignored_user(chat, user) != NULL);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
510 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
511
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
512 void
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
513 purple_chat_conversation_set_topic(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
514 const gchar *who, const gchar *topic)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
515 {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
516 PurpleChatConversationPrivate *priv = NULL;
35066
f997e5384f79 libpurple: Use G_PARAM_STATIC_STRINGS and ensure g_object_notify is always called
Ankit Vani <a@nevitus.org>
parents: 35058
diff changeset
517 GObject *obj;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
518
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
519 g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
520
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
521 priv = purple_chat_conversation_get_instance_private(chat);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
522
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
523 g_clear_pointer(&priv->who, g_free);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
524 g_clear_pointer(&priv->topic, g_free);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
525
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
526 priv->who = g_strdup(who);
34646
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
527 priv->topic = g_strdup(topic);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
528
35066
f997e5384f79 libpurple: Use G_PARAM_STATIC_STRINGS and ensure g_object_notify is always called
Ankit Vani <a@nevitus.org>
parents: 35058
diff changeset
529 obj = G_OBJECT(chat);
f997e5384f79 libpurple: Use G_PARAM_STATIC_STRINGS and ensure g_object_notify is always called
Ankit Vani <a@nevitus.org>
parents: 35058
diff changeset
530 g_object_freeze_notify(obj);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
531 g_object_notify_by_pspec(obj, properties[PROP_TOPIC_WHO]);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
532 g_object_notify_by_pspec(obj, properties[PROP_TOPIC]);
35066
f997e5384f79 libpurple: Use G_PARAM_STATIC_STRINGS and ensure g_object_notify is always called
Ankit Vani <a@nevitus.org>
parents: 35058
diff changeset
533 g_object_thaw_notify(obj);
f997e5384f79 libpurple: Use G_PARAM_STATIC_STRINGS and ensure g_object_notify is always called
Ankit Vani <a@nevitus.org>
parents: 35058
diff changeset
534
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
535 purple_conversation_update(PURPLE_CONVERSATION(chat),
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
536 PURPLE_CONVERSATION_UPDATE_TOPIC);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
537
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
538 purple_signal_emit(purple_conversations_get_handle(), "chat-topic-changed",
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
539 chat, priv->who, priv->topic);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
540 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
541
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
542 const gchar *
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
543 purple_chat_conversation_get_topic(PurpleChatConversation *chat) {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
544 PurpleChatConversationPrivate *priv = NULL;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
545
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
546 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
547
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
548 priv = purple_chat_conversation_get_instance_private(chat);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
549
34646
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
550 return priv->topic;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
551 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
552
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
553 const gchar *
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
554 purple_chat_conversation_get_topic_who(PurpleChatConversation *chat) {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
555 PurpleChatConversationPrivate *priv = NULL;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
556
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
557 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
34648
a6587d8cf907 Added missing API implementations to PurpleConversation and subclasses
Ankit Vani <a@nevitus.org>
parents: 34646
diff changeset
558
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
559 priv = purple_chat_conversation_get_instance_private(chat);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
560
34648
a6587d8cf907 Added missing API implementations to PurpleConversation and subclasses
Ankit Vani <a@nevitus.org>
parents: 34646
diff changeset
561 return priv->who;
a6587d8cf907 Added missing API implementations to PurpleConversation and subclasses
Ankit Vani <a@nevitus.org>
parents: 34646
diff changeset
562 }
a6587d8cf907 Added missing API implementations to PurpleConversation and subclasses
Ankit Vani <a@nevitus.org>
parents: 34646
diff changeset
563
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
564 void
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
565 purple_chat_conversation_set_id(PurpleChatConversation *chat, gint id) {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
566 PurpleChatConversationPrivate *priv = NULL;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
567
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
568 g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
569
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
570 priv = purple_chat_conversation_get_instance_private(chat);
34646
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
571 priv->id = id;
35012
e07a9b9c6bda Cleaned up properties and added g_object_notify calls for PurpleConnection and PurpleConversation's
Ankit Vani <a@nevitus.org>
parents: 34986
diff changeset
572
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
573 g_object_notify_by_pspec(G_OBJECT(chat), properties[PROP_CHAT_ID]);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
574 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
575
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
576 gint
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
577 purple_chat_conversation_get_id(PurpleChatConversation *chat) {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
578 PurpleChatConversationPrivate *priv = NULL;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
579
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
580 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), -1);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
581
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
582 priv = purple_chat_conversation_get_instance_private(chat);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
583
34646
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
584 return priv->id;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
585 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
586
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
587 void
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
588 purple_chat_conversation_add_user(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
589 const gchar *user, const gchar *extra_msg,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
590 PurpleChatUserFlags flags,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
591 gboolean new_arrival)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
592 {
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
593 GList *users = g_list_append(NULL, (gchar *)user);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
594 GList *extra_msgs = g_list_append(NULL, (gchar *)extra_msg);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
595 GList *flags2 = g_list_append(NULL, GINT_TO_POINTER(flags));
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
596
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
597 purple_chat_conversation_add_users(chat, users, extra_msgs, flags2,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
598 new_arrival);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
599
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
600 g_list_free(users);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
601 g_list_free(extra_msgs);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
602 g_list_free(flags2);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
603 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
604
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
605 void
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
606 purple_chat_conversation_add_users(PurpleChatConversation *chat, GList *users,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
607 GList *extra_msgs, GList *flags,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
608 gboolean new_arrivals)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
609 {
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
610 PurpleConversation *conv;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
611 PurpleConversationUiOps *ops;
34670
9bd5bd903dc7 Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents: 34669
diff changeset
612 PurpleChatUser *chatuser;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
613 PurpleChatConversationPrivate *priv;
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
614 PurpleAccount *account;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
615 PurpleConnection *gc;
36544
1bf8b6ef5aea Renamed PurplePluginProtocolInfo to PurpleProtocol
Ankit Vani <a@nevitus.org>
parents: 36366
diff changeset
616 PurpleProtocol *protocol;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
617 GList *cbuddies = NULL;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
618 gpointer handle;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
619
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
620 g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
621 g_return_if_fail(users != NULL);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
622
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
623 priv = purple_chat_conversation_get_instance_private(chat);
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
624 conv = PURPLE_CONVERSATION(chat);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
625 ops = purple_conversation_get_ui_ops(conv);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
626
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
627 account = purple_conversation_get_account(conv);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
628 gc = purple_conversation_get_connection(conv);
34983
81638be26f41 Check types of GObjects instead of just for NULL values
Ankit Vani <a@nevitus.org>
parents: 34945
diff changeset
629 g_return_if_fail(PURPLE_IS_CONNECTION(gc));
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
630
36623
caaadef03507 Renamed purple_connection_get_protocol_info() to purple_connection_get_protocol()
Ankit Vani <a@nevitus.org>
parents: 36610
diff changeset
631 protocol = purple_connection_get_protocol(gc);
36844
b62140058cd3 Check for valid PurpleProtocols
Ankit Vani <a@nevitus.org>
parents: 36843
diff changeset
632 g_return_if_fail(PURPLE_IS_PROTOCOL(protocol));
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
633
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
634 handle = purple_conversations_get_handle();
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
635
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
636 while(users != NULL && flags != NULL) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
637 const gchar *user = (const gchar *)users->data;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
638 const gchar *alias = user;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
639 gboolean quiet;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
640 PurpleChatUserFlags flag = GPOINTER_TO_INT(flags->data);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
641 const gchar *extra_msg = (extra_msgs ? extra_msgs->data : NULL);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
642
36607
7ad7681dcfd8 Use purple_protocol_get_* API instead of protocol->member
Ankit Vani <a@nevitus.org>
parents: 36606
diff changeset
643 if(!(purple_protocol_get_options(protocol) & OPT_PROTO_UNIQUE_CHATNAME)) {
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
644 if(purple_strequal(priv->nick, purple_normalize(account, user))) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
645 const gchar *alias2 = purple_account_get_private_alias(account);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
646 if(alias2 != NULL) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
647 alias = alias2;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
648 } else {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
649 const gchar *display_name = purple_connection_get_display_name(gc);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
650 if(display_name != NULL) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
651 alias = display_name;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
652 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
653 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
654 } else {
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
655 PurpleBuddy *buddy;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
656 if((buddy = purple_blist_find_buddy(purple_connection_get_account(gc), user)) != NULL) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
657 alias = purple_buddy_get_contact_alias(buddy);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
658 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
659 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
660 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
661
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
662 quiet = GPOINTER_TO_INT(purple_signal_emit_return_1(handle,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
663 "chat-user-joining", chat, user, flag)) ||
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
664 purple_chat_conversation_is_ignored_user(chat, user);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
665
34670
9bd5bd903dc7 Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents: 34669
diff changeset
666 chatuser = purple_chat_user_new(chat, user, alias, flag);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
667
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
668 g_hash_table_replace(priv->users,
35639
7391a9c98a1d Remove _PurpleChatConversationPrivate->in_room
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35638
diff changeset
669 g_strdup(purple_chat_user_get_name(chatuser)),
7391a9c98a1d Remove _PurpleChatConversationPrivate->in_room
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35638
diff changeset
670 chatuser);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
671
34670
9bd5bd903dc7 Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents: 34669
diff changeset
672 cbuddies = g_list_prepend(cbuddies, chatuser);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
673
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
674 if(!quiet && new_arrivals) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
675 gchar *alias_esc = g_markup_escape_text(alias, -1);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
676 gchar *tmp;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
677
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
678 if(extra_msg == NULL) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
679 tmp = g_strdup_printf(_("%s entered the room."), alias_esc);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
680 } else {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
681 gchar *extra_msg_esc = g_markup_escape_text(extra_msg, -1);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
682 tmp = g_strdup_printf(_("%s [<I>%s</I>] entered the room."),
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
683 alias_esc, extra_msg_esc);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
684 g_free(extra_msg_esc);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
685 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
686 g_free(alias_esc);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
687
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
688 purple_conversation_write_system_message(conv, tmp,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
689 PURPLE_MESSAGE_NO_LINKIFY);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
690 g_free(tmp);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
691 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
692
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
693 purple_signal_emit(handle, "chat-user-joined", chat, user, flag,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
694 new_arrivals);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
695
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
696 users = users->next;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
697 flags = flags->next;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
698 if(extra_msgs != NULL) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
699 extra_msgs = extra_msgs->next;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
700 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
701 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
702
34670
9bd5bd903dc7 Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents: 34669
diff changeset
703 cbuddies = g_list_sort(cbuddies, (GCompareFunc)purple_chat_user_compare);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
704
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
705 if(ops != NULL && ops->chat_add_users != NULL) {
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
706 ops->chat_add_users(chat, cbuddies, new_arrivals);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
707 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
708
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
709 g_list_free(cbuddies);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
710 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
711
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
712 void
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
713 purple_chat_conversation_rename_user(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
714 const gchar *old_user,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
715 const gchar *new_user)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
716 {
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
717 PurpleConversation *conv;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
718 PurpleConversationUiOps *ops;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
719 PurpleAccount *account;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
720 PurpleConnection *gc;
36544
1bf8b6ef5aea Renamed PurplePluginProtocolInfo to PurpleProtocol
Ankit Vani <a@nevitus.org>
parents: 36366
diff changeset
721 PurpleProtocol *protocol;
34670
9bd5bd903dc7 Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents: 34669
diff changeset
722 PurpleChatUser *cb;
9bd5bd903dc7 Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents: 34669
diff changeset
723 PurpleChatUserFlags flags;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
724 PurpleChatConversationPrivate *priv;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
725 const gchar *new_alias = new_user;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
726 gchar tmp[BUF_LONG];
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
727 gboolean is_me = FALSE;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
728
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
729 g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
730 g_return_if_fail(old_user != NULL);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
731 g_return_if_fail(new_user != NULL);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
732
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
733 priv = purple_chat_conversation_get_instance_private(chat);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
734 conv = PURPLE_CONVERSATION(chat);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
735 ops = purple_conversation_get_ui_ops(conv);
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
736 account = purple_conversation_get_account(conv);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
737
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
738 gc = purple_conversation_get_connection(conv);
34983
81638be26f41 Check types of GObjects instead of just for NULL values
Ankit Vani <a@nevitus.org>
parents: 34945
diff changeset
739 g_return_if_fail(PURPLE_IS_CONNECTION(gc));
36623
caaadef03507 Renamed purple_connection_get_protocol_info() to purple_connection_get_protocol()
Ankit Vani <a@nevitus.org>
parents: 36610
diff changeset
740 protocol = purple_connection_get_protocol(gc);
36844
b62140058cd3 Check for valid PurpleProtocols
Ankit Vani <a@nevitus.org>
parents: 36843
diff changeset
741 g_return_if_fail(PURPLE_IS_PROTOCOL(protocol));
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
742
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
743 if(purple_strequal(priv->nick, purple_normalize(account, old_user))) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
744 const gchar *alias;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
745
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
746 /* Note this for later. */
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
747 is_me = TRUE;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
748
36607
7ad7681dcfd8 Use purple_protocol_get_* API instead of protocol->member
Ankit Vani <a@nevitus.org>
parents: 36606
diff changeset
749 if(!(purple_protocol_get_options(protocol) & OPT_PROTO_UNIQUE_CHATNAME)) {
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
750 alias = purple_account_get_private_alias(account);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
751 if(alias != NULL) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
752 new_alias = alias;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
753 } else {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
754 const gchar *display_name = purple_connection_get_display_name(gc);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
755 if(display_name != NULL) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
756 new_alias = display_name;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
757 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
758 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
759 }
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
760 } else if(!(purple_protocol_get_options(protocol) & OPT_PROTO_UNIQUE_CHATNAME)) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
761 PurpleBuddy *buddy;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
762 if((buddy = purple_blist_find_buddy(purple_connection_get_account(gc), new_user)) != NULL) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
763 new_alias = purple_buddy_get_contact_alias(buddy);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
764 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
765 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
766
34671
ca9b45be7a63 Renamed chat buddy to chat user in a few more places
Ankit Vani <a@nevitus.org>
parents: 34670
diff changeset
767 flags = purple_chat_user_get_flags(purple_chat_conversation_find_user(chat, old_user));
34670
9bd5bd903dc7 Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents: 34669
diff changeset
768 cb = purple_chat_user_new(chat, new_user, new_alias, flags);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
769
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
770 g_hash_table_replace(priv->users,
35639
7391a9c98a1d Remove _PurpleChatConversationPrivate->in_room
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35638
diff changeset
771 g_strdup(purple_chat_user_get_name(cb)), cb);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
772
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
773 if(ops != NULL && ops->chat_rename_user != NULL) {
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
774 ops->chat_rename_user(chat, old_user, new_user, new_alias);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
775 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
776
34671
ca9b45be7a63 Renamed chat buddy to chat user in a few more places
Ankit Vani <a@nevitus.org>
parents: 34670
diff changeset
777 cb = purple_chat_conversation_find_user(chat, old_user);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
778 if(cb) {
34670
9bd5bd903dc7 Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents: 34669
diff changeset
779 g_hash_table_remove(priv->users, purple_chat_user_get_name(cb));
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
780 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
781
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
782 if(purple_chat_conversation_is_ignored_user(chat, old_user)) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
783 purple_chat_conversation_unignore(chat, old_user);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
784 purple_chat_conversation_ignore(chat, new_user);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
785 } else if(purple_chat_conversation_is_ignored_user(chat, new_user)) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
786 purple_chat_conversation_unignore(chat, new_user);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
787 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
788
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
789 if(is_me) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
790 purple_chat_conversation_set_nick(chat, new_user);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
791 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
792
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
793 if(purple_prefs_get_bool("/purple/conversations/chat/show_nick_change") &&
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
794 !purple_chat_conversation_is_ignored_user(chat, new_user))
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
795 {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
796 if(is_me) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
797 gchar *escaped = g_markup_escape_text(new_user, -1);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
798 g_snprintf(tmp, sizeof(tmp), _("You are now known as %s"),
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
799 escaped);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
800 g_free(escaped);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
801 } else {
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
802 const gchar *old_alias = old_user;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
803 const gchar *new_alias = new_user;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
804 gchar *escaped;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
805 gchar *escaped2;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
806
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
807 if(!(purple_protocol_get_options(protocol) & OPT_PROTO_UNIQUE_CHATNAME)) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
808 PurpleBuddy *buddy;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
809
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
810 if((buddy = purple_blist_find_buddy(account, old_user)) != NULL) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
811 old_alias = purple_buddy_get_contact_alias(buddy);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
812 }
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
813
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
814 if((buddy = purple_blist_find_buddy(account, new_user)) != NULL) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
815 new_alias = purple_buddy_get_contact_alias(buddy);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
816 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
817 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
818
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
819 escaped = g_markup_escape_text(old_alias, -1);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
820 escaped2 = g_markup_escape_text(new_alias, -1);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
821 g_snprintf(tmp, sizeof(tmp), _("%s is now known as %s"), escaped,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
822 escaped2);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
823 g_free(escaped);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
824 g_free(escaped2);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
825 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
826
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
827 purple_conversation_write_system_message(conv, tmp,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
828 PURPLE_MESSAGE_NO_LINKIFY);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
829 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
830 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
831
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
832 void
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
833 purple_chat_conversation_remove_user(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
834 const gchar *user, const gchar *reason)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
835 {
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
836 GList *users = g_list_append(NULL, (gchar *)user);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
837
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
838 purple_chat_conversation_remove_users(chat, users, reason);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
839
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
840 g_list_free(users);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
841 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
842
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
843 void
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
844 purple_chat_conversation_remove_users(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
845 GList *users, const gchar *reason)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
846 {
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
847 PurpleConversation *conv;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
848 PurpleConnection *gc;
36544
1bf8b6ef5aea Renamed PurplePluginProtocolInfo to PurpleProtocol
Ankit Vani <a@nevitus.org>
parents: 36366
diff changeset
849 PurpleProtocol *protocol;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
850 PurpleConversationUiOps *ops;
34670
9bd5bd903dc7 Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents: 34669
diff changeset
851 PurpleChatUser *cb;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
852 PurpleChatConversationPrivate *priv;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
853 GList *l;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
854 gboolean quiet;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
855 gpointer handle;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
856
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
857 g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
858 g_return_if_fail(users != NULL);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
859
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
860 priv = purple_chat_conversation_get_instance_private(chat);
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
861 conv = PURPLE_CONVERSATION(chat);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
862
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
863 gc = purple_conversation_get_connection(conv);
34983
81638be26f41 Check types of GObjects instead of just for NULL values
Ankit Vani <a@nevitus.org>
parents: 34945
diff changeset
864 g_return_if_fail(PURPLE_IS_CONNECTION(gc));
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
865
36623
caaadef03507 Renamed purple_connection_get_protocol_info() to purple_connection_get_protocol()
Ankit Vani <a@nevitus.org>
parents: 36610
diff changeset
866 protocol = purple_connection_get_protocol(gc);
36844
b62140058cd3 Check for valid PurpleProtocols
Ankit Vani <a@nevitus.org>
parents: 36843
diff changeset
867 g_return_if_fail(PURPLE_IS_PROTOCOL(protocol));
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
868
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
869 ops = purple_conversation_get_ui_ops(conv);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
870 handle = purple_conversations_get_handle();
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
871
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
872 for(l = users; l != NULL; l = l->next) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
873 const gchar *user = (const gchar *)l->data;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
874 quiet = GPOINTER_TO_INT(purple_signal_emit_return_1(handle,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
875 "chat-user-leaving", chat, user, reason)) |
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
876 purple_chat_conversation_is_ignored_user(chat, user);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
877
34671
ca9b45be7a63 Renamed chat buddy to chat user in a few more places
Ankit Vani <a@nevitus.org>
parents: 34670
diff changeset
878 cb = purple_chat_conversation_find_user(chat, user);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
879
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
880 if(cb) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
881 g_hash_table_remove(priv->users, purple_chat_user_get_name(cb));
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
882 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
883
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
884 /* NOTE: Don't remove them from ignored in case they re-enter. */
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
885 if(!quiet) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
886 const gchar *alias = user;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
887 gchar *alias_esc;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
888 gchar *tmp;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
889
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
890 if(!(purple_protocol_get_options(protocol) & OPT_PROTO_UNIQUE_CHATNAME)) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
891 PurpleBuddy *buddy;
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
892
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
893 if((buddy = purple_blist_find_buddy(purple_connection_get_account(gc), user)) != NULL) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
894 alias = purple_buddy_get_contact_alias(buddy);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
895 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
896 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
897
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
898 alias_esc = g_markup_escape_text(alias, -1);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
899
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
900 if(reason == NULL || !*reason) {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
901 tmp = g_strdup_printf(_("%s left the room."), alias_esc);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
902 } else {
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
903 char *reason_esc = g_markup_escape_text(reason, -1);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
904 tmp = g_strdup_printf(_("%s left the room (%s)."),
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
905 alias_esc, reason_esc);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
906 g_free(reason_esc);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
907 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
908 g_free(alias_esc);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
909
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
910 purple_conversation_write_system_message(conv, tmp,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
911 PURPLE_MESSAGE_NO_LINKIFY);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
912 g_free(tmp);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
913 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
914
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
915 purple_signal_emit(handle, "chat-user-left", conv, user, reason);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
916 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
917
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
918 if(ops != NULL && ops->chat_remove_users != NULL) {
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
919 ops->chat_remove_users(chat, users);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
920 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
921 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
922
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
923 void
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
924 purple_chat_conversation_clear_users(PurpleChatConversation *chat) {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
925 PurpleChatConversationPrivate *priv = NULL;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
926 PurpleConversationUiOps *ops = NULL;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
927 GList *names = NULL;
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
928
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
929 g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
930
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
931 priv = purple_chat_conversation_get_instance_private(chat);
35639
7391a9c98a1d Remove _PurpleChatConversationPrivate->in_room
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35638
diff changeset
932 ops = purple_conversation_get_ui_ops(PURPLE_CONVERSATION(chat));
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
933 names = g_hash_table_get_keys(priv->users);
35639
7391a9c98a1d Remove _PurpleChatConversationPrivate->in_room
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35638
diff changeset
934
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
935 if(ops != NULL && ops->chat_remove_users != NULL) {
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
936 ops->chat_remove_users(chat, names);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
937 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
938
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
939 g_list_foreach(names, purple_chat_conversation_clear_users_helper, chat);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
940
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
941 g_list_free(names);
34646
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
942 g_hash_table_remove_all(priv->users);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
943 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
944
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
945 void
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
946 purple_chat_conversation_set_nick(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
947 const gchar *nick)
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
948 {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
949 PurpleChatConversationPrivate *priv = NULL;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
950 PurpleAccount *account = NULL;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
951
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
952 g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
953
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
954 priv = purple_chat_conversation_get_instance_private(chat);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
955
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
956 account = purple_conversation_get_account(PURPLE_CONVERSATION(chat));
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
957
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
958 g_free(priv->nick);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
959 priv->nick = g_strdup(purple_normalize(account, nick));
35012
e07a9b9c6bda Cleaned up properties and added g_object_notify calls for PurpleConnection and PurpleConversation's
Ankit Vani <a@nevitus.org>
parents: 34986
diff changeset
960
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
961 g_object_notify_by_pspec(G_OBJECT(chat), properties[PROP_NICK]);
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
962 }
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
963
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
964 const gchar *
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
965 purple_chat_conversation_get_nick(PurpleChatConversation *chat) {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
966 PurpleChatConversationPrivate *priv = NULL;
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
967
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
968 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
969
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
970 priv = purple_chat_conversation_get_instance_private(chat);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
971
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
972 return priv->nick;
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
973 }
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
974
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
975 static void
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
976 invite_user_to_chat(gpointer data, PurpleRequestFields *fields) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
977 PurpleChatConversation *chat;
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
978 PurpleChatConversationPrivate *priv;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
979 PurpleConnection *pc;
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
980 const gchar *user, *message;
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
981
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
982 chat = PURPLE_CHAT_CONVERSATION(data);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
983 priv = purple_chat_conversation_get_instance_private(chat);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
984
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
985 user = purple_request_fields_get_string(fields, "screenname");
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
986 message = purple_request_fields_get_string(fields, "message");
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
987
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
988 pc = purple_conversation_get_connection(PURPLE_CONVERSATION(chat));
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
989 purple_serv_chat_invite(pc, priv->id, message, user);
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
990 }
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
991
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
992 void
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
993 purple_chat_conversation_invite_user(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
994 const gchar *user, const gchar *message,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
995 gboolean confirm)
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
996 {
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
997 PurpleAccount *account;
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
998 PurpleRequestFields *fields;
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
999 PurpleRequestFieldGroup *group;
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1000 PurpleRequestField *field;
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1001
34983
81638be26f41 Check types of GObjects instead of just for NULL values
Ankit Vani <a@nevitus.org>
parents: 34945
diff changeset
1002 g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1003
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1004 if(user == NULL || *user == '\0' || message == NULL || *message == '\0') {
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1005 confirm = TRUE;
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1006 }
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1007
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
1008 account = purple_conversation_get_account(PURPLE_CONVERSATION(chat));
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1009
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1010 if(!confirm) {
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35460
diff changeset
1011 purple_serv_chat_invite(purple_account_get_connection(account),
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1012 purple_chat_conversation_get_id(chat), message,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1013 user);
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1014 return;
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1015 }
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1016
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1017 fields = purple_request_fields_new();
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1018 group = purple_request_field_group_new(_("Invite to chat"));
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1019 purple_request_fields_add_group(fields, group);
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1020
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1021 field = purple_request_field_string_new("screenname", _("Buddy"), user,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1022 FALSE);
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1023 purple_request_field_group_add_field(group, field);
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1024 purple_request_field_set_required(field, TRUE);
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1025 purple_request_field_set_type_hint(field, "screenname");
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1026
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1027 field = purple_request_field_string_new("message", _("Message"), message,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1028 FALSE);
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1029 purple_request_field_group_add_field(group, field);
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1030
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
1031 purple_request_fields(chat, _("Invite to chat"), NULL,
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1032 _("Please enter the name of the user you wish to "
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1033 "invite, along with an optional invite message."),
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1034 fields,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1035 _("Invite"), G_CALLBACK(invite_user_to_chat),
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1036 _("Cancel"), NULL,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1037 purple_request_cpar_from_conversation(PURPLE_CONVERSATION(chat)),
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1038 chat);
34649
4a0ec0fff2e1 Refactored PurpleConversation base object to use the GObject conversation API
Ankit Vani <a@nevitus.org>
parents: 34648
diff changeset
1039 }
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1040
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1041 gboolean
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1042 purple_chat_conversation_has_user(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1043 const gchar *user)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1044 {
34983
81638be26f41 Check types of GObjects instead of just for NULL values
Ankit Vani <a@nevitus.org>
parents: 34945
diff changeset
1045 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), FALSE);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1046 g_return_val_if_fail(user != NULL, FALSE);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1047
34671
ca9b45be7a63 Renamed chat buddy to chat user in a few more places
Ankit Vani <a@nevitus.org>
parents: 34670
diff changeset
1048 return (purple_chat_conversation_find_user(chat, user) != NULL);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1049 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1050
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1051 void
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1052 purple_chat_conversation_leave(PurpleChatConversation *chat) {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
1053 PurpleChatConversationPrivate *priv = NULL;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
1054
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
1055 g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1056
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
1057 priv = purple_chat_conversation_get_instance_private(chat);
34646
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
1058 priv->left = TRUE;
35066
f997e5384f79 libpurple: Use G_PARAM_STATIC_STRINGS and ensure g_object_notify is always called
Ankit Vani <a@nevitus.org>
parents: 35058
diff changeset
1059
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1060 if(!g_object_get_data(G_OBJECT(chat), "is-finalizing")) {
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1061 g_object_notify_by_pspec(G_OBJECT(chat), properties[PROP_LEFT]);
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1062 }
35066
f997e5384f79 libpurple: Use G_PARAM_STATIC_STRINGS and ensure g_object_notify is always called
Ankit Vani <a@nevitus.org>
parents: 35058
diff changeset
1063
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1064 purple_conversation_update(PURPLE_CONVERSATION(chat),
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1065 PURPLE_CONVERSATION_UPDATE_CHATLEFT);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1066 }
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1067
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1068 gboolean
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1069 purple_chat_conversation_has_left(PurpleChatConversation *chat) {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
1070 PurpleChatConversationPrivate *priv = NULL;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
1071
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
1072 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), TRUE);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1073
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
1074 priv = purple_chat_conversation_get_instance_private(chat);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1075
34646
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
1076 return priv->left;
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
1077 }
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
1078
34670
9bd5bd903dc7 Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents: 34669
diff changeset
1079 PurpleChatUser *
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1080 purple_chat_conversation_find_user(PurpleChatConversation *chat,
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1081 const gchar *name)
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1082 {
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
1083 PurpleChatConversationPrivate *priv = NULL;
34651
88c104a20f4b Refactored the PurpleConversation subclasses and subsystem to use the GObject conversation API.
Ankit Vani <a@nevitus.org>
parents: 34649
diff changeset
1084
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
1085 g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), NULL);
34602
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1086 g_return_val_if_fail(name != NULL, NULL);
dbe6ee43aaa7 Created conversationtypes.[ch] for PurpleChatConversation and PurpleIMConversation
Ankit Vani <a@nevitus.org>
parents:
diff changeset
1087
39782
db027c5e1463 Fix broken `priv != NULL` checks in libpurple.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
1088 priv = purple_chat_conversation_get_instance_private(chat);
40838
73407e00ec5d Modernizing PurpleChatConversation.
Gary Kramlich <grim@reaperworld.com>
parents: 40517
diff changeset
1089
34646
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
1090 return g_hash_table_lookup(priv->users, name);
e7f4631e93f7 Begun adding GObject code to conversation sources
Ankit Vani <a@nevitus.org>
parents: 34620
diff changeset
1091 }

mercurial