libpurple/purplechatconversation.c

Mon, 05 Apr 2021 22:24:57 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Mon, 05 Apr 2021 22:24:57 -0500
changeset 40838
73407e00ec5d
parent 40517
libpurple/conversationtypes.c@5211982886af
child 40885
87f6241da196
permissions
-rw-r--r--

Modernizing PurpleChatConversation.

I wasn't able to do everything as PurpleConversation still isn't declared with
G_DECLARE_DERIVABLE_TYPE.

Testing Done:
Compiled ran locally with both xmpp mucs and irc channels.

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

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

mercurial