annotate libpurple/protocols/jabber/roster.c @ 29414:9e735d7e2f1d

Oops, just realized that caps can be reset in certain situations, and we only want that to happen for the specific resource, not the entire buddy caps.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Thu, 11 Feb 2010 04:15:00 +0000
parents 2f64bfb21c0d
children f7f14706618b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /*
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
2 * purple - Jabber Protocol Plugin
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 *
28398
c585572e80dd Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents: 28132
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
c585572e80dd Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents: 28132
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
c585572e80dd Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents: 28132
diff changeset
6 * source distribution.
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 * (at your option) any later version.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 * GNU General Public License for more details.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19680
44b4e8bd759b The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19455
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
22 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 #include "internal.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
24 #include "debug.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
25 #include "server.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
26 #include "util.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
27
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
28 #include "buddy.h"
28506
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
29 #include "chat.h"
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
30 #include "google.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
31 #include "presence.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
32 #include "roster.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
33 #include "iq.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
35 #include <string.h>
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
36
27575
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
37 /* Take a list of strings and join them with a ", " separator */
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
38 static gchar *roster_groups_join(GSList *list)
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
39 {
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
40 GString *out = g_string_new(NULL);
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
41 for ( ; list; list = list->next) {
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
42 out = g_string_append(out, (const char *)list->data);
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
43 if (list->next)
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
44 out = g_string_append(out, ", ");
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
45 }
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
46
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
47 return g_string_free(out, FALSE);
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
48 }
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
49
29142
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
50 static void roster_request_cb(JabberStream *js, const char *from,
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
51 JabberIqType type, const char *id,
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
52 xmlnode *packet, gpointer data)
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
53 {
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
54 xmlnode *query;
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
55
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
56 if (type == JABBER_IQ_ERROR) {
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
57 /*
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
58 * This shouldn't happen in any real circumstances and
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
59 * likely constitutes a server-side misconfiguration (i.e.
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
60 * explicitly not loading mod_roster...)
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
61 */
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
62 purple_debug_error("jabber", "Error retrieving roster!?\n");
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
63 jabber_stream_set_state(js, JABBER_STREAM_CONNECTED);
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
64 return;
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
65 }
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
66
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
67 query = xmlnode_get_child(packet, "query");
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
68 if (query == NULL) {
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
69 jabber_stream_set_state(js, JABBER_STREAM_CONNECTED);
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
70 return;
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
71 }
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
72
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
73 jabber_roster_parse(js, from, type, id, query);
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
74 jabber_stream_set_state(js, JABBER_STREAM_CONNECTED);
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
75 }
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
76
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
77 void jabber_roster_request(JabberStream *js)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
78 {
29142
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
79 PurpleAccount *account;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
80 JabberIq *iq;
29142
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
81 xmlnode *query;
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
82
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
83 account = purple_connection_get_account(js->gc);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
84
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
85 iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:roster");
29142
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
86 query = xmlnode_get_child(iq->node, "query");
29149
9ab75ab032b4 jabber: The google roster request code was so lonely, so let's just drop-kick it and add the little custom logic to roster.c
Paul Aurich <paul@darkrain42.org>
parents: 29142
diff changeset
87
9ab75ab032b4 jabber: The google roster request code was so lonely, so let's just drop-kick it and add the little custom logic to roster.c
Paul Aurich <paul@darkrain42.org>
parents: 29142
diff changeset
88 if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) {
9ab75ab032b4 jabber: The google roster request code was so lonely, so let's just drop-kick it and add the little custom logic to roster.c
Paul Aurich <paul@darkrain42.org>
parents: 29142
diff changeset
89 xmlnode_set_attrib(query, "xmlns:gr", NS_GOOGLE_ROSTER);
9ab75ab032b4 jabber: The google roster request code was so lonely, so let's just drop-kick it and add the little custom logic to roster.c
Paul Aurich <paul@darkrain42.org>
parents: 29142
diff changeset
90 xmlnode_set_attrib(query, "gr:ext", "2");
9ab75ab032b4 jabber: The google roster request code was so lonely, so let's just drop-kick it and add the little custom logic to roster.c
Paul Aurich <paul@darkrain42.org>
parents: 29142
diff changeset
91 }
9ab75ab032b4 jabber: The google roster request code was so lonely, so let's just drop-kick it and add the little custom logic to roster.c
Paul Aurich <paul@darkrain42.org>
parents: 29142
diff changeset
92
29142
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
93 jabber_iq_set_callback(iq, roster_request_cb, NULL);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
94 jabber_iq_send(iq);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
95 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
96
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
97 static void remove_purple_buddies(JabberStream *js, const char *jid)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
98 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
99 GSList *buddies, *l;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
100
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
101 buddies = purple_find_buddies(js->gc->account, jid);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
102
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
103 for(l = buddies; l; l = l->next)
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
104 purple_blist_remove_buddy(l->data);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
105
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
106 g_slist_free(buddies);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
107 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
108
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
109 static void add_purple_buddy_to_groups(JabberStream *js, const char *jid,
28132
eb2d17945ce3 jabber: Store the "own JabberBuddy" in the JabberStream* struct.
Paul Aurich <paul@darkrain42.org>
parents: 27581
diff changeset
110 const char *alias, GSList *groups)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
111 {
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
112 GSList *buddies, *l;
28809
05867b153f03 jabber: Remove the roster pool stuff.
Paul Aurich <paul@darkrain42.org>
parents: 28693
diff changeset
113 PurpleAccount *account = purple_connection_get_account(js->gc);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
114
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
115 buddies = purple_find_buddies(js->gc->account, jid);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
116
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
117 if(!groups) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
118 if(!buddies)
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
119 groups = g_slist_append(groups, g_strdup(_("Buddies")));
20329
24ce4fcce5b0 applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19680
diff changeset
120 else {
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
121 /* TODO: What should we do here? Removing the local buddies
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
122 * is wrong, but so is letting the group state get out of sync with
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
123 * the server.
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
124 */
20329
24ce4fcce5b0 applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19680
diff changeset
125 g_slist_free(buddies);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
126 return;
20329
24ce4fcce5b0 applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19680
diff changeset
127 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
128 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
129
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
130 while(buddies) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
131 PurpleBuddy *b = buddies->data;
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
132 PurpleGroup *g = purple_buddy_get_group(b);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
133
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
134 buddies = g_slist_delete_link(buddies, buddies);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
135
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
136 /* XMPP groups are case-sensitive, but libpurple groups are
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
137 * case-insensitive. We treat a buddy in both "Friends" and "friends"
27581
1638786071af Clarify a comment a little.
Paul Aurich <paul@darkrain42.org>
parents: 27580
diff changeset
138 * as only being in one group, but if we push changes about the buddy
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
139 * to the server, the buddy will be dropped from one of the groups.
27581
1638786071af Clarify a comment a little.
Paul Aurich <paul@darkrain42.org>
parents: 27580
diff changeset
140 * Not optimal, but better than the alternative, I think.
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
141 */
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
142 if((l = g_slist_find_custom(groups, purple_group_get_name(g), (GCompareFunc)purple_utf8_strcasecmp))) {
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
143 /* The buddy is already on the local list. Update info. */
25294
8aa7d8bcbc7d Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24120
diff changeset
144 const char *servernick, *balias;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
145
23932
5e51360bb22c The alias we retrieve from the roster is a private alias; use purple_serv_got_private_alias() to tell the core about it
Evan Schoenberg <evan.s@dreskin.net>
parents: 23705
diff changeset
146 /* Previously stored serverside / buddy-supplied alias */
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
147 if((servernick = purple_blist_node_get_string((PurpleBlistNode*)b, "servernick")))
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
148 serv_got_alias(js->gc, jid, servernick);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
149
23932
5e51360bb22c The alias we retrieve from the roster is a private alias; use purple_serv_got_private_alias() to tell the core about it
Evan Schoenberg <evan.s@dreskin.net>
parents: 23705
diff changeset
150 /* Alias from our roster retrieval */
25294
8aa7d8bcbc7d Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24120
diff changeset
151 balias = purple_buddy_get_local_buddy_alias(b);
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
152 if(alias && !purple_strequal(alias, balias))
23932
5e51360bb22c The alias we retrieve from the roster is a private alias; use purple_serv_got_private_alias() to tell the core about it
Evan Schoenberg <evan.s@dreskin.net>
parents: 23705
diff changeset
153 purple_serv_got_private_alias(js->gc, jid, alias);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
154 g_free(l->data);
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
155 groups = g_slist_delete_link(groups, l);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
156 } else {
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
157 /* This buddy isn't in the group on the server anymore */
28809
05867b153f03 jabber: Remove the roster pool stuff.
Paul Aurich <paul@darkrain42.org>
parents: 28693
diff changeset
158 purple_debug_info("jabber", "jabber_roster_parse(): Removing %s "
05867b153f03 jabber: Remove the roster pool stuff.
Paul Aurich <paul@darkrain42.org>
parents: 28693
diff changeset
159 "from group '%s' on the local list\n",
05867b153f03 jabber: Remove the roster pool stuff.
Paul Aurich <paul@darkrain42.org>
parents: 28693
diff changeset
160 purple_buddy_get_name(b),
05867b153f03 jabber: Remove the roster pool stuff.
Paul Aurich <paul@darkrain42.org>
parents: 28693
diff changeset
161 purple_group_get_name(g));
05867b153f03 jabber: Remove the roster pool stuff.
Paul Aurich <paul@darkrain42.org>
parents: 28693
diff changeset
162 purple_blist_remove_buddy(b);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
163 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
164 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
165
27575
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
166 if (groups) {
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
167 char *tmp = roster_groups_join(groups);
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
168 purple_debug_info("jabber", "jabber_roster_parse(): Adding %s to "
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
169 "groups: %s\n", jid, tmp);
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
170 g_free(tmp);
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
171 }
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
172
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
173 while(groups) {
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
174 PurpleGroup *g = purple_find_group(groups->data);
28809
05867b153f03 jabber: Remove the roster pool stuff.
Paul Aurich <paul@darkrain42.org>
parents: 28693
diff changeset
175 PurpleBuddy *b = purple_buddy_new(account, jid, alias);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
176
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
177 if(!g) {
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
178 g = purple_group_new(groups->data);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
179 purple_blist_add_group(g, NULL);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
180 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
181
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
182 purple_blist_add_buddy(b, NULL, g, NULL);
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
183 purple_blist_alias_buddy(b, alias);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
184
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
185 g_free(groups->data);
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
186 groups = g_slist_delete_link(groups, groups);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
187 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
188
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
189 g_slist_free(buddies);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
190 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
191
25933
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 24394
diff changeset
192 void jabber_roster_parse(JabberStream *js, const char *from,
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 24394
diff changeset
193 JabberIqType type, const char *id, xmlnode *query)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
194 {
25933
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 24394
diff changeset
195 xmlnode *item, *group;
29232
2f64bfb21c0d Disable this part of roster versioning, too (for now). Refs #10935.
Paul Aurich <paul@darkrain42.org>
parents: 29162
diff changeset
196 #if 0
29142
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
197 const char *ver;
29232
2f64bfb21c0d Disable this part of roster versioning, too (for now). Refs #10935.
Paul Aurich <paul@darkrain42.org>
parents: 29162
diff changeset
198 #endif
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
199
27568
ff099a916d6b Use jabber_is_own_account and perform way fewer normalizations per iteration
Paul Aurich <paul@darkrain42.org>
parents: 27105
diff changeset
200 if (!jabber_is_own_account(js, from)) {
ff099a916d6b Use jabber_is_own_account and perform way fewer normalizations per iteration
Paul Aurich <paul@darkrain42.org>
parents: 27105
diff changeset
201 purple_debug_warning("jabber", "Received bogon roster push from %s\n",
ff099a916d6b Use jabber_is_own_account and perform way fewer normalizations per iteration
Paul Aurich <paul@darkrain42.org>
parents: 27105
diff changeset
202 from);
ff099a916d6b Use jabber_is_own_account and perform way fewer normalizations per iteration
Paul Aurich <paul@darkrain42.org>
parents: 27105
diff changeset
203 return;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
204 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
205
23705
9bf36aad8735 We talked about this and decided it was probably cleaner to not use
Mark Doliner <mark@kingant.net>
parents: 23691
diff changeset
206 js->currently_parsing_roster_push = TRUE;
23691
c31dfae66134 Hopefully fix the XMPP contact flipping/swapping between groups bug
Mark Doliner <mark@kingant.net>
parents: 23425
diff changeset
207
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
208 for(item = xmlnode_get_child(query, "item"); item; item = xmlnode_get_next_twin(item))
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
209 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
210 const char *jid, *name, *subscription, *ask;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
211 JabberBuddy *jb;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
212
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
213 subscription = xmlnode_get_attrib(item, "subscription");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
214 jid = xmlnode_get_attrib(item, "jid");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
215 name = xmlnode_get_attrib(item, "name");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
216 ask = xmlnode_get_attrib(item, "ask");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
217
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
218 if(!jid)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
219 continue;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
220
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
221 if(!(jb = jabber_buddy_find(js, jid, TRUE)))
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
222 continue;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
223
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
224 if(subscription) {
29160
7c543cbf52c0 jabber: Fix removing a self-contact.
Paul Aurich <paul@darkrain42.org>
parents: 29149
diff changeset
225 if (g_str_equal(subscription, "remove"))
7c543cbf52c0 jabber: Fix removing a self-contact.
Paul Aurich <paul@darkrain42.org>
parents: 29149
diff changeset
226 jb->subscription = JABBER_SUB_REMOVE;
7c543cbf52c0 jabber: Fix removing a self-contact.
Paul Aurich <paul@darkrain42.org>
parents: 29149
diff changeset
227 else if (jb == js->user_jb)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
228 jb->subscription = JABBER_SUB_BOTH;
29160
7c543cbf52c0 jabber: Fix removing a self-contact.
Paul Aurich <paul@darkrain42.org>
parents: 29149
diff changeset
229 else if (g_str_equal(subscription, "none"))
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
230 jb->subscription = JABBER_SUB_NONE;
29160
7c543cbf52c0 jabber: Fix removing a self-contact.
Paul Aurich <paul@darkrain42.org>
parents: 29149
diff changeset
231 else if (g_str_equal(subscription, "to"))
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
232 jb->subscription = JABBER_SUB_TO;
29160
7c543cbf52c0 jabber: Fix removing a self-contact.
Paul Aurich <paul@darkrain42.org>
parents: 29149
diff changeset
233 else if (g_str_equal(subscription, "from"))
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
234 jb->subscription = JABBER_SUB_FROM;
29160
7c543cbf52c0 jabber: Fix removing a self-contact.
Paul Aurich <paul@darkrain42.org>
parents: 29149
diff changeset
235 else if (g_str_equal(subscription, "both"))
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
236 jb->subscription = JABBER_SUB_BOTH;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
237 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
238
27569
65b5bc543214 Remove this; it's been commented out for about 3.5 years.
Paul Aurich <paul@darkrain42.org>
parents: 27568
diff changeset
239 if(purple_strequal(ask, "subscribe"))
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
240 jb->subscription |= JABBER_SUB_PENDING;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
241 else
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
242 jb->subscription &= ~JABBER_SUB_PENDING;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
243
28693
5c61429ea529 jabber: Fix removing a buddy with a pending subscription.
Paul Aurich <paul@darkrain42.org>
parents: 28659
diff changeset
244 if(jb->subscription & JABBER_SUB_REMOVE) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
245 remove_purple_buddies(js, jid);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
246 } else {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
247 GSList *groups = NULL;
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
248 gboolean seen_empty = FALSE;
20329
24ce4fcce5b0 applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19680
diff changeset
249
24ce4fcce5b0 applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19680
diff changeset
250 if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER)
24ce4fcce5b0 applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19680
diff changeset
251 if (!jabber_google_roster_incoming(js, item))
24ce4fcce5b0 applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19680
diff changeset
252 continue;
24ce4fcce5b0 applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19680
diff changeset
253
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
254 for(group = xmlnode_get_child(item, "group"); group; group = xmlnode_get_next_twin(group)) {
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
255 char *group_name = xmlnode_get_data(group);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
256
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
257 if (!group_name && !seen_empty) {
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
258 group_name = g_strdup("");
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
259 seen_empty = TRUE;
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
260 }
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
261
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
262 groups = g_slist_prepend(groups, group_name);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
263 }
27570
93a41017dca9 Various roster cleanups. Refs #7008.
Paul Aurich <paul@darkrain42.org>
parents: 27569
diff changeset
264
28132
eb2d17945ce3 jabber: Store the "own JabberBuddy" in the JabberStream* struct.
Paul Aurich <paul@darkrain42.org>
parents: 27581
diff changeset
265 add_purple_buddy_to_groups(js, jid, name, groups);
eb2d17945ce3 jabber: Store the "own JabberBuddy" in the JabberStream* struct.
Paul Aurich <paul@darkrain42.org>
parents: 27581
diff changeset
266 if (jb == js->user_jb)
eb2d17945ce3 jabber: Store the "own JabberBuddy" in the JabberStream* struct.
Paul Aurich <paul@darkrain42.org>
parents: 27581
diff changeset
267 jabber_presence_fake_to_self(js, NULL);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
268 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
269 }
18124
f88c2a41200d fix inital presence (fixes #1395)
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
270
29232
2f64bfb21c0d Disable this part of roster versioning, too (for now). Refs #10935.
Paul Aurich <paul@darkrain42.org>
parents: 29162
diff changeset
271 #if 0
29142
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
272 ver = xmlnode_get_attrib(query, "ver");
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
273 if (ver) {
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
274 PurpleAccount *account = purple_connection_get_account(js->gc);
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
275 purple_account_set_string(account, "roster_ver", ver);
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
276 }
29232
2f64bfb21c0d Disable this part of roster versioning, too (for now). Refs #10935.
Paul Aurich <paul@darkrain42.org>
parents: 29162
diff changeset
277 #endif
23691
c31dfae66134 Hopefully fix the XMPP contact flipping/swapping between groups bug
Mark Doliner <mark@kingant.net>
parents: 23425
diff changeset
278
29142
0f7025534fc5 jabber: Roster Versioning support.
Paul Aurich <paul@darkrain42.org>
parents: 28809
diff changeset
279 js->currently_parsing_roster_push = FALSE;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
280 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
281
27576
b9da56683499 Operate on the passed-in GSList.
Paul Aurich <paul@darkrain42.org>
parents: 27575
diff changeset
282 /* jabber_roster_update frees the GSList* passed in */
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
283 static void jabber_roster_update(JabberStream *js, const char *name,
27576
b9da56683499 Operate on the passed-in GSList.
Paul Aurich <paul@darkrain42.org>
parents: 27575
diff changeset
284 GSList *groups)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
285 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
286 PurpleBuddy *b;
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
287 PurpleGroup *g;
27576
b9da56683499 Operate on the passed-in GSList.
Paul Aurich <paul@darkrain42.org>
parents: 27575
diff changeset
288 GSList *l;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
289 JabberIq *iq;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
290 xmlnode *query, *item, *group;
25294
8aa7d8bcbc7d Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24120
diff changeset
291 const char *balias;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
292
23705
9bf36aad8735 We talked about this and decided it was probably cleaner to not use
Mark Doliner <mark@kingant.net>
parents: 23691
diff changeset
293 if (js->currently_parsing_roster_push)
23691
c31dfae66134 Hopefully fix the XMPP contact flipping/swapping between groups bug
Mark Doliner <mark@kingant.net>
parents: 23425
diff changeset
294 return;
c31dfae66134 Hopefully fix the XMPP contact flipping/swapping between groups bug
Mark Doliner <mark@kingant.net>
parents: 23425
diff changeset
295
20329
24ce4fcce5b0 applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19680
diff changeset
296 if(!(b = purple_find_buddy(js->gc->account, name)))
24ce4fcce5b0 applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19680
diff changeset
297 return;
24ce4fcce5b0 applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19680
diff changeset
298
27576
b9da56683499 Operate on the passed-in GSList.
Paul Aurich <paul@darkrain42.org>
parents: 27575
diff changeset
299 if (groups) {
27575
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
300 char *tmp = roster_groups_join(groups);
27093
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
301
27576
b9da56683499 Operate on the passed-in GSList.
Paul Aurich <paul@darkrain42.org>
parents: 27575
diff changeset
302 purple_debug_info("jabber", "jabber_roster_update(%s): [Source: "
b9da56683499 Operate on the passed-in GSList.
Paul Aurich <paul@darkrain42.org>
parents: 27575
diff changeset
303 "groups]: groups: %s\n", name, tmp);
27575
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
304 g_free(tmp);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
305 } else {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
306 GSList *buddies = purple_find_buddies(js->gc->account, name);
27575
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
307 char *tmp;
27093
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
308
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
309 if(!buddies)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
310 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
311 while(buddies) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
312 b = buddies->data;
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
313 g = purple_buddy_get_group(b);
24120
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
314 groups = g_slist_append(groups, (char *)purple_group_get_name(g));
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
315 buddies = g_slist_remove(buddies, b);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
316 }
27093
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
317
27575
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
318 tmp = roster_groups_join(groups);
27093
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
319 purple_debug_info("jabber", "jabber_roster_update(%s): [Source: local blist]: groups: %s\n",
27575
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
320 name, tmp);
efb40ca43589 Debug output when changing group memberships.
Paul Aurich <paul@darkrain42.org>
parents: 27574
diff changeset
321 g_free(tmp);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
322 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
323
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
324 iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:roster");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
325
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
326 query = xmlnode_get_child(iq->node, "query");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
327 item = xmlnode_new_child(query, "item");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
328
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
329 xmlnode_set_attrib(item, "jid", name);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
330
25294
8aa7d8bcbc7d Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24120
diff changeset
331 balias = purple_buddy_get_local_buddy_alias(b);
8aa7d8bcbc7d Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24120
diff changeset
332 xmlnode_set_attrib(item, "name", balias ? balias : "");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
333
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
334 for(l = groups; l; l = l->next) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
335 group = xmlnode_new_child(item, "group");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
336 xmlnode_insert_data(group, l->data, -1);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
337 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
338
27576
b9da56683499 Operate on the passed-in GSList.
Paul Aurich <paul@darkrain42.org>
parents: 27575
diff changeset
339 g_slist_free(groups);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25327
diff changeset
340
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
341 if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
342 jabber_google_roster_outgoing(js, query, item);
29149
9ab75ab032b4 jabber: The google roster request code was so lonely, so let's just drop-kick it and add the little custom logic to roster.c
Paul Aurich <paul@darkrain42.org>
parents: 29142
diff changeset
343 xmlnode_set_attrib(query, "xmlns:gr", NS_GOOGLE_ROSTER);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
344 xmlnode_set_attrib(query, "gr:ext", "2");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
345 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
346 jabber_iq_send(iq);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
347 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
348
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
349 void jabber_roster_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
350 PurpleGroup *group)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
351 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
352 JabberStream *js = gc->proto_data;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
353 char *who;
28506
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
354 JabberID *jid;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
355 JabberBuddy *jb;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
356 JabberBuddyResource *jbr;
24120
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
357 const char *name;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
358
27571
c8390dc125c1 Use js->state to track whether the roster has been retrieved.
Paul Aurich <paul@darkrain42.org>
parents: 27570
diff changeset
359 /* If we haven't received the roster yet, ignore any adds */
c8390dc125c1 Use js->state to track whether the roster has been retrieved.
Paul Aurich <paul@darkrain42.org>
parents: 27570
diff changeset
360 if (js->state != JABBER_STREAM_CONNECTED)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
361 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
362
24120
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
363 name = purple_buddy_get_name(buddy);
28506
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
364 jid = jabber_id_new(name);
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
365 if (jid == NULL) {
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
366 /* TODO: Remove the buddy from the list? */
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
367 return;
28506
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
368 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
369
28506
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
370 /* Adding a chat room or a chat buddy to the roster is *not* supported. */
28659
c42d5c23a9e8 jabber: Don't crash when adding a buddy without a node (no '@'). Closes #10261.
Paul Aurich <paul@darkrain42.org>
parents: 28506
diff changeset
371 if (jid->node && jabber_chat_find(js, jid->node, jid->domain) != NULL) {
28506
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
372 /*
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
373 * This is the same thing Bonjour does. If it causes problems, move
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
374 * it to an idle callback.
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
375 */
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
376 purple_debug_warning("jabber", "Cowardly refusing to add a MUC user "
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
377 "to your buddy list and removing the buddy. "
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
378 "Buddies can only be added by real (non-MUC) "
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
379 "JID\n");
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
380 purple_blist_remove_buddy(buddy);
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
381 jabber_id_free(jid);
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
382 return;
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
383 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
384
28506
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
385 who = jabber_id_get_bare_jid(jid);
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
386 if (jid->resource != NULL) {
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
387 /*
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
388 * If the buddy name added contains a resource, strip that off and
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
389 * rename the buddy.
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
390 */
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
391 purple_blist_rename_buddy(buddy, who);
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
392 }
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
393
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
394 jb = jabber_buddy_find(js, who, FALSE);
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
395
2e3678cd33a0 jabber: Properly handle adding buddies that contain a resource. Closes #10151.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
396 purple_debug_info("jabber", "jabber_roster_add_buddy(): Adding %s\n", who);
27093
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
397
23425
a2f63b74fe31 Alright, I'm getting rid of this "groups" thing for the reason listed
Mark Doliner <mark@kingant.net>
parents: 22821
diff changeset
398 jabber_roster_update(js, who, NULL);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
399
28132
eb2d17945ce3 jabber: Store the "own JabberBuddy" in the JabberStream* struct.
Paul Aurich <paul@darkrain42.org>
parents: 27581
diff changeset
400 if (jb == js->user_jb) {
27573
9a5a9a4e7626 Simplify the fake_to_self function.
Paul Aurich <paul@darkrain42.org>
parents: 27571
diff changeset
401 jabber_presence_fake_to_self(js, NULL);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
402 } else if(!jb || !(jb->subscription & JABBER_SUB_TO)) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
403 jabber_presence_subscription_set(js, who, "subscribe");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
404 } else if((jbr =jabber_buddy_find_resource(jb, NULL))) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
405 purple_prpl_got_user_status(gc->account, who,
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
406 jabber_buddy_state_get_status_id(jbr->state),
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
407 "priority", jbr->priority, jbr->status ? "message" : NULL, jbr->status, NULL);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
408 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
409
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
410 g_free(who);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
411 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
412
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
413 void jabber_roster_alias_change(PurpleConnection *gc, const char *name, const char *alias)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
414 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
415 PurpleBuddy *b = purple_find_buddy(gc->account, name);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
416
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
417 if(b != NULL) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
418 purple_blist_alias_buddy(b, alias);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
419
27093
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
420 purple_debug_info("jabber", "jabber_roster_alias_change(): Aliased %s to %s\n",
27105
7c864f388c96 Ladedah I dislike the need to explicitly check for NULL strings.
Paul Aurich <paul@darkrain42.org>
parents: 27093
diff changeset
421 name, alias ? alias : "(null)");
27092
a500f65bd077 Pluck Adium's roster debugging from 86720de21a854aa
Paul Aurich <paul@darkrain42.org>
parents: 26569
diff changeset
422
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
423 jabber_roster_update(gc->proto_data, name, NULL);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
424 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
425 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
426
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
427 void jabber_roster_group_change(PurpleConnection *gc, const char *name,
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
428 const char *old_group, const char *new_group)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
429 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
430 GSList *buddies, *groups = NULL;
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
431 PurpleBuddy *b;
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
432 PurpleGroup *g;
24120
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
433 const char *gname;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
434
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
435 if(!old_group || !new_group || !strcmp(old_group, new_group))
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
436 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
437
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
438 buddies = purple_find_buddies(gc->account, name);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
439 while(buddies) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
440 b = buddies->data;
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
441 g = purple_buddy_get_group(b);
24120
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
442 gname = purple_group_get_name(g);
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
443 if(!strcmp(gname, old_group))
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
444 groups = g_slist_append(groups, (char*)new_group); /* ick */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
445 else
24120
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
446 groups = g_slist_append(groups, (char*)gname);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
447 buddies = g_slist_remove(buddies, b);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
448 }
27092
a500f65bd077 Pluck Adium's roster debugging from 86720de21a854aa
Paul Aurich <paul@darkrain42.org>
parents: 26569
diff changeset
449
27093
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
450 purple_debug_info("jabber", "jabber_roster_group_change(): Moving %s from %s to %s\n",
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
451 name, old_group, new_group);
27092
a500f65bd077 Pluck Adium's roster debugging from 86720de21a854aa
Paul Aurich <paul@darkrain42.org>
parents: 26569
diff changeset
452
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
453 jabber_roster_update(gc->proto_data, name, groups);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
454 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
455
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
456 void jabber_roster_group_rename(PurpleConnection *gc, const char *old_name,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
457 PurpleGroup *group, GList *moved_buddies)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
458 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
459 GList *l;
24120
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
460 const char *gname = purple_group_get_name(group);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
461 for(l = moved_buddies; l; l = l->next) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
462 PurpleBuddy *buddy = l->data;
24120
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
463 jabber_roster_group_change(gc, purple_buddy_get_name(buddy), old_name, gname);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
464 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
465 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
466
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
467 void jabber_roster_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
468 PurpleGroup *group) {
24120
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
469 const char *name = purple_buddy_get_name(buddy);
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
470 GSList *buddies = purple_find_buddies(purple_connection_get_account(gc), name);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
471
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
472 buddies = g_slist_remove(buddies, buddy);
15786
e926951e61fe Don't use g_list_length() and g_slist_length() when all you want to
Mark Doliner <mark@kingant.net>
parents: 15634
diff changeset
473 if(buddies != NULL) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
474 PurpleBuddy *tmpbuddy;
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
475 PurpleGroup *tmpgroup;
20333
53afc5cce143 applied changes from d4b316d73ebaf93803ca2642e78b8821c3b5d5c7
Luke Schierer <lschiere@pidgin.im>
parents: 20329
diff changeset
476 GSList *groups = NULL;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
477
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
478 while(buddies) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
479 tmpbuddy = buddies->data;
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
480 tmpgroup = purple_buddy_get_group(tmpbuddy);
24120
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
481 groups = g_slist_append(groups, (char *)purple_group_get_name(tmpgroup));
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
482 buddies = g_slist_remove(buddies, tmpbuddy);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
483 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
484
27093
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
485 purple_debug_info("jabber", "jabber_roster_remove_buddy(): Removing %s from %s\n",
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
486 purple_buddy_get_name(buddy), purple_group_get_name(group));
27092
a500f65bd077 Pluck Adium's roster debugging from 86720de21a854aa
Paul Aurich <paul@darkrain42.org>
parents: 26569
diff changeset
487
24120
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
488 jabber_roster_update(gc->proto_data, name, groups);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
489 } else {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
490 JabberIq *iq = jabber_iq_new_query(gc->proto_data, JABBER_IQ_SET,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
491 "jabber:iq:roster");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
492 xmlnode *query = xmlnode_get_child(iq->node, "query");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
493 xmlnode *item = xmlnode_new_child(query, "item");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
494
24120
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23932
diff changeset
495 xmlnode_set_attrib(item, "jid", name);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
496 xmlnode_set_attrib(item, "subscription", "remove");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
497
27093
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
498 purple_debug_info("jabber", "jabber_roster_remove_buddy(): Removing %s\n",
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
499 purple_buddy_get_name(buddy));
f2ca52166a0d Add a few more roster debug messages and improve.
Paul Aurich <paul@darkrain42.org>
parents: 27092
diff changeset
500
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
501 jabber_iq_send(iq);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
502 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
503 }