libpurple/protocols/jabber/buddy.c

Mon, 15 Feb 2010 05:31:34 +0000

author
Paul Aurich <darkrain42@pidgin.im>
date
Mon, 15 Feb 2010 05:31:34 +0000
changeset 29383
f33172510491
parent 29368
22b6cd68c156
child 29384
b7b6be8f77fd
permissions
-rw-r--r--

jabber: Unify the JabberBuddyState functions (and briefly document them)

7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2 * purple - Jabber Protocol Plugin
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
3 *
28322
ac8fec1d2234 Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents: 28311
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
ac8fec1d2234 Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents: 28311
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
ac8fec1d2234 Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents: 28311
diff changeset
6 * source distribution.
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
7 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
12 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
17 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18315
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
21 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
22 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
23 #include "internal.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
24 #include "debug.h"
7076
5b5d8310e599 [gaim-migrate @ 7641]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
25 #include "imgstore.h"
9713
bb37562302a1 [gaim-migrate @ 10574]
Mark Doliner <markdoliner@pidgin.im>
parents: 9466
diff changeset
26 #include "prpl.h"
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
27 #include "notify.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
28 #include "request.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
29 #include "util.h"
7395
e5595e8e13e4 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
30 #include "xmlnode.h"
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
31
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
32 #include "buddy.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
33 #include "chat.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
34 #include "jabber.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
35 #include "iq.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
36 #include "presence.h"
25475
ad7612a5d678 Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <darkrain42@pidgin.im>
parents: 25391
diff changeset
37 #include "useravatar.h"
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
38 #include "xdata.h"
17787
439329d20337 Added support for setting the avatar via XEP-0084. Receiving other people's avatar is up next.
Andreas Monitzer <am@adiumx.com>
parents: 17770
diff changeset
39 #include "pep.h"
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
40 #include "adhoccommands.h"
28667
7bab19738f5e jabber: Add an "Initiate Chat" blist context menu option for GTalk accounts.
Eion Robb <eion@robbmob.com>
parents: 28611
diff changeset
41 #include "google.h"
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
42
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
43 typedef struct {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
44 long idle_seconds;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
45 } JabberBuddyInfoResource;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
46
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
47 typedef struct {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
48 JabberStream *js;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
49 JabberBuddy *jb;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
50 char *jid;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
51 GSList *ids;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
52 GHashTable *resources;
27305
ef06405deeb0 Use guint for a timeout handle here, too.
Paul Aurich <darkrain42@pidgin.im>
parents: 27297
diff changeset
53 guint timeout_handle;
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
54 GSList *vcard_imgids;
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
55 PurpleNotifyUserInfo *user_info;
27069
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
56 long last_seconds;
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
57 gchar *last_message;
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
58 } JabberBuddyInfo;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
59
7116
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
60 void jabber_buddy_free(JabberBuddy *jb)
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
61 {
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
62 g_return_if_fail(jb != NULL);
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
63
22942
2bf494f8e2a4 Change the string "screen name" to "username" everywhere. I think most
Mark Doliner <markdoliner@pidgin.im>
parents: 22928
diff changeset
64 g_free(jb->error_msg);
7116
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
65 while(jb->resources)
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
66 jabber_buddy_resource_free(jb->resources->data);
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
67
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
68 g_free(jb);
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
69 }
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
70
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
71 JabberBuddy *jabber_buddy_find(JabberStream *js, const char *name,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
72 gboolean create)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
73 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
74 JabberBuddy *jb;
27297
168f268f927d Plug a leak from changing this to use jabber_get_bare_jid instead of normalize.
Paul Aurich <darkrain42@pidgin.im>
parents: 27289
diff changeset
75 char *realname;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
76
15143
37451143f5c4 [gaim-migrate @ 17867]
Mark Doliner <markdoliner@pidgin.im>
parents: 15092
diff changeset
77 if (js->buddies == NULL)
37451143f5c4 [gaim-migrate @ 17867]
Mark Doliner <markdoliner@pidgin.im>
parents: 15092
diff changeset
78 return NULL;
37451143f5c4 [gaim-migrate @ 17867]
Mark Doliner <markdoliner@pidgin.im>
parents: 15092
diff changeset
79
27110
05ca719b901b Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents: 27075
diff changeset
80 if(!(realname = jabber_get_bare_jid(name)))
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
81 return NULL;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
82
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
83 jb = g_hash_table_lookup(js->buddies, realname);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
84
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
85 if(!jb && create) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
86 jb = g_new0(JabberBuddy, 1);
27297
168f268f927d Plug a leak from changing this to use jabber_get_bare_jid instead of normalize.
Paul Aurich <darkrain42@pidgin.im>
parents: 27289
diff changeset
87 g_hash_table_insert(js->buddies, realname, jb);
168f268f927d Plug a leak from changing this to use jabber_get_bare_jid instead of normalize.
Paul Aurich <darkrain42@pidgin.im>
parents: 27289
diff changeset
88 } else
168f268f927d Plug a leak from changing this to use jabber_get_bare_jid instead of normalize.
Paul Aurich <darkrain42@pidgin.im>
parents: 27289
diff changeset
89 g_free(realname);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
90
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
91 return jb;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
92 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
93
27965
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
94 static gint resource_compare_cb(gconstpointer a, gconstpointer b)
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
95 {
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
96 const JabberBuddyResource *jbra = a;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
97 const JabberBuddyResource *jbrb = b;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
98 JabberBuddyState state_a, state_b;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
99
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
100 if (jbra->priority != jbrb->priority)
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
101 return jbra->priority > jbrb->priority ? 1 : -1;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
102
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
103 /* Fold the states for easier comparison */
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
104 switch (jbra->state) {
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
105 case JABBER_BUDDY_STATE_ONLINE:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
106 case JABBER_BUDDY_STATE_CHAT:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
107 state_a = JABBER_BUDDY_STATE_ONLINE;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
108 break;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
109 case JABBER_BUDDY_STATE_AWAY:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
110 case JABBER_BUDDY_STATE_DND:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
111 state_a = JABBER_BUDDY_STATE_AWAY;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
112 break;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
113 case JABBER_BUDDY_STATE_XA:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
114 state_a = JABBER_BUDDY_STATE_XA;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
115 break;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
116 case JABBER_BUDDY_STATE_UNAVAILABLE:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
117 state_a = JABBER_BUDDY_STATE_UNAVAILABLE;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
118 break;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
119 default:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
120 state_a = JABBER_BUDDY_STATE_UNKNOWN;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
121 break;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
122 }
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
123
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
124 switch (jbrb->state) {
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
125 case JABBER_BUDDY_STATE_ONLINE:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
126 case JABBER_BUDDY_STATE_CHAT:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
127 state_b = JABBER_BUDDY_STATE_ONLINE;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
128 break;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
129 case JABBER_BUDDY_STATE_AWAY:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
130 case JABBER_BUDDY_STATE_DND:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
131 state_b = JABBER_BUDDY_STATE_AWAY;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
132 break;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
133 case JABBER_BUDDY_STATE_XA:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
134 state_b = JABBER_BUDDY_STATE_XA;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
135 break;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
136 case JABBER_BUDDY_STATE_UNAVAILABLE:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
137 state_b = JABBER_BUDDY_STATE_UNAVAILABLE;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
138 break;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
139 default:
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
140 state_b = JABBER_BUDDY_STATE_UNKNOWN;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
141 break;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
142 }
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
143
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
144 if (state_a == state_b) {
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
145 if (jbra->idle == jbrb->idle)
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
146 return 0;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
147 else if ((jbra->idle && !jbrb->idle) ||
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
148 (jbra->idle && jbrb->idle && jbra->idle < jbrb->idle))
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
149 return -1;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
150 else
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
151 return 1;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
152 }
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
153
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
154 if (state_a == JABBER_BUDDY_STATE_ONLINE)
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
155 return 1;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
156 else if (state_a == JABBER_BUDDY_STATE_AWAY &&
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
157 (state_b == JABBER_BUDDY_STATE_XA ||
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
158 state_b == JABBER_BUDDY_STATE_UNAVAILABLE ||
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
159 state_b == JABBER_BUDDY_STATE_UNKNOWN))
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
160 return 1;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
161 else if (state_a == JABBER_BUDDY_STATE_XA &&
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
162 (state_b == JABBER_BUDDY_STATE_UNAVAILABLE ||
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
163 state_b == JABBER_BUDDY_STATE_UNKNOWN))
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
164 return 1;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
165 else if (state_a == JABBER_BUDDY_STATE_UNAVAILABLE &&
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
166 state_b == JABBER_BUDDY_STATE_UNKNOWN)
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
167 return 1;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
168
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
169 return -1;
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
170 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
171
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
172 JabberBuddyResource *jabber_buddy_find_resource(JabberBuddy *jb,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
173 const char *resource)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
174 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
175 JabberBuddyResource *jbr = NULL;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
176 GList *l;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
177
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
178 if(!jb)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
179 return NULL;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
180
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
181 for(l = jb->resources; l; l = l->next)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
182 {
24890
22983bf7615b Fix merge
Marcus Lundblad <malu@pidgin.im>
parents: 24889
diff changeset
183 JabberBuddyResource *tmp = (JabberBuddyResource *) l->data;
22983bf7615b Fix merge
Marcus Lundblad <malu@pidgin.im>
parents: 24889
diff changeset
184 if (!jbr && !resource) {
22983bf7615b Fix merge
Marcus Lundblad <malu@pidgin.im>
parents: 24889
diff changeset
185 jbr = tmp;
22983bf7615b Fix merge
Marcus Lundblad <malu@pidgin.im>
parents: 24889
diff changeset
186 } else if (!resource) {
27965
d2f136953034 jabber: Move the jbr comparison logic to a GCompareFunc
Paul Aurich <darkrain42@pidgin.im>
parents: 27846
diff changeset
187 if (resource_compare_cb(tmp, jbr) > 0)
24890
22983bf7615b Fix merge
Marcus Lundblad <malu@pidgin.im>
parents: 24889
diff changeset
188 jbr = tmp;
22983bf7615b Fix merge
Marcus Lundblad <malu@pidgin.im>
parents: 24889
diff changeset
189 } else if(tmp->name) {
22983bf7615b Fix merge
Marcus Lundblad <malu@pidgin.im>
parents: 24889
diff changeset
190 if(!strcmp(tmp->name, resource)) {
22983bf7615b Fix merge
Marcus Lundblad <malu@pidgin.im>
parents: 24889
diff changeset
191 jbr = tmp;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
192 break;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
193 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
194 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
195 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
196
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
197 return jbr;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
198 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
199
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
200 JabberBuddyResource *jabber_buddy_track_resource(JabberBuddy *jb, const char *resource,
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
201 int priority, JabberBuddyState state, const char *status)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
202 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
203 JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, resource);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
204 if(!jbr) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
205 jbr = g_new0(JabberBuddyResource, 1);
7116
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
206 jbr->jb = jb;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
207 jbr->name = g_strdup(resource);
27746
4b3f015977d9 For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents: 27696
diff changeset
208 jbr->capabilities = JABBER_CAP_NONE;
25822
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
209 jbr->tz_off = PURPLE_NO_TZ_OFF;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
210 jb->resources = g_list_append(jb->resources, jbr);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
211 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
212 jbr->priority = priority;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
213 jbr->state = state;
22928
6bd622930dba Simplify
Mark Doliner <markdoliner@pidgin.im>
parents: 22622
diff changeset
214 g_free(jbr->status);
27775
b8569a76e02e Don't pre-escape jbr->status. Almost every place required it in unescaped
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27696
diff changeset
215 jbr->status = g_strdup(status);
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
216
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
217 return jbr;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
218 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
219
7116
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
220 void jabber_buddy_resource_free(JabberBuddyResource *jbr)
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
221 {
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
222 g_return_if_fail(jbr != NULL);
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
223
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
224 jbr->jb->resources = g_list_remove(jbr->jb->resources, jbr);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
225
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
226 while(jbr->commands) {
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
227 JabberAdHocCommands *cmd = jbr->commands->data;
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
228 g_free(cmd->jid);
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
229 g_free(cmd->node);
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
230 g_free(cmd->name);
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
231 g_free(cmd);
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
232 jbr->commands = g_list_delete_link(jbr->commands, jbr->commands);
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
233 }
7116
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
234
24880
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
235 if (jbr->caps.exts) {
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
236 g_list_foreach(jbr->caps.exts, (GFunc)g_free, NULL);
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
237 g_list_free(jbr->caps.exts);
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
238 }
7116
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
239 g_free(jbr->name);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
240 g_free(jbr->status);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
241 g_free(jbr->thread_id);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
242 g_free(jbr->client.name);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
243 g_free(jbr->client.version);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
244 g_free(jbr->client.os);
7116
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
245 g_free(jbr);
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
246 }
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
247
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
248 void jabber_buddy_remove_resource(JabberBuddy *jb, const char *resource)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
249 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
250 JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, resource);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
251
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
252 if(!jbr)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
253 return;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
254
7116
86c328e44c15 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
255 jabber_buddy_resource_free(jbr);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
256 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
257
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
258 /*******
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
259 * This is the old vCard stuff taken from the old prpl. vCards, by definition
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
260 * are a temporary thing until jabber can get its act together and come up
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
261 * with a format for user information, hence the namespace of 'vcard-temp'
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
262 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
263 * Since I don't feel like putting that much work into something that's
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
264 * _supposed_ to go away, i'm going to just copy the kludgy old code here,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
265 * and make it purdy when jabber comes up with a standards-track JEP to
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
266 * replace vcard-temp
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
267 * --Nathan
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
268 *******/
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
269
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
270 /*---------------------------------------*/
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
271 /* Jabber "set info" (vCard) support */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
272 /*---------------------------------------*/
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
273
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
274 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
275 * V-Card format:
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
276 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
277 * <vCard prodid='' version='' xmlns=''>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
278 * <FN></FN>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
279 * <N>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
280 * <FAMILY/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
281 * <GIVEN/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
282 * </N>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
283 * <NICKNAME/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
284 * <URL/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
285 * <ADR>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
286 * <STREET/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
287 * <EXTADD/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
288 * <LOCALITY/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
289 * <REGION/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
290 * <PCODE/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
291 * <COUNTRY/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
292 * </ADR>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
293 * <TEL/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
294 * <EMAIL/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
295 * <ORG>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
296 * <ORGNAME/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
297 * <ORGUNIT/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
298 * </ORG>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
299 * <TITLE/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
300 * <ROLE/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
301 * <DESC/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
302 * <BDAY/>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
303 * </vCard>
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
304 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
305 * See also:
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
306 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
307 * http://docs.jabber.org/proto/html/vcard-temp.html
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
308 * http://www.vcard-xml.org/dtd/vCard-XML-v2-20010520.dtd
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
309 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
310
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
311 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
312 * Cross-reference user-friendly V-Card entry labels to vCard XML tags
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
313 * and attributes.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
314 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
315 * Order is (or should be) unimportant. For example: we have no way of
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
316 * knowing in what order real data will arrive.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
317 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
318 * Format: Label, Pre-set text, "visible" flag, "editable" flag, XML tag
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
319 * name, XML tag's parent tag "path" (relative to vCard node).
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
320 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
321 * List is terminated by a NULL label pointer.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
322 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
323 * Entries with no label text, but with XML tag and parent tag
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
324 * entries, are used by V-Card XML construction routines to
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
325 * "automagically" construct the appropriate XML node tree.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
326 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
327 * Thoughts on future direction/expansion
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
328 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
329 * This is a "simple" vCard.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
330 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
331 * It is possible for nodes other than the "vCard" node to have
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
332 * attributes. Should that prove necessary/desirable, add an
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
333 * "attributes" pointer to the vcard_template struct, create the
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
334 * necessary tag_attr structs, and add 'em to the vcard_dflt_data
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
335 * array.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
336 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
337 * The above changes will (obviously) require changes to the vCard
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
338 * construction routines.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
339 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
340
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
341 struct vcard_template {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
342 char *label; /* label text pointer */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
343 char *tag; /* tag text */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
344 char *ptag; /* parent tag "path" text */
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 20169
diff changeset
345 } const vcard_template_data[] = {
26563
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
346 {N_("Full Name"), "FN", NULL},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
347 {N_("Family Name"), "FAMILY", "N"},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
348 {N_("Given Name"), "GIVEN", "N"},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
349 {N_("Nickname"), "NICKNAME", NULL},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
350 {N_("URL"), "URL", NULL},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
351 {N_("Street Address"), "STREET", "ADR"},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
352 {N_("Extended Address"), "EXTADD", "ADR"},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
353 {N_("Locality"), "LOCALITY", "ADR"},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
354 {N_("Region"), "REGION", "ADR"},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
355 {N_("Postal Code"), "PCODE", "ADR"},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
356 {N_("Country"), "CTRY", "ADR"},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
357 {N_("Telephone"), "NUMBER", "TEL"},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
358 {N_("Email"), "USERID", "EMAIL"},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
359 {N_("Organization Name"), "ORGNAME", "ORG"},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
360 {N_("Organization Unit"), "ORGUNIT", "ORG"},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
361 {N_("Title"), "TITLE", NULL},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
362 {N_("Role"), "ROLE", NULL},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
363 {N_("Birthday"), "BDAY", NULL},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
364 {N_("Description"), "DESC", NULL},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
365 {"", "N", NULL},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
366 {"", "ADR", NULL},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
367 {"", "ORG", NULL},
29674a9754ab Remove some unused fields. Thanks to Mayank Jain Nawal's email to the
Mark Doliner <markdoliner@pidgin.im>
parents: 26042
diff changeset
368 {NULL, NULL, NULL}
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
369 };
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
370
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
371 /*
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8401
diff changeset
372 * The "vCard" tag's attribute list...
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
373 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
374 struct tag_attr {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
375 char *attr;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
376 char *value;
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 20169
diff changeset
377 } const vcard_tag_attr_list[] = {
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
378 {"prodid", "-//HandGen//NONSGML vGen v1.0//EN"},
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
379 {"version", "2.0", },
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
380 {"xmlns", "vcard-temp", },
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
381 {NULL, NULL},
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
382 };
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
383
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
384
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
385 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
386 * Insert a tag node into an xmlnode tree, recursively inserting parent tag
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
387 * nodes as necessary
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
388 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
389 * Returns pointer to inserted node
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
390 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
391 * Note to hackers: this code is designed to be re-entrant (it's recursive--it
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
392 * calls itself), so don't put any "static"s in here!
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
393 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
394 static xmlnode *insert_tag_to_parent_tag(xmlnode *start, const char *parent_tag, const char *new_tag)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
395 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
396 xmlnode *x = NULL;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
397
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
398 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
399 * If the parent tag wasn't specified, see if we can get it
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
400 * from the vCard template struct.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
401 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
402 if(parent_tag == NULL) {
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 20169
diff changeset
403 const struct vcard_template *vc_tp = vcard_template_data;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
404
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
405 while(vc_tp->label != NULL) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
406 if(strcmp(vc_tp->tag, new_tag) == 0) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
407 parent_tag = vc_tp->ptag;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
408 break;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
409 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
410 ++vc_tp;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
411 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
412 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
413
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
414 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
415 * If we have a parent tag...
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
416 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
417 if(parent_tag != NULL ) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
418 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
419 * Try to get the parent node for a tag
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
420 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
421 if((x = xmlnode_get_child(start, parent_tag)) == NULL) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
422 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
423 * Descend?
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
424 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
425 char *grand_parent = g_strdup(parent_tag);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
426 char *parent;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
427
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
428 if((parent = strrchr(grand_parent, '/')) != NULL) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
429 *(parent++) = '\0';
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
430 x = insert_tag_to_parent_tag(start, grand_parent, parent);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
431 } else {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
432 x = xmlnode_new_child(start, grand_parent);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
433 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
434 g_free(grand_parent);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
435 } else {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
436 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
437 * We found *something* to be the parent node.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
438 * Note: may be the "root" node!
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
439 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
440 xmlnode *y;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
441 if((y = xmlnode_get_child(x, new_tag)) != NULL) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
442 return(y);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
443 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
444 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
445 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
446
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
447 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
448 * insert the new tag into its parent node
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
449 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
450 return(xmlnode_new_child((x == NULL? start : x), new_tag));
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
451 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
452
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
453 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
454 * Send vCard info to Jabber server
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
455 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
456 void jabber_set_info(PurpleConnection *gc, const char *info)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
457 {
22425
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
458 PurpleStoredImage *img;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
459 JabberIq *iq;
24942
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
460 JabberStream *js = purple_connection_get_protocol_data(gc);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
461 xmlnode *vc_node;
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 20169
diff changeset
462 const struct tag_attr *tag_attr;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
463
18235
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
464 /* if we have't grabbed the remote vcard yet, we can't
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
465 * assume that what we have here is correct */
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
466 if(!js->vcard_fetched)
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
467 return;
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
468
28046
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
469 if (js->vcard_timer) {
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
470 purple_timeout_remove(js->vcard_timer);
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
471 js->vcard_timer = 0;
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
472 }
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
473
15273
a7838f939207 [gaim-migrate @ 18001]
Mark Doliner <markdoliner@pidgin.im>
parents: 15205
diff changeset
474 g_free(js->avatar_hash);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
475 js->avatar_hash = NULL;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
476
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
477 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
478 * Send only if there's actually any *information* to send
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
479 */
11388
3c8b093b5cfe [gaim-migrate @ 13616]
Nathan Walp <nwalp@pidgin.im>
parents: 11361
diff changeset
480 vc_node = info ? xmlnode_from_str(info, -1) : NULL;
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
481
22425
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
482 if (vc_node && (!vc_node->name ||
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
483 g_ascii_strncasecmp(vc_node->name, "vCard", 5))) {
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
484 xmlnode_free(vc_node);
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
485 vc_node = NULL;
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
486 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
487
22425
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
488 if ((img = purple_buddy_icons_find_account_icon(gc->account))) {
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
489 gconstpointer avatar_data;
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
490 gsize avatar_len;
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
491 xmlnode *photo, *binval, *type;
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
492 gchar *enc;
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
493
22425
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
494 if(!vc_node) {
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
495 vc_node = xmlnode_new("vCard");
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
496 for(tag_attr = vcard_tag_attr_list; tag_attr->attr != NULL; ++tag_attr)
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
497 xmlnode_set_attrib(vc_node, tag_attr->attr, tag_attr->value);
15273
a7838f939207 [gaim-migrate @ 18001]
Mark Doliner <markdoliner@pidgin.im>
parents: 15205
diff changeset
498 }
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
499
22425
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
500 avatar_data = purple_imgstore_get_data(img);
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
501 avatar_len = purple_imgstore_get_size(img);
25386
7ca88088e0de Allow us to remove vCard avatars when the PurpleAccount doesn't have one
Paul Aurich <darkrain42@pidgin.im>
parents: 25385
diff changeset
502 /* Get rid of an old PHOTO if one exists.
7ca88088e0de Allow us to remove vCard avatars when the PurpleAccount doesn't have one
Paul Aurich <darkrain42@pidgin.im>
parents: 25385
diff changeset
503 * TODO: This may want to be modified to remove all old PHOTO
7ca88088e0de Allow us to remove vCard avatars when the PurpleAccount doesn't have one
Paul Aurich <darkrain42@pidgin.im>
parents: 25385
diff changeset
504 * children, at the moment some people have managed to get
7ca88088e0de Allow us to remove vCard avatars when the PurpleAccount doesn't have one
Paul Aurich <darkrain42@pidgin.im>
parents: 25385
diff changeset
505 * multiple PHOTO entries in their vCard. */
22425
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
506 if((photo = xmlnode_get_child(vc_node, "PHOTO"))) {
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
507 xmlnode_free(photo);
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
508 }
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
509 photo = xmlnode_new_child(vc_node, "PHOTO");
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
510 type = xmlnode_new_child(photo, "TYPE");
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
511 xmlnode_insert_data(type, "image/png", -1);
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
512 binval = xmlnode_new_child(photo, "BINVAL");
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
513 enc = purple_base64_encode(avatar_data, avatar_len);
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
514
25110
40b3fffdb00b Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <darkrain42@pidgin.im>
parents: 25109
diff changeset
515 js->avatar_hash = jabber_calculate_data_sha1sum(avatar_data, avatar_len);
22425
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
516
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
517 xmlnode_insert_data(binval, enc, -1);
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
518 g_free(enc);
28151
109f9f60d725 This was a memory leak, right?
Mark Doliner <markdoliner@pidgin.im>
parents: 28114
diff changeset
519 purple_imgstore_unref(img);
25386
7ca88088e0de Allow us to remove vCard avatars when the PurpleAccount doesn't have one
Paul Aurich <darkrain42@pidgin.im>
parents: 25385
diff changeset
520 } else if (vc_node) {
7ca88088e0de Allow us to remove vCard avatars when the PurpleAccount doesn't have one
Paul Aurich <darkrain42@pidgin.im>
parents: 25385
diff changeset
521 xmlnode *photo;
7ca88088e0de Allow us to remove vCard avatars when the PurpleAccount doesn't have one
Paul Aurich <darkrain42@pidgin.im>
parents: 25385
diff changeset
522 /* TODO: Remove all PHOTO children? (see above note) */
7ca88088e0de Allow us to remove vCard avatars when the PurpleAccount doesn't have one
Paul Aurich <darkrain42@pidgin.im>
parents: 25385
diff changeset
523 if ((photo = xmlnode_get_child(vc_node, "PHOTO"))) {
7ca88088e0de Allow us to remove vCard avatars when the PurpleAccount doesn't have one
Paul Aurich <darkrain42@pidgin.im>
parents: 25385
diff changeset
524 xmlnode_free(photo);
7ca88088e0de Allow us to remove vCard avatars when the PurpleAccount doesn't have one
Paul Aurich <darkrain42@pidgin.im>
parents: 25385
diff changeset
525 }
22425
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
526 }
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
527
42142a0938a2 Fix setting vCard buddy icons when we don't have any other user info set.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21957
diff changeset
528 if (vc_node != NULL) {
15273
a7838f939207 [gaim-migrate @ 18001]
Mark Doliner <markdoliner@pidgin.im>
parents: 15205
diff changeset
529 iq = jabber_iq_new(js, JABBER_IQ_SET);
a7838f939207 [gaim-migrate @ 18001]
Mark Doliner <markdoliner@pidgin.im>
parents: 15205
diff changeset
530 xmlnode_insert_child(iq->node, vc_node);
a7838f939207 [gaim-migrate @ 18001]
Mark Doliner <markdoliner@pidgin.im>
parents: 15205
diff changeset
531 jabber_iq_send(iq);
25478
0a7f22678a35 Send presence updates from jabber_set_info, not jabber_set_buddy_icon.
Paul Aurich <darkrain42@pidgin.im>
parents: 25477
diff changeset
532
0a7f22678a35 Send presence updates from jabber_set_info, not jabber_set_buddy_icon.
Paul Aurich <darkrain42@pidgin.im>
parents: 25477
diff changeset
533 /* Send presence to update vcard-temp:x:update */
26958
a955bd42f529 propagate from branch 'im.pidgin.pidgin' (head 36f75a1d52a6af5574bf847d60054a1392dcbc67)
Paul Aurich <darkrain42@pidgin.im>
parents: 26764 26950
diff changeset
534 jabber_presence_send(js, FALSE);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
535 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
536 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
537
16538
c7e61e2917c9 Updates for the account buddy icon stuff. This doesn't yet work fully (and maybe not even partly), but it compiles.
Richard Laager <rlaager@pidgin.im>
parents: 16534
diff changeset
538 void jabber_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img)
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
539 {
25811
57012229a242 Use a JabberStream variable instead of a setting for the initial hash
Paul Aurich <darkrain42@pidgin.im>
parents: 25542
diff changeset
540 PurpleAccount *account = purple_connection_get_account(gc);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
541
26950
842628304397 Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <darkrain42@pidgin.im>
parents: 26947
diff changeset
542 /* Publish the avatar as specified in XEP-0084 */
842628304397 Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <darkrain42@pidgin.im>
parents: 26947
diff changeset
543 jabber_avatar_set(gc->proto_data, img);
842628304397 Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <darkrain42@pidgin.im>
parents: 26947
diff changeset
544 /* Set the image in our vCard */
25811
57012229a242 Use a JabberStream variable instead of a setting for the initial hash
Paul Aurich <darkrain42@pidgin.im>
parents: 25542
diff changeset
545 jabber_set_info(gc, purple_account_get_user_info(account));
25385
158a12123bc8 Paul noticed that the conditional blocks here were backwards. I'm surprised no
Paul Aurich <darkrain42@pidgin.im>
parents: 25110
diff changeset
546
25811
57012229a242 Use a JabberStream variable instead of a setting for the initial hash
Paul Aurich <darkrain42@pidgin.im>
parents: 25542
diff changeset
547 /* TODO: Fake image to ourselves, since a number of servers do not echo
57012229a242 Use a JabberStream variable instead of a setting for the initial hash
Paul Aurich <darkrain42@pidgin.im>
parents: 25542
diff changeset
548 * back our presence to us. To do this without uselessly copying the data
57012229a242 Use a JabberStream variable instead of a setting for the initial hash
Paul Aurich <darkrain42@pidgin.im>
parents: 25542
diff changeset
549 * of the image, we need purple_buddy_icons_set_for_user_image (i.e. takes
57012229a242 Use a JabberStream variable instead of a setting for the initial hash
Paul Aurich <darkrain42@pidgin.im>
parents: 25542
diff changeset
550 * an existing icon/stored image). */
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
551 }
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
552
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
553 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
554 * This is the callback from the "ok clicked" for "set vCard"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
555 *
25391
363cb62aa353 Correct a comment, I don't imagine anyone will actually need this but better
Etan Reisner <deryni@pidgin.im>
parents: 25386
diff changeset
556 * Sets the vCard with data from PurpleRequestFields.
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
557 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
558 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
559 jabber_format_info(PurpleConnection *gc, PurpleRequestFields *fields)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
560 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
561 xmlnode *vc_node;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
562 PurpleRequestField *field;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
563 const char *text;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
564 char *p;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
565 const struct vcard_template *vc_tp;
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 20169
diff changeset
566 const struct tag_attr *tag_attr;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
567
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
568 vc_node = xmlnode_new("vCard");
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
569
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
570 for(tag_attr = vcard_tag_attr_list; tag_attr->attr != NULL; ++tag_attr)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
571 xmlnode_set_attrib(vc_node, tag_attr->attr, tag_attr->value);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
572
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
573 for (vc_tp = vcard_template_data; vc_tp->label != NULL; vc_tp++) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
574 if (*vc_tp->label == '\0')
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
575 continue;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
576
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
577 field = purple_request_fields_get_field(fields, vc_tp->tag);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
578 text = purple_request_field_string_get_value(field);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
579
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
580
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
581 if (text != NULL && *text != '\0') {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
582 xmlnode *xp;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
583
28828
7c1855f037e7 jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <darkrain42@pidgin.im>
parents: 28667
diff changeset
584 purple_debug_info("jabber", "Setting %s to '%s'\n", vc_tp->tag, text);
9339
31f4980a09ea [gaim-migrate @ 10147]
Nathan Walp <nwalp@pidgin.im>
parents: 9285
diff changeset
585
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
586 if ((xp = insert_tag_to_parent_tag(vc_node,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
587 NULL, vc_tp->tag)) != NULL) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
588
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
589 xmlnode_insert_data(xp, text, -1);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
590 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
591 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
592 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
593
7642
4e1735a499f5 [gaim-migrate @ 8285]
Nathan Walp <nwalp@pidgin.im>
parents: 7445
diff changeset
594 p = xmlnode_to_str(vc_node, NULL);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
595 xmlnode_free(vc_node);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
596
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
597 purple_account_set_user_info(purple_connection_get_account(gc), p);
14669
df3f48ab4aff [gaim-migrate @ 17335]
Mark Doliner <markdoliner@pidgin.im>
parents: 14525
diff changeset
598 serv_set_info(gc, p);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
599
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
600 g_free(p);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
601 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
602
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
603 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
604 * This gets executed by the proto action
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
605 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
606 * Creates a new PurpleRequestFields struct, gets the XML-formatted user_info
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
607 * string (if any) into GSLists for the (multi-entry) edit dialog and
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
608 * calls the set_vcard dialog.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
609 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
610 void jabber_setup_set_info(PurplePluginAction *action)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
611 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
612 PurpleConnection *gc = (PurpleConnection *) action->context;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
613 PurpleRequestFields *fields;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
614 PurpleRequestFieldGroup *group;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
615 PurpleRequestField *field;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
616 const struct vcard_template *vc_tp;
14129
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
617 const char *user_info;
14130
02a5f8dad9cf [gaim-migrate @ 16689]
Daniel Atallah <datallah@pidgin.im>
parents: 14129
diff changeset
618 char *cdata = NULL;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
619 xmlnode *x_vc_data = NULL;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
620
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
621 fields = purple_request_fields_new();
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
622 group = purple_request_field_group_new(NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
623 purple_request_fields_add_group(fields, group);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
624
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
625 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
626 * Get existing, XML-formatted, user info
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
627 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
628 if((user_info = purple_account_get_user_info(gc->account)) != NULL)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
629 x_vc_data = xmlnode_from_str(user_info, -1);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
630
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
631 /*
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
632 * Set up GSLists for edit with labels from "template," data from user info
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
633 */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
634 for(vc_tp = vcard_template_data; vc_tp->label != NULL; ++vc_tp) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
635 xmlnode *data_node;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
636 if((vc_tp->label)[0] == '\0')
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
637 continue;
14129
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
638
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
639 if (x_vc_data != NULL) {
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
640 if(vc_tp->ptag == NULL) {
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
641 data_node = xmlnode_get_child(x_vc_data, vc_tp->tag);
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
642 } else {
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
643 gchar *tag = g_strdup_printf("%s/%s", vc_tp->ptag, vc_tp->tag);
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
644 data_node = xmlnode_get_child(x_vc_data, tag);
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
645 g_free(tag);
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
646 }
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
647 if(data_node)
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
648 cdata = xmlnode_get_data(data_node);
14130
02a5f8dad9cf [gaim-migrate @ 16689]
Daniel Atallah <datallah@pidgin.im>
parents: 14129
diff changeset
649 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
650
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
651 if(strcmp(vc_tp->tag, "DESC") == 0) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
652 field = purple_request_field_string_new(vc_tp->tag,
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
653 _(vc_tp->label), cdata,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
654 TRUE);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
655 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
656 field = purple_request_field_string_new(vc_tp->tag,
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
657 _(vc_tp->label), cdata,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
658 FALSE);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
659 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
660
14130
02a5f8dad9cf [gaim-migrate @ 16689]
Daniel Atallah <datallah@pidgin.im>
parents: 14129
diff changeset
661 g_free(cdata);
02a5f8dad9cf [gaim-migrate @ 16689]
Daniel Atallah <datallah@pidgin.im>
parents: 14129
diff changeset
662 cdata = NULL;
02a5f8dad9cf [gaim-migrate @ 16689]
Daniel Atallah <datallah@pidgin.im>
parents: 14129
diff changeset
663
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
664 purple_request_field_group_add_field(group, field);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
665 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
666
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
667 if(x_vc_data != NULL)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
668 xmlnode_free(x_vc_data);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
669
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
670 purple_request_fields(gc, _("Edit XMPP vCard"),
16961
b6955f946f8f s/Jabber/XMPP in user-visible places.
Richard Laager <rlaager@pidgin.im>
parents: 16799
diff changeset
671 _("Edit XMPP vCard"),
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
672 _("All items below are optional. Enter only the "
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
673 "information with which you feel comfortable."),
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
674 fields,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
675 _("Save"), G_CALLBACK(jabber_format_info),
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
676 _("Cancel"), NULL,
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 15884
diff changeset
677 purple_connection_get_account(gc), NULL, NULL,
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
678 gc);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
679 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
680
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
681 /*---------------------------------------*/
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
682 /* End Jabber "set info" (vCard) support */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
683 /*---------------------------------------*/
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
684
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
685 /******
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
686 * end of that ancient crap that needs to die
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
687 ******/
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
688
15363
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
689 static void jabber_buddy_info_destroy(JabberBuddyInfo *jbi)
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
690 {
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
691 /* Remove the timeout, which would otherwise trigger jabber_buddy_get_info_timeout() */
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
692 if (jbi->timeout_handle > 0)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
693 purple_timeout_remove(jbi->timeout_handle);
15727
0754583ceeae Don't access the list element after it has been freed.
Daniel Atallah <datallah@pidgin.im>
parents: 15688
diff changeset
694
15363
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
695 g_free(jbi->jid);
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
696 g_hash_table_destroy(jbi->resources);
27069
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
697 g_free(jbi->last_message);
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
698 purple_notify_user_info_destroy(jbi->user_info);
15727
0754583ceeae Don't access the list element after it has been freed.
Daniel Atallah <datallah@pidgin.im>
parents: 15688
diff changeset
699 g_free(jbi);
15363
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
700 }
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
701
27550
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
702 static void
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
703 add_jbr_info(JabberBuddyInfo *jbi, const char *resource,
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
704 JabberBuddyResource *jbr)
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
705 {
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
706 JabberBuddyInfoResource *jbir;
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
707 PurpleNotifyUserInfo *user_info;
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
708
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
709 jbir = g_hash_table_lookup(jbi->resources, resource);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
710 user_info = jbi->user_info;
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
711
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
712 if (jbr && jbr->client.name) {
27551
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
713 char *tmp =
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
714 g_strdup_printf("%s%s%s", jbr->client.name,
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
715 (jbr->client.version ? " " : ""),
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
716 (jbr->client.version ? jbr->client.version : ""));
27550
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
717 purple_notify_user_info_prepend_pair(user_info, _("Client"), tmp);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
718 g_free(tmp);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
719
27551
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
720 if (jbr->client.os)
27550
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
721 purple_notify_user_info_prepend_pair(user_info, _("Operating System"), jbr->client.os);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
722 }
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
723
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
724 if (jbr && jbr->tz_off != PURPLE_NO_TZ_OFF) {
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
725 time_t now_t;
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
726 struct tm *now;
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
727 char *timestamp;
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
728 time(&now_t);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
729 now_t += jbr->tz_off;
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
730 now = gmtime(&now_t);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
731
27551
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
732 timestamp =
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
733 g_strdup_printf("%s %c%02d%02d", purple_time_format(now),
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
734 jbr->tz_off < 0 ? '-' : '+',
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
735 abs(jbr->tz_off / (60*60)),
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
736 abs((jbr->tz_off % (60*60)) / 60));
27550
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
737 purple_notify_user_info_prepend_pair(user_info, _("Local Time"), timestamp);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
738 g_free(timestamp);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
739 }
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
740
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
741 if (jbir && jbir->idle_seconds > 0) {
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
742 char *idle = purple_str_seconds_to_string(jbir->idle_seconds);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
743 purple_notify_user_info_prepend_pair(user_info, _("Idle"), idle);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
744 g_free(idle);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
745 }
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
746
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
747 if (jbr) {
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
748 char *purdy = NULL;
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
749 char *tmp;
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
750 char priority[12];
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
751 const char *status_name = jabber_buddy_state_get_name(jbr->state);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
752
27551
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
753 if (jbr->status) {
28290
55c4b5a11af7 jabber: Escape status messages with a '<' or '>' in the Get Info dialog.
Paul Aurich <darkrain42@pidgin.im>
parents: 28278
diff changeset
754 tmp = purple_markup_escape_text(jbr->status, -1);
55c4b5a11af7 jabber: Escape status messages with a '<' or '>' in the Get Info dialog.
Paul Aurich <darkrain42@pidgin.im>
parents: 28278
diff changeset
755 purdy = purple_strdup_withhtml(tmp);
55c4b5a11af7 jabber: Escape status messages with a '<' or '>' in the Get Info dialog.
Paul Aurich <darkrain42@pidgin.im>
parents: 28278
diff changeset
756 g_free(tmp);
27551
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
757
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
758 if (purple_strequal(status_name, purdy))
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
759 status_name = NULL;
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
760 }
27550
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
761
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
762 tmp = g_strdup_printf("%s%s%s", (status_name ? status_name : ""),
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
763 ((status_name && purdy) ? ": " : ""),
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
764 (purdy ? purdy : ""));
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
765 purple_notify_user_info_prepend_pair(user_info, _("Status"), tmp);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
766
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
767 g_snprintf(priority, sizeof(priority), "%d", jbr->priority);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
768 purple_notify_user_info_prepend_pair(user_info, _("Priority"), priority);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
769
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
770 g_free(tmp);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
771 g_free(purdy);
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
772 } else {
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
773 purple_notify_user_info_prepend_pair(user_info, _("Status"), _("Unknown"));
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
774 }
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
775 }
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
776
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
777 static void jabber_buddy_info_show_if_ready(JabberBuddyInfo *jbi)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
778 {
27550
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
779 char *resource_name;
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
780 JabberBuddyResource *jbr;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
781 GList *resources;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
782 PurpleNotifyUserInfo *user_info;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
783
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
784 /* not yet */
27551
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
785 if (jbi->ids)
11361
b8c9532c9ffe [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
786 return;
b8c9532c9ffe [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
787
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
788 user_info = jbi->user_info;
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
789 resource_name = jabber_get_resource(jbi->jid);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
790
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
791 /* If we have one or more pairs from the vcard, put a section break above it */
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
792 if (purple_notify_user_info_get_entries(user_info))
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
793 purple_notify_user_info_prepend_section_break(user_info);
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
794
27551
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
795 /* Add the information about the user's resource(s) */
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
796 if (resource_name) {
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
797 jbr = jabber_buddy_find_resource(jbi->jb, resource_name);
27550
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
798 add_jbr_info(jbi, resource_name, jbr);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
799 } else {
27550
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
800 for (resources = jbi->jb->resources; resources; resources = resources->next) {
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
801 jbr = resources->data;
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
802
27053
fb088f01758d Add a section break between resources in "Get info"
Marcus Lundblad <malu@pidgin.im>
parents: 26958
diff changeset
803 /* put a section break between resources, this is not needed if
fb088f01758d Add a section break between resources in "Get info"
Marcus Lundblad <malu@pidgin.im>
parents: 26958
diff changeset
804 we are at the first, because one was already added for the vcard
fb088f01758d Add a section break between resources in "Get info"
Marcus Lundblad <malu@pidgin.im>
parents: 26958
diff changeset
805 section */
27551
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
806 if (resources != jbi->jb->resources)
27053
fb088f01758d Add a section break between resources in "Get info"
Marcus Lundblad <malu@pidgin.im>
parents: 26958
diff changeset
807 purple_notify_user_info_prepend_section_break(user_info);
fb088f01758d Add a section break between resources in "Get info"
Marcus Lundblad <malu@pidgin.im>
parents: 26958
diff changeset
808
27550
775140c24a35 Factor out the duplicated code for displaying XMPP Get Info
Paul Aurich <darkrain42@pidgin.im>
parents: 27549
diff changeset
809 add_jbr_info(jbi, jbr->name, jbr);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
810
27551
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
811 if (jbr->name)
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
812 purple_notify_user_info_prepend_pair(user_info, _("Resource"), jbr->name);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
813 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
814 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
815
27069
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
816 if (!jbi->jb->resources) {
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
817 /* the buddy is offline */
29063
f245c5e9e9f3 jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
818 gboolean is_domain = jabber_jid_is_domain(jbi->jid);
29097
0834410aa178 Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents: 29064
diff changeset
819
27069
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
820 if (jbi->last_seconds > 0) {
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
821 char *last = purple_str_seconds_to_string(jbi->last_seconds);
29063
f245c5e9e9f3 jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
822 gchar *message = NULL;
f245c5e9e9f3 jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
823 const gchar *title = NULL;
f245c5e9e9f3 jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
824 if (is_domain) {
f245c5e9e9f3 jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
825 title = _("Uptime");
29184
6218763ad5b4 This string is already translated; so it need not be translated again.
Paul Aurich <darkrain42@pidgin.im>
parents: 29097
diff changeset
826 message = last;
6218763ad5b4 This string is already translated; so it need not be translated again.
Paul Aurich <darkrain42@pidgin.im>
parents: 29097
diff changeset
827 last = NULL;
29063
f245c5e9e9f3 jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
828 } else {
f245c5e9e9f3 jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
829 title = _("Logged Off");
f245c5e9e9f3 jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
830 message = g_strdup_printf(_("%s ago"), last);
f245c5e9e9f3 jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
831 }
f245c5e9e9f3 jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
832 purple_notify_user_info_prepend_pair(user_info, title, message);
27069
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
833 g_free(last);
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
834 g_free(message);
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
835 }
29063
f245c5e9e9f3 jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
836
29097
0834410aa178 Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents: 29064
diff changeset
837 if (!is_domain) {
0834410aa178 Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents: 29064
diff changeset
838 gchar *status =
0834410aa178 Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents: 29064
diff changeset
839 g_strdup_printf("%s%s%s", _("Offline"),
0834410aa178 Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents: 29064
diff changeset
840 jbi->last_message ? ": " : "",
0834410aa178 Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents: 29064
diff changeset
841 jbi->last_message ? jbi->last_message : "");
29063
f245c5e9e9f3 jabber: When getting info on a "bare" domain JID, interpret the value of "last"
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
842 purple_notify_user_info_prepend_pair(user_info, _("Status"), status);
29097
0834410aa178 Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents: 29064
diff changeset
843 g_free(status);
0834410aa178 Tighter scoping and slightly less memory usage.
Paul Aurich <darkrain42@pidgin.im>
parents: 29064
diff changeset
844 }
27069
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
845 }
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
846
7306
61d7324411f8 [gaim-migrate @ 7890]
Nathan Walp <nwalp@pidgin.im>
parents: 7250
diff changeset
847 g_free(resource_name);
61d7324411f8 [gaim-migrate @ 7890]
Nathan Walp <nwalp@pidgin.im>
parents: 7250
diff changeset
848
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
849 purple_notify_userinfo(jbi->js->gc, jbi->jid, user_info, NULL, NULL);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
850
27551
4119bf954943 Style and comments
Paul Aurich <darkrain42@pidgin.im>
parents: 27550
diff changeset
851 while (jbi->vcard_imgids) {
16437
7ff7c3405ea2 Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
852 purple_imgstore_unref_by_id(GPOINTER_TO_INT(jbi->vcard_imgids->data));
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
853 jbi->vcard_imgids = g_slist_delete_link(jbi->vcard_imgids, jbi->vcard_imgids);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
854 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
855
15363
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
856 jbi->js->pending_buddy_info_requests = g_slist_remove(jbi->js->pending_buddy_info_requests, jbi);
14155
c754f6e5be1f [gaim-migrate @ 16719]
Mark Doliner <markdoliner@pidgin.im>
parents: 14130
diff changeset
857
15363
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
858 jabber_buddy_info_destroy(jbi);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
859 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
860
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
861 static void jabber_buddy_info_remove_id(JabberBuddyInfo *jbi, const char *id)
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
862 {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
863 GSList *l = jbi->ids;
15727
0754583ceeae Don't access the list element after it has been freed.
Daniel Atallah <datallah@pidgin.im>
parents: 15688
diff changeset
864 char *comp_id;
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
865
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
866 if(!id)
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
867 return;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
868
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
869 while(l) {
15727
0754583ceeae Don't access the list element after it has been freed.
Daniel Atallah <datallah@pidgin.im>
parents: 15688
diff changeset
870 comp_id = l->data;
0754583ceeae Don't access the list element after it has been freed.
Daniel Atallah <datallah@pidgin.im>
parents: 15688
diff changeset
871 if(!strcmp(id, comp_id)) {
0754583ceeae Don't access the list element after it has been freed.
Daniel Atallah <datallah@pidgin.im>
parents: 15688
diff changeset
872 jbi->ids = g_slist_remove(jbi->ids, comp_id);
0754583ceeae Don't access the list element after it has been freed.
Daniel Atallah <datallah@pidgin.im>
parents: 15688
diff changeset
873 g_free(comp_id);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
874 return;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
875 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
876 l = l->next;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
877 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
878 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
879
28046
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
880 static gboolean
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
881 set_own_vcard_cb(gpointer data)
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
882 {
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
883 JabberStream *js = data;
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
884 PurpleAccount *account = purple_connection_get_account(js->gc);
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
885
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
886 js->vcard_timer = 0;
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
887
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
888 jabber_set_info(js->gc, purple_account_get_user_info(account));
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
889
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
890 return FALSE;
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
891 }
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
892
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
893 static void jabber_vcard_save_mine(JabberStream *js, const char *from,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
894 JabberIqType type, const char *id,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
895 xmlnode *packet, gpointer data)
18235
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
896 {
25477
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
897 xmlnode *vcard, *photo, *binval;
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
898 char *txt, *vcard_hash = NULL;
28046
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
899 PurpleAccount *account;
18235
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
900
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
901 if (type == JABBER_IQ_ERROR) {
27418
518044412902 If there's no vCard on the server, we have to be able to set ours. Allows bootstrapping a new account with (at least) Prosody.
Paul Aurich <darkrain42@pidgin.im>
parents: 27417
diff changeset
902 xmlnode *error;
27417
2693e524de1f Missing newline
Paul Aurich <darkrain42@pidgin.im>
parents: 27361
diff changeset
903 purple_debug_warning("jabber", "Server returned error while retrieving vCard\n");
27418
518044412902 If there's no vCard on the server, we have to be able to set ours. Allows bootstrapping a new account with (at least) Prosody.
Paul Aurich <darkrain42@pidgin.im>
parents: 27417
diff changeset
904
518044412902 If there's no vCard on the server, we have to be able to set ours. Allows bootstrapping a new account with (at least) Prosody.
Paul Aurich <darkrain42@pidgin.im>
parents: 27417
diff changeset
905 error = xmlnode_get_child(packet, "error");
518044412902 If there's no vCard on the server, we have to be able to set ours. Allows bootstrapping a new account with (at least) Prosody.
Paul Aurich <darkrain42@pidgin.im>
parents: 27417
diff changeset
906 if (!error || !xmlnode_get_child(error, "item-not-found"))
518044412902 If there's no vCard on the server, we have to be able to set ours. Allows bootstrapping a new account with (at least) Prosody.
Paul Aurich <darkrain42@pidgin.im>
parents: 27417
diff changeset
907 return;
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
908 }
18235
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
909
28046
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
910 account = purple_connection_get_account(js->gc);
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
911
18235
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
912 if((vcard = xmlnode_get_child(packet, "vCard")) ||
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
913 (vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp")))
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
914 {
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
915 txt = xmlnode_to_str(vcard, NULL);
28046
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
916 purple_account_set_user_info(account, txt);
18235
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
917 g_free(txt);
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
918 } else {
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
919 /* if we have no vCard, then lets not overwrite what we might have locally */
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
920 }
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
921
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
922 js->vcard_fetched = TRUE;
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
923
25477
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
924 if (vcard && (photo = xmlnode_get_child(vcard, "PHOTO")) &&
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
925 (binval = xmlnode_get_child(photo, "BINVAL"))) {
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
926 gsize size;
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
927 char *bintext = xmlnode_get_data(binval);
28311
9c92aae99f62 jabber: Fix a crash when the vcard includes an empty BINVAL.
Paul Aurich <darkrain42@pidgin.im>
parents: 28290
diff changeset
928 if (bintext) {
9c92aae99f62 jabber: Fix a crash when the vcard includes an empty BINVAL.
Paul Aurich <darkrain42@pidgin.im>
parents: 28290
diff changeset
929 guchar *data = purple_base64_decode(bintext, &size);
9c92aae99f62 jabber: Fix a crash when the vcard includes an empty BINVAL.
Paul Aurich <darkrain42@pidgin.im>
parents: 28290
diff changeset
930 g_free(bintext);
25477
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
931
28311
9c92aae99f62 jabber: Fix a crash when the vcard includes an empty BINVAL.
Paul Aurich <darkrain42@pidgin.im>
parents: 28290
diff changeset
932 if (data) {
9c92aae99f62 jabber: Fix a crash when the vcard includes an empty BINVAL.
Paul Aurich <darkrain42@pidgin.im>
parents: 28290
diff changeset
933 vcard_hash = jabber_calculate_data_sha1sum(data, size);
9c92aae99f62 jabber: Fix a crash when the vcard includes an empty BINVAL.
Paul Aurich <darkrain42@pidgin.im>
parents: 28290
diff changeset
934 g_free(data);
9c92aae99f62 jabber: Fix a crash when the vcard includes an empty BINVAL.
Paul Aurich <darkrain42@pidgin.im>
parents: 28290
diff changeset
935 }
25477
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
936 }
18235
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
937 }
25477
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
938
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
939 /* Republish our vcard if the photo is different than the server's */
28881
244fb329e5df jabber: Go back to not overwriting avatars if there is not one locally set.
Paul Aurich <darkrain42@pidgin.im>
parents: 28879
diff changeset
940 if (js->initial_avatar_hash && !purple_strequal(vcard_hash, js->initial_avatar_hash)) {
28046
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
941 /*
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
942 * Google Talk has developed the behavior that it will not accept
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
943 * a vcard set in the first 10 seconds (or so) of the connection;
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
944 * it returns an error (namespaces trimmed):
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
945 * <error code="500" type="wait"><internal-server-error/></error>.
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
946 */
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
947 if (js->googletalk)
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
948 js->vcard_timer = purple_timeout_add_seconds(10, set_own_vcard_cb,
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
949 js);
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
950 else
8b6fcc2c95b3 jabber: Fix setting Google Talk avatar at login.
Paul Aurich <darkrain42@pidgin.im>
parents: 27998
diff changeset
951 jabber_set_info(js->gc, purple_account_get_user_info(account));
28883
b005808ee1a5 jabber: This is more correct.
Paul Aurich <darkrain42@pidgin.im>
parents: 28882
diff changeset
952 } else if (vcard_hash) {
28882
4d43dd2afadb jabber: The second half; advertise the vCard avatar, whatever it is.
Paul Aurich <darkrain42@pidgin.im>
parents: 28881
diff changeset
953 /* A photo is in the vCard. Advertise its hash */
4d43dd2afadb jabber: The second half; advertise the vCard avatar, whatever it is.
Paul Aurich <darkrain42@pidgin.im>
parents: 28881
diff changeset
954 js->avatar_hash = vcard_hash;
4d43dd2afadb jabber: The second half; advertise the vCard avatar, whatever it is.
Paul Aurich <darkrain42@pidgin.im>
parents: 28881
diff changeset
955 vcard_hash = NULL;
4d43dd2afadb jabber: The second half; advertise the vCard avatar, whatever it is.
Paul Aurich <darkrain42@pidgin.im>
parents: 28881
diff changeset
956
4d43dd2afadb jabber: The second half; advertise the vCard avatar, whatever it is.
Paul Aurich <darkrain42@pidgin.im>
parents: 28881
diff changeset
957 /* Send presence to update vcard-temp:x:update */
4d43dd2afadb jabber: The second half; advertise the vCard avatar, whatever it is.
Paul Aurich <darkrain42@pidgin.im>
parents: 28881
diff changeset
958 jabber_presence_send(js, FALSE);
25477
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
959 }
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
960
ada9e5c4a10a Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <darkrain42@pidgin.im>
parents: 25475
diff changeset
961 g_free(vcard_hash);
18235
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
962 }
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
963
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
964 void jabber_vcard_fetch_mine(JabberStream *js)
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
965 {
21957
0ce77f86c7f3 Fix XMPP buddy icons. Somehow a 'VCard' element got changed to a query
Sean Egan <seanegan@pidgin.im>
parents: 21681
diff changeset
966 JabberIq *iq = jabber_iq_new(js, JABBER_IQ_GET);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
967
21957
0ce77f86c7f3 Fix XMPP buddy icons. Somehow a 'VCard' element got changed to a query
Sean Egan <seanegan@pidgin.im>
parents: 21681
diff changeset
968 xmlnode *vcard = xmlnode_new_child(iq->node, "vCard");
0ce77f86c7f3 Fix XMPP buddy icons. Somehow a 'VCard' element got changed to a query
Sean Egan <seanegan@pidgin.im>
parents: 21681
diff changeset
969 xmlnode_set_namespace(vcard, "vcard-temp");
18235
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
970 jabber_iq_set_callback(iq, jabber_vcard_save_mine, NULL);
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
971
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
972 jabber_iq_send(iq);
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
973 }
60a9bd99f035 server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents: 18196
diff changeset
974
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
975 static void jabber_vcard_parse(JabberStream *js, const char *from,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
976 JabberIqType type, const char *id,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
977 xmlnode *packet, gpointer data)
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
978 {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
979 char *bare_jid;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
980 char *text;
22586
ae2d0016b91e If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
Evan Schoenberg <evands@pidgin.im>
parents: 22550
diff changeset
981 char *serverside_alias = NULL;
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
982 xmlnode *vcard;
29368
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
983 PurpleAccount *account;
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
984 JabberBuddyInfo *jbi = data;
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
985 PurpleNotifyUserInfo *user_info;
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
986
29368
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
987 g_return_if_fail(jbi != NULL);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
988
14129
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
989 jabber_buddy_info_remove_id(jbi, id);
70db31dfeeb1 [gaim-migrate @ 16688]
Daniel Atallah <datallah@pidgin.im>
parents: 13808
diff changeset
990
29368
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
991 if (type == JABBER_IQ_ERROR) {
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
992 purple_debug_info("jabber", "Got error response for vCard\n");
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
993 jabber_buddy_info_show_if_ready(jbi);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
994 return;
29368
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
995 }
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
996
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
997 user_info = jbi->user_info;
29368
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
998 account = purple_connection_get_account(js->gc);
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
999 bare_jid = jabber_get_bare_jid(from ? from : purple_account_get_username(account));
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1000
29368
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1001 /* TODO: Is the query xmlns='vcard-temp' version of this still necessary? */
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1002 if((vcard = xmlnode_get_child(packet, "vCard")) ||
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1003 (vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp"))) {
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1004 xmlnode *child;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1005 for(child = vcard->child; child; child = child->next)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1006 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1007 xmlnode *child2;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1008
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 7955
diff changeset
1009 if(child->type != XMLNODE_TYPE_TAG)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1010 continue;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1011
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1012 text = xmlnode_get_data(child);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1013 if(text && !strcmp(child->name, "FN")) {
22586
ae2d0016b91e If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
Evan Schoenberg <evands@pidgin.im>
parents: 22550
diff changeset
1014 if (!serverside_alias)
ae2d0016b91e If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
Evan Schoenberg <evands@pidgin.im>
parents: 22550
diff changeset
1015 serverside_alias = g_strdup(text);
ae2d0016b91e If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
Evan Schoenberg <evands@pidgin.im>
parents: 22550
diff changeset
1016
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1017 purple_notify_user_info_add_pair(user_info, _("Full Name"), text);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1018 } else if(!strcmp(child->name, "N")) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1019 for(child2 = child->child; child2; child2 = child2->next)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1020 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1021 char *text2;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1022
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 7955
diff changeset
1023 if(child2->type != XMLNODE_TYPE_TAG)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1024 continue;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1025
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1026 text2 = xmlnode_get_data(child2);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1027 if(text2 && !strcmp(child2->name, "FAMILY")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1028 purple_notify_user_info_add_pair(user_info, _("Family Name"), text2);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1029 } else if(text2 && !strcmp(child2->name, "GIVEN")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1030 purple_notify_user_info_add_pair(user_info, _("Given Name"), text2);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1031 } else if(text2 && !strcmp(child2->name, "MIDDLE")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1032 purple_notify_user_info_add_pair(user_info, _("Middle Name"), text2);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1033 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1034 g_free(text2);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1035 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1036 } else if(text && !strcmp(child->name, "NICKNAME")) {
24200
6c6870d15155 Ignore nicknames which are just the user portion of the JID, as these aren't useful. Instead, prefer the fullname in that situation for serverside alias purposes.
Evan Schoenberg <evands@pidgin.im>
parents: 24012
diff changeset
1037 /* Prefer the Nickcname to the Full Name as the serverside alias if it's not just part of the jid.
6c6870d15155 Ignore nicknames which are just the user portion of the JID, as these aren't useful. Instead, prefer the fullname in that situation for serverside alias purposes.
Evan Schoenberg <evands@pidgin.im>
parents: 24012
diff changeset
1038 * Ignore it if it's part of the jid. */
6c6870d15155 Ignore nicknames which are just the user portion of the JID, as these aren't useful. Instead, prefer the fullname in that situation for serverside alias purposes.
Evan Schoenberg <evands@pidgin.im>
parents: 24012
diff changeset
1039 if (strstr(bare_jid, text) == NULL) {
6c6870d15155 Ignore nicknames which are just the user portion of the JID, as these aren't useful. Instead, prefer the fullname in that situation for serverside alias purposes.
Evan Schoenberg <evands@pidgin.im>
parents: 24012
diff changeset
1040 g_free(serverside_alias);
6c6870d15155 Ignore nicknames which are just the user portion of the JID, as these aren't useful. Instead, prefer the fullname in that situation for serverside alias purposes.
Evan Schoenberg <evands@pidgin.im>
parents: 24012
diff changeset
1041 serverside_alias = g_strdup(text);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1042
24200
6c6870d15155 Ignore nicknames which are just the user portion of the JID, as these aren't useful. Instead, prefer the fullname in that situation for serverside alias purposes.
Evan Schoenberg <evands@pidgin.im>
parents: 24012
diff changeset
1043 purple_notify_user_info_add_pair(user_info, _("Nickname"), text);
6c6870d15155 Ignore nicknames which are just the user portion of the JID, as these aren't useful. Instead, prefer the fullname in that situation for serverside alias purposes.
Evan Schoenberg <evands@pidgin.im>
parents: 24012
diff changeset
1044 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1045 } else if(text && !strcmp(child->name, "BDAY")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1046 purple_notify_user_info_add_pair(user_info, _("Birthday"), text);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1047 } else if(!strcmp(child->name, "ADR")) {
12933
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1048 gboolean address_line_added = FALSE;
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1049
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1050 for(child2 = child->child; child2; child2 = child2->next)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1051 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1052 char *text2;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1053
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 7955
diff changeset
1054 if(child2->type != XMLNODE_TYPE_TAG)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1055 continue;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1056
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1057 text2 = xmlnode_get_data(child2);
12933
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1058 if (text2 == NULL)
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1059 continue;
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1060
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1061 /* We do this here so that it's not added if all the child
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1062 * elements are empty. */
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1063 if (!address_line_added)
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1064 {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1065 purple_notify_user_info_add_section_header(user_info, _("Address"));
12933
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1066 address_line_added = TRUE;
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1067 }
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1068
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1069 if(!strcmp(child2->name, "POBOX")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1070 purple_notify_user_info_add_pair(user_info, _("P.O. Box"), text2);
27998
889b1fbece5b jabber: Handle "Extended Address" correctly.
Paul Aurich <darkrain42@pidgin.im>
parents: 27965
diff changeset
1071 } else if (g_str_equal(child2->name, "EXTADD") || g_str_equal(child2->name, "EXTADR")) {
889b1fbece5b jabber: Handle "Extended Address" correctly.
Paul Aurich <darkrain42@pidgin.im>
parents: 27965
diff changeset
1072 /*
889b1fbece5b jabber: Handle "Extended Address" correctly.
Paul Aurich <darkrain42@pidgin.im>
parents: 27965
diff changeset
1073 * EXTADD is correct, EXTADR is generated by other
889b1fbece5b jabber: Handle "Extended Address" correctly.
Paul Aurich <darkrain42@pidgin.im>
parents: 27965
diff changeset
1074 * clients. The next time someone reads this, remove
889b1fbece5b jabber: Handle "Extended Address" correctly.
Paul Aurich <darkrain42@pidgin.im>
parents: 27965
diff changeset
1075 * EXTADR.
889b1fbece5b jabber: Handle "Extended Address" correctly.
Paul Aurich <darkrain42@pidgin.im>
parents: 27965
diff changeset
1076 */
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1077 purple_notify_user_info_add_pair(user_info, _("Extended Address"), text2);
12933
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1078 } else if(!strcmp(child2->name, "STREET")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1079 purple_notify_user_info_add_pair(user_info, _("Street Address"), text2);
12933
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1080 } else if(!strcmp(child2->name, "LOCALITY")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1081 purple_notify_user_info_add_pair(user_info, _("Locality"), text2);
12933
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1082 } else if(!strcmp(child2->name, "REGION")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1083 purple_notify_user_info_add_pair(user_info, _("Region"), text2);
12933
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1084 } else if(!strcmp(child2->name, "PCODE")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1085 purple_notify_user_info_add_pair(user_info, _("Postal Code"), text2);
12933
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1086 } else if(!strcmp(child2->name, "CTRY")
885970470a9b [gaim-migrate @ 15286]
Richard Laager <rlaager@pidgin.im>
parents: 12919
diff changeset
1087 || !strcmp(child2->name, "COUNTRY")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1088 purple_notify_user_info_add_pair(user_info, _("Country"), text2);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1089 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1090 g_free(text2);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1091 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1092
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1093 if (address_line_added)
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1094 purple_notify_user_info_add_section_break(user_info);
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1095
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1096 } else if(!strcmp(child->name, "TEL")) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1097 char *number;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1098 if((child2 = xmlnode_get_child(child, "NUMBER"))) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1099 /* show what kind of number it is */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1100 number = xmlnode_get_data(child2);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1101 if(number) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1102 purple_notify_user_info_add_pair(user_info, _("Telephone"), number);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1103 g_free(number);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1104 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1105 } else if((number = xmlnode_get_data(child))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1106 /* lots of clients (including purple) do this, but it's
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1107 * out of spec */
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1108 purple_notify_user_info_add_pair(user_info, _("Telephone"), number);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1109 g_free(number);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1110 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1111 } else if(!strcmp(child->name, "EMAIL")) {
19931
229fb62285b0 Data in vCards is supposed to be plain text, not HTML. So escape
Mark Doliner <markdoliner@pidgin.im>
parents: 19921
diff changeset
1112 char *userid, *escaped;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1113 if((child2 = xmlnode_get_child(child, "USERID"))) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1114 /* show what kind of email it is */
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1115 userid = xmlnode_get_data(child2);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1116 if(userid) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1117 char *mailto;
19931
229fb62285b0 Data in vCards is supposed to be plain text, not HTML. So escape
Mark Doliner <markdoliner@pidgin.im>
parents: 19921
diff changeset
1118 escaped = g_markup_escape_text(userid, -1);
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1119 mailto = g_strdup_printf("<a href=\"mailto:%s\">%s</a>", escaped, escaped);
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1120 purple_notify_user_info_add_pair(user_info, _("Email"), mailto);
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1121
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1122 g_free(mailto);
19931
229fb62285b0 Data in vCards is supposed to be plain text, not HTML. So escape
Mark Doliner <markdoliner@pidgin.im>
parents: 19921
diff changeset
1123 g_free(escaped);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1124 g_free(userid);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1125 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1126 } else if((userid = xmlnode_get_data(child))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1127 /* lots of clients (including purple) do this, but it's
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1128 * out of spec */
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1129 char *mailto;
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1130
19931
229fb62285b0 Data in vCards is supposed to be plain text, not HTML. So escape
Mark Doliner <markdoliner@pidgin.im>
parents: 19921
diff changeset
1131 escaped = g_markup_escape_text(userid, -1);
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1132 mailto = g_strdup_printf("<a href=\"mailto:%s\">%s</a>", escaped, escaped);
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1133 purple_notify_user_info_add_pair(user_info, _("Email"), mailto);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1134
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1135 g_free(mailto);
19931
229fb62285b0 Data in vCards is supposed to be plain text, not HTML. So escape
Mark Doliner <markdoliner@pidgin.im>
parents: 19921
diff changeset
1136 g_free(escaped);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1137 g_free(userid);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1138 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1139 } else if(!strcmp(child->name, "ORG")) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1140 for(child2 = child->child; child2; child2 = child2->next)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1141 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1142 char *text2;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1143
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 7955
diff changeset
1144 if(child2->type != XMLNODE_TYPE_TAG)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1145 continue;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1146
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1147 text2 = xmlnode_get_data(child2);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1148 if(text2 && !strcmp(child2->name, "ORGNAME")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1149 purple_notify_user_info_add_pair(user_info, _("Organization Name"), text2);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1150 } else if(text2 && !strcmp(child2->name, "ORGUNIT")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1151 purple_notify_user_info_add_pair(user_info, _("Organization Unit"), text2);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1152 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1153 g_free(text2);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1154 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1155 } else if(text && !strcmp(child->name, "TITLE")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1156 purple_notify_user_info_add_pair(user_info, _("Title"), text);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1157 } else if(text && !strcmp(child->name, "ROLE")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1158 purple_notify_user_info_add_pair(user_info, _("Role"), text);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1159 } else if(text && !strcmp(child->name, "DESC")) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1160 purple_notify_user_info_add_pair(user_info, _("Description"), text);
7076
5b5d8310e599 [gaim-migrate @ 7641]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
1161 } else if(!strcmp(child->name, "PHOTO") ||
5b5d8310e599 [gaim-migrate @ 7641]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
1162 !strcmp(child->name, "LOGO")) {
10941
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
1163 char *bintext = NULL;
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
1164 xmlnode *binval;
11361
b8c9532c9ffe [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
1165
28611
156e0b180d48 jabber: Don't try to pull a photo out of the <PHOTO/> cdata.
Paul Aurich <darkrain42@pidgin.im>
parents: 28322
diff changeset
1166 if ((binval = xmlnode_get_child(child, "BINVAL")) &&
156e0b180d48 jabber: Don't try to pull a photo out of the <PHOTO/> cdata.
Paul Aurich <darkrain42@pidgin.im>
parents: 28322
diff changeset
1167 (bintext = xmlnode_get_data(binval))) {
11127
5e539d9d26a4 [gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents: 10941
diff changeset
1168 gsize size;
11137
cf40226ddff7 [gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents: 11127
diff changeset
1169 guchar *data;
10941
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
1170 gboolean photo = (strcmp(child->name, "PHOTO") == 0);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1171
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1172 data = purple_base64_decode(bintext, &size);
16587
50de12a4b81b disapproval of revision 'f95b376c0d2f066996620c5bb595dc71b5ee22d9'
Richard Laager <rlaager@pidgin.im>
parents: 16585
diff changeset
1173 if (data) {
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1174 char *img_text;
25110
40b3fffdb00b Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <darkrain42@pidgin.im>
parents: 25109
diff changeset
1175 char *hash;
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1176
16587
50de12a4b81b disapproval of revision 'f95b376c0d2f066996620c5bb595dc71b5ee22d9'
Richard Laager <rlaager@pidgin.im>
parents: 16585
diff changeset
1177 jbi->vcard_imgids = g_slist_prepend(jbi->vcard_imgids, GINT_TO_POINTER(purple_imgstore_add_with_id(g_memdup(data, size), size, "logo.png")));
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1178 img_text = g_strdup_printf("<img id='%d'>", GPOINTER_TO_INT(jbi->vcard_imgids->data));
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1179
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1180 purple_notify_user_info_add_pair(user_info, (photo ? _("Photo") : _("Logo")), img_text);
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1181
25110
40b3fffdb00b Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <darkrain42@pidgin.im>
parents: 25109
diff changeset
1182 hash = jabber_calculate_data_sha1sum(data, size);
29368
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1183 purple_buddy_icons_set_for_user(account, bare_jid, data, size, hash);
25110
40b3fffdb00b Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <darkrain42@pidgin.im>
parents: 25109
diff changeset
1184 g_free(hash);
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1185 g_free(img_text);
16587
50de12a4b81b disapproval of revision 'f95b376c0d2f066996620c5bb595dc71b5ee22d9'
Richard Laager <rlaager@pidgin.im>
parents: 16585
diff changeset
1186 }
25110
40b3fffdb00b Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <darkrain42@pidgin.im>
parents: 25109
diff changeset
1187 g_free(bintext);
10941
7a67db0a7f43 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
1188 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1189 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1190 g_free(text);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1191 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1192 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1193
22586
ae2d0016b91e If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
Evan Schoenberg <evands@pidgin.im>
parents: 22550
diff changeset
1194 if (serverside_alias) {
29368
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1195 PurpleBuddy *b;
22586
ae2d0016b91e If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
Evan Schoenberg <evands@pidgin.im>
parents: 22550
diff changeset
1196 /* If we found a serverside alias, set it and tell the core */
29368
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1197 serv_got_alias(js->gc, bare_jid, serverside_alias);
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1198 b = purple_find_buddy(account, bare_jid);
22586
ae2d0016b91e If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
Evan Schoenberg <evands@pidgin.im>
parents: 22550
diff changeset
1199 if (b) {
ae2d0016b91e If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
Evan Schoenberg <evands@pidgin.im>
parents: 22550
diff changeset
1200 purple_blist_node_set_string((PurpleBlistNode*)b, "servernick", serverside_alias);
ae2d0016b91e If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
Evan Schoenberg <evands@pidgin.im>
parents: 22550
diff changeset
1201 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1202
22586
ae2d0016b91e If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
Evan Schoenberg <evands@pidgin.im>
parents: 22550
diff changeset
1203 g_free(serverside_alias);
ae2d0016b91e If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
Evan Schoenberg <evands@pidgin.im>
parents: 22550
diff changeset
1204 }
ae2d0016b91e If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
Evan Schoenberg <evands@pidgin.im>
parents: 22550
diff changeset
1205
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1206 g_free(bare_jid);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1207
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1208 jabber_buddy_info_show_if_ready(jbi);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1209 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1210
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1211 static void jabber_buddy_info_resource_free(gpointer data)
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1212 {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1213 JabberBuddyInfoResource *jbri = data;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1214 g_free(jbri);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1215 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1216
28114
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1217 static guint jbir_hash(gconstpointer v)
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1218 {
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1219 if (v)
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1220 return g_str_hash(v);
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1221 else
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1222 return 0;
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1223 }
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1224
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1225 static gboolean jbir_equal(gconstpointer v1, gconstpointer v2)
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1226 {
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1227 const gchar *resource_1 = v1;
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1228 const gchar *resource_2 = v2;
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1229
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1230 return purple_strequal(resource_1, resource_2);
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1231 }
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1232
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1233 static void jabber_version_parse(JabberStream *js, const char *from,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1234 JabberIqType type, const char *id,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1235 xmlnode *packet, gpointer data)
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1236 {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1237 JabberBuddyInfo *jbi = data;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1238 xmlnode *query;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1239 char *resource_name;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1240
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1241 g_return_if_fail(jbi != NULL);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1242
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1243 jabber_buddy_info_remove_id(jbi, id);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1244
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1245 if(!from)
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1246 return;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1247
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1248 resource_name = jabber_get_resource(from);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1249
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1250 if(resource_name) {
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1251 if (type == JABBER_IQ_RESULT) {
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1252 if((query = xmlnode_get_child(packet, "query"))) {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1253 JabberBuddyResource *jbr = jabber_buddy_find_resource(jbi->jb, resource_name);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1254 if(jbr) {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1255 xmlnode *node;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1256 if((node = xmlnode_get_child(query, "name"))) {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1257 jbr->client.name = xmlnode_get_data(node);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1258 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1259 if((node = xmlnode_get_child(query, "version"))) {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1260 jbr->client.version = xmlnode_get_data(node);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1261 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1262 if((node = xmlnode_get_child(query, "os"))) {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1263 jbr->client.os = xmlnode_get_data(node);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1264 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1265 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1266 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1267 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1268 g_free(resource_name);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1269 }
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1270
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1271 jabber_buddy_info_show_if_ready(jbi);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1272 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1273
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1274 static void jabber_last_parse(JabberStream *js, const char *from,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1275 JabberIqType type, const char *id,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1276 xmlnode *packet, gpointer data)
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1277 {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1278 JabberBuddyInfo *jbi = data;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1279 xmlnode *query;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1280 char *resource_name;
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1281 const char *seconds;
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1282
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1283 g_return_if_fail(jbi != NULL);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1284
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1285 jabber_buddy_info_remove_id(jbi, id);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1286
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1287 if(!from)
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1288 return;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1289
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1290 resource_name = jabber_get_resource(from);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1291
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1292 if(resource_name) {
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1293 if (type == JABBER_IQ_RESULT) {
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1294 if((query = xmlnode_get_child(packet, "query"))) {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1295 seconds = xmlnode_get_attrib(query, "seconds");
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1296 if(seconds) {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1297 char *end = NULL;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1298 long sec = strtol(seconds, &end, 10);
27135
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1299 JabberBuddy *jb = NULL;
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1300 char *resource = NULL;
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1301 char *buddy_name = NULL;
25493
8bf093c656a5 When getting info from a buddy, update the idle status to the libpurple core
Marcus Lundblad <malu@pidgin.im>
parents: 25228
diff changeset
1302 JabberBuddyResource *jbr = NULL;
26958
a955bd42f529 propagate from branch 'im.pidgin.pidgin' (head 36f75a1d52a6af5574bf847d60054a1392dcbc67)
Paul Aurich <darkrain42@pidgin.im>
parents: 26764 26950
diff changeset
1303
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1304 if(end != seconds) {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1305 JabberBuddyInfoResource *jbir = g_hash_table_lookup(jbi->resources, resource_name);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1306 if(jbir) {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1307 jbir->idle_seconds = sec;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1308 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1309 }
27155
53502d71efdd Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents: 27135
diff changeset
1310 /* Update the idle time of the buddy resource, if we got it.
53502d71efdd Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents: 27135
diff changeset
1311 This will correct the value when a server doesn't mark
27135
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1312 delayed presence and we got the presence when signing on */
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1313 jb = jabber_buddy_find(js, from, FALSE);
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1314 if (jb) {
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1315 resource = jabber_get_resource(from);
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1316 buddy_name = jabber_get_bare_jid(from);
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1317 /* if the resource already has an idle time set, we
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1318 must have gotten it originally from a presence. In
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1319 this case we update it. Otherwise don't update it, to
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1320 avoid setting an idle and not getting informed about
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1321 the resource getting unidle */
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1322 if (resource && buddy_name) {
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1323 jbr = jabber_buddy_find_resource(jb, resource);
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1324 if (jbr) {
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1325 if (jbr->idle) {
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1326 if (sec) {
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1327 jbr->idle = time(NULL) - sec;
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1328 } else {
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1329 jbr->idle = 0;
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1330 }
27134
c7e25dd005c4 Fix a NULL deref if the resource has gone offline by the time we're parsing this reply.
Paul Aurich <darkrain42@pidgin.im>
parents: 27110
diff changeset
1331
27155
53502d71efdd Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents: 27135
diff changeset
1332 if (jbr ==
27135
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1333 jabber_buddy_find_resource(jb, NULL)) {
27155
53502d71efdd Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents: 27135
diff changeset
1334 purple_prpl_got_user_idle(js->gc->account,
27135
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1335 buddy_name, jbr->idle, jbr->idle);
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1336 }
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1337 }
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1338 }
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1339 }
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1340 g_free(resource);
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1341 g_free(buddy_name);
32f298815b9e This whole section was partially using spaces instead of tabs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27134
diff changeset
1342 }
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1343 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1344 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1345 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1346 g_free(resource_name);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1347 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1348
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1349 jabber_buddy_info_show_if_ready(jbi);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1350 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1351
27069
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1352 static void jabber_last_offline_parse(JabberStream *js, const char *from,
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1353 JabberIqType type, const char *id,
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1354 xmlnode *packet, gpointer data)
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1355 {
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1356 JabberBuddyInfo *jbi = data;
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1357 xmlnode *query;
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1358 const char *seconds;
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1359
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1360 g_return_if_fail(jbi != NULL);
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1361
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1362 jabber_buddy_info_remove_id(jbi, id);
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1363
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1364 if (type == JABBER_IQ_RESULT) {
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1365 if((query = xmlnode_get_child(packet, "query"))) {
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1366 seconds = xmlnode_get_attrib(query, "seconds");
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1367 if(seconds) {
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1368 char *end = NULL;
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1369 long sec = strtol(seconds, &end, 10);
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1370 if(end != seconds) {
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1371 jbi->last_seconds = sec;
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1372 }
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1373 }
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1374 jbi->last_message = xmlnode_get_data(query);
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1375 }
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1376 }
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1377
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1378 jabber_buddy_info_show_if_ready(jbi);
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1379 }
8eabf79a99fe Show when a user was last online (as seen by the server) when doing "Get Info"
Marcus Lundblad <malu@pidgin.im>
parents: 27053
diff changeset
1380
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1381 static void jabber_time_parse(JabberStream *js, const char *from,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1382 JabberIqType type, const char *id,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1383 xmlnode *packet, gpointer data)
25822
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1384 {
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1385 JabberBuddyInfo *jbi = data;
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1386 JabberBuddyResource *jbr;
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1387 char *resource_name;
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1388
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1389 g_return_if_fail(jbi != NULL);
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1390
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1391 jabber_buddy_info_remove_id(jbi, id);
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1392
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1393 if (!from)
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1394 return;
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1395
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1396 resource_name = jabber_get_resource(from);
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1397 jbr = resource_name ? jabber_buddy_find_resource(jbi->jb, resource_name) : NULL;
25827
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1398 g_free(resource_name);
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1399 if (jbr) {
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1400 if (type == JABBER_IQ_RESULT) {
25822
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1401 xmlnode *time = xmlnode_get_child(packet, "time");
25823
f17d4d5e59b4 Actually display the buddy's local time.
Paul Aurich <darkrain42@pidgin.im>
parents: 25822
diff changeset
1402 xmlnode *tzo = time ? xmlnode_get_child(time, "tzo") : NULL;
25827
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1403 char *tzo_data = tzo ? xmlnode_get_data(tzo) : NULL;
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1404 if (tzo_data) {
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1405 char *c = tzo_data;
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1406 int hours, minutes;
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1407 if (tzo_data[0] == 'Z' && tzo_data[1] == '\0') {
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1408 jbr->tz_off = 0;
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1409 } else {
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1410 gboolean offset_positive = (tzo_data[0] == '+');
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1411 /* [+-]HH:MM */
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1412 if (((*c == '+' || *c == '-') && (c = c + 1)) &&
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1413 sscanf(c, "%02d:%02d", &hours, &minutes) == 2) {
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1414 jbr->tz_off = 60*60*hours + 60*minutes;
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1415 if (!offset_positive)
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1416 jbr->tz_off *= -1;
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1417 } else {
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1418 purple_debug_info("jabber", "Ignoring malformed timezone %s",
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1419 tzo_data);
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1420 }
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1421 }
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1422
6adc5c7df7ae Fix the timezone parsing (again) and display the timezone in the info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25825
diff changeset
1423 g_free(tzo_data);
25822
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1424 }
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1425 }
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1426 }
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1427
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1428 jabber_buddy_info_show_if_ready(jbi);
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1429 }
23f62dd4aed5 Retrieve and display buddy's local time in Get Info dialog
Paul Aurich <darkrain42@pidgin.im>
parents: 25454
diff changeset
1430
15363
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1431 void jabber_buddy_remove_all_pending_buddy_info_requests(JabberStream *js)
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1432 {
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1433 if (js->pending_buddy_info_requests)
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1434 {
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1435 JabberBuddyInfo *jbi;
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1436 GSList *l = js->pending_buddy_info_requests;
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1437 while (l) {
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1438 jbi = l->data;
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1439
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1440 g_slist_free(jbi->ids);
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1441 jabber_buddy_info_destroy(jbi);
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1442
15727
0754583ceeae Don't access the list element after it has been freed.
Daniel Atallah <datallah@pidgin.im>
parents: 15688
diff changeset
1443 l = l->next;
15363
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1444 }
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1445
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1446 g_slist_free(js->pending_buddy_info_requests);
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1447 js->pending_buddy_info_requests = NULL;
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1448 }
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1449 }
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1450
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1451 static gboolean jabber_buddy_get_info_timeout(gpointer data)
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1452 {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1453 JabberBuddyInfo *jbi = data;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1454
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1455 /* remove the pending callbacks */
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1456 while(jbi->ids) {
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1457 char *id = jbi->ids->data;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1458 jabber_iq_remove_callback_by_id(jbi->js, id);
15363
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1459 jbi->ids = g_slist_remove(jbi->ids, id);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1460 g_free(id);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1461 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1462
15363
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1463 jbi->js->pending_buddy_info_requests = g_slist_remove(jbi->js->pending_buddy_info_requests, jbi);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1464 jbi->timeout_handle = 0;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1465
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1466 jabber_buddy_info_show_if_ready(jbi);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1467
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1468 return FALSE;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1469 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1470
17029
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1471 static gboolean _client_is_blacklisted(JabberBuddyResource *jbr, const char *ns)
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1472 {
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1473 /* can't be blacklisted if we don't know what you're running yet */
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1474 if(!jbr->client.name)
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1475 return FALSE;
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1476
28984
1d84517d56eb jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents: 28883
diff changeset
1477 if(!strcmp(ns, NS_LAST_ACTIVITY)) {
17029
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1478 if(!strcmp(jbr->client.name, "Trillian")) {
20350
ae3f3561e698 another day, another irritating workaround
Nathan Walp <nwalp@pidgin.im>
parents: 20320
diff changeset
1479 /* verified by nwalp 2007/05/09 */
ae3f3561e698 another day, another irritating workaround
Nathan Walp <nwalp@pidgin.im>
parents: 20320
diff changeset
1480 if(!strcmp(jbr->client.version, "3.1.0.121") ||
ae3f3561e698 another day, another irritating workaround
Nathan Walp <nwalp@pidgin.im>
parents: 20320
diff changeset
1481 /* verified by nwalp 2007/09/19 */
ae3f3561e698 another day, another irritating workaround
Nathan Walp <nwalp@pidgin.im>
parents: 20320
diff changeset
1482 !strcmp(jbr->client.version, "3.1.7.0")) {
17029
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1483 return TRUE;
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1484 }
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1485 }
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1486 }
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1487
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1488 return FALSE;
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1489 }
dea59a003028 gross hack that will save me time in 30 second chunks
Nathan Walp <nwalp@pidgin.im>
parents: 17007
diff changeset
1490
27484
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1491 static void
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1492 dispatch_queries_for_resource(JabberStream *js, JabberBuddyInfo *jbi,
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1493 gboolean is_bare_jid, const char *jid,
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1494 JabberBuddyResource *jbr)
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1495 {
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1496 JabberIq *iq;
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1497 JabberBuddyInfoResource *jbir;
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1498 char *full_jid = NULL;
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1499 const char *to;
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1500
28114
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1501 if (is_bare_jid && jbr->name) {
27484
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1502 full_jid = g_strdup_printf("%s/%s", jid, jbr->name);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1503 to = full_jid;
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1504 } else
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1505 to = jid;
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1506
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1507 jbir = g_new0(JabberBuddyInfoResource, 1);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1508 g_hash_table_insert(jbi->resources, g_strdup(jbr->name), jbir);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1509
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1510 if(!jbr->client.name) {
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1511 iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:version");
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1512 xmlnode_set_attrib(iq->node, "to", to);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1513 jabber_iq_set_callback(iq, jabber_version_parse, jbi);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1514 jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1515 jabber_iq_send(iq);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1516 }
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1517
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1518 /* this is to fix the feeling of irritation I get when trying
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1519 * to get info on a friend running Trillian, which doesn't
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1520 * respond (with an error or otherwise) to jabber:iq:last
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1521 * requests. There are a number of Trillian users in my
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1522 * office. */
28984
1d84517d56eb jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents: 28883
diff changeset
1523 if(!_client_is_blacklisted(jbr, NS_LAST_ACTIVITY)) {
1d84517d56eb jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents: 28883
diff changeset
1524 iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_LAST_ACTIVITY);
27484
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1525 xmlnode_set_attrib(iq->node, "to", to);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1526 jabber_iq_set_callback(iq, jabber_last_parse, jbi);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1527 jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1528 jabber_iq_send(iq);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1529 }
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1530
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1531 if (jbr->tz_off == PURPLE_NO_TZ_OFF &&
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1532 (!jbr->caps.info ||
28984
1d84517d56eb jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents: 28883
diff changeset
1533 jabber_resource_has_capability(jbr, NS_ENTITY_TIME))) {
27484
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1534 xmlnode *child;
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1535 iq = jabber_iq_new(js, JABBER_IQ_GET);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1536 xmlnode_set_attrib(iq->node, "to", to);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1537 child = xmlnode_new_child(iq->node, "time");
28984
1d84517d56eb jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents: 28883
diff changeset
1538 xmlnode_set_namespace(child, NS_ENTITY_TIME);
27484
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1539 jabber_iq_set_callback(iq, jabber_time_parse, jbi);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1540 jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1541 jabber_iq_send(iq);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1542 }
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1543
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1544 g_free(full_jid);
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1545 }
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1546
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1547 static void jabber_buddy_get_info_for_jid(JabberStream *js, const char *jid)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1548 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1549 JabberIq *iq;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1550 xmlnode *vcard;
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1551 GList *resources;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1552 JabberBuddy *jb;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1553 JabberBuddyInfo *jbi;
27485
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1554 const char *slash;
27484
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1555 gboolean is_bare_jid;
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1556
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1557 jb = jabber_buddy_find(js, jid, TRUE);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1558
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1559 /* invalid JID */
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1560 if(!jb)
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1561 return;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1562
27485
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1563 slash = strchr(jid, '/');
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1564 is_bare_jid = (slash == NULL);
27484
9bbc40783bbb Factor the per-resource IQs out into their own function.
Paul Aurich <darkrain42@pidgin.im>
parents: 27418
diff changeset
1565
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1566 jbi = g_new0(JabberBuddyInfo, 1);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1567 jbi->jid = g_strdup(jid);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1568 jbi->js = js;
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1569 jbi->jb = jb;
28114
091771455e05 jabber: Fix a crash due to a contact having a resource with jbr->name == NULL
Paul Aurich <darkrain42@pidgin.im>
parents: 28071
diff changeset
1570 jbi->resources = g_hash_table_new_full(jbir_hash, jbir_equal, g_free, jabber_buddy_info_resource_free);
23347
4b62b4732afd Use the notify_user_info API for the vcard information instead of creating
Evan Schoenberg <evands@pidgin.im>
parents: 23325
diff changeset
1571 jbi->user_info = purple_notify_user_info_new();
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1572
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1573 iq = jabber_iq_new(js, JABBER_IQ_GET);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1574
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1575 xmlnode_set_attrib(iq->node, "to", jid);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1576 vcard = xmlnode_new_child(iq->node, "vCard");
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 13794
diff changeset
1577 xmlnode_set_namespace(vcard, "vcard-temp");
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1578
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1579 jabber_iq_set_callback(iq, jabber_vcard_parse, jbi);
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1580 jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1581
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1582 jabber_iq_send(iq);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1583
27485
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1584 if (is_bare_jid) {
29368
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1585 if (jb->resources) {
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1586 for(resources = jb->resources; resources; resources = resources->next) {
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1587 JabberBuddyResource *jbr = resources->data;
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1588 dispatch_queries_for_resource(js, jbi, is_bare_jid, jid, jbr);
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1589 }
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1590 } else {
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1591 /* user is offline, send a jabber:iq:last to find out last time online */
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1592 iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_LAST_ACTIVITY);
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1593 xmlnode_set_attrib(iq->node, "to", jid);
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1594 jabber_iq_set_callback(iq, jabber_last_offline_parse, jbi);
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1595 jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
22b6cd68c156 jabber: Fix getting info on your own JID, under some circumstances.
Paul Aurich <darkrain42@pidgin.im>
parents: 29184
diff changeset
1596 jabber_iq_send(iq);
27485
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1597 }
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1598 } else {
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1599 JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, slash + 1);
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1600 if (jbr)
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1601 dispatch_queries_for_resource(js, jbi, is_bare_jid, jid, jbr);
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1602 else
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1603 purple_debug_warning("jabber", "jabber_buddy_get_info_for_jid() "
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1604 "was passed JID %s, but there is no corresponding "
9c49a24cec27 If get_info_for_jid is passed a full JID, don't spam that JID with IQs.
Paul Aurich <darkrain42@pidgin.im>
parents: 27484
diff changeset
1605 "JabberBuddyResource!\n", jid);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1606 }
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
1607
15363
f6b9d1e3d0cb [gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents: 15273
diff changeset
1608 js->pending_buddy_info_requests = g_slist_prepend(js->pending_buddy_info_requests, jbi);
25716
1b5be208d5ba applied changes from a336cc1fd3a1ce815f97303b8d5ae8988f8cbd5b
Ethan Blanton <elb@pidgin.im>
parents: 25575
diff changeset
1609 jbi->timeout_handle = purple_timeout_add_seconds(30, jabber_buddy_get_info_timeout, jbi);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1610 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1611
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1612 void jabber_buddy_get_info(PurpleConnection *gc, const char *who)
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1613 {
24942
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
1614 JabberStream *js = purple_connection_get_protocol_data(gc);
24829
7f33c1a6ab97 Don't try to get info for MUC's. Allow getting info for regular JID's and
Paul Aurich <darkrain42@pidgin.im>
parents: 24827
diff changeset
1615 JabberID *jid = jabber_id_new(who);
7f33c1a6ab97 Don't try to get info for MUC's. Allow getting info for regular JID's and
Paul Aurich <darkrain42@pidgin.im>
parents: 24827
diff changeset
1616
7f33c1a6ab97 Don't try to get info for MUC's. Allow getting info for regular JID's and
Paul Aurich <darkrain42@pidgin.im>
parents: 24827
diff changeset
1617 if (!jid)
7f33c1a6ab97 Don't try to get info for MUC's. Allow getting info for regular JID's and
Paul Aurich <darkrain42@pidgin.im>
parents: 24827
diff changeset
1618 return;
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1619
25575
9fbf7bf38146 A JID can have no node (the part before the @), but a chat must have one,
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25454
diff changeset
1620 if (jid->node && jabber_chat_find(js, jid->node, jid->domain)) {
24829
7f33c1a6ab97 Don't try to get info for MUC's. Allow getting info for regular JID's and
Paul Aurich <darkrain42@pidgin.im>
parents: 24827
diff changeset
1621 /* For a conversation, include the resource (indicates the user). */
7f33c1a6ab97 Don't try to get info for MUC's. Allow getting info for regular JID's and
Paul Aurich <darkrain42@pidgin.im>
parents: 24827
diff changeset
1622 jabber_buddy_get_info_for_jid(js, who);
7f33c1a6ab97 Don't try to get info for MUC's. Allow getting info for regular JID's and
Paul Aurich <darkrain42@pidgin.im>
parents: 24827
diff changeset
1623 } else {
7f33c1a6ab97 Don't try to get info for MUC's. Allow getting info for regular JID's and
Paul Aurich <darkrain42@pidgin.im>
parents: 24827
diff changeset
1624 char *bare_jid = jabber_get_bare_jid(who);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1625 jabber_buddy_get_info_for_jid(js, bare_jid);
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1626 g_free(bare_jid);
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1627 }
24829
7f33c1a6ab97 Don't try to get info for MUC's. Allow getting info for regular JID's and
Paul Aurich <darkrain42@pidgin.im>
parents: 24827
diff changeset
1628
7f33c1a6ab97 Don't try to get info for MUC's. Allow getting info for regular JID's and
Paul Aurich <darkrain42@pidgin.im>
parents: 24827
diff changeset
1629 jabber_id_free(jid);
10189
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1630 }
bc7691fee058 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1631
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1632 static void jabber_buddy_set_invisibility(JabberStream *js, const char *who,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1633 gboolean invisible)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1634 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1635 PurplePresence *gpresence;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1636 PurpleAccount *account;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1637 PurpleStatus *status;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1638 JabberBuddy *jb = jabber_buddy_find(js, who, TRUE);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1639 xmlnode *presence;
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1640 JabberBuddyState state;
14525
b278a2724686 [gaim-migrate @ 17177]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
1641 char *msg;
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1642 int priority;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1643
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1644 account = purple_connection_get_account(js->gc);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1645 gpresence = purple_account_get_presence(account);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1646 status = purple_presence_get_active_status(gpresence);
9944
71ef020ec4b0 [gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents: 9797
diff changeset
1647
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1648 purple_status_to_jabber(status, &state, &msg, &priority);
17770
e67998927a3c Added the ability to define extensions to caps
Andreas Monitzer <am@adiumx.com>
parents: 17051
diff changeset
1649 presence = jabber_presence_create_js(js, state, msg, priority);
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1650
14525
b278a2724686 [gaim-migrate @ 17177]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
1651 g_free(msg);
b278a2724686 [gaim-migrate @ 17177]
Nathan Walp <nwalp@pidgin.im>
parents: 14254
diff changeset
1652
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1653 xmlnode_set_attrib(presence, "to", who);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1654 if(invisible) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1655 xmlnode_set_attrib(presence, "type", "invisible");
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1656 jb->invisible |= JABBER_INVIS_BUDDY;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1657 } else {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1658 jb->invisible &= ~JABBER_INVIS_BUDDY;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1659 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1660
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1661 jabber_send(js, presence);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1662 xmlnode_free(presence);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1663 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1664
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1665 static void jabber_buddy_make_invisible(PurpleBlistNode *node, gpointer data)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1666 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1667 PurpleBuddy *buddy;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1668 PurpleConnection *gc;
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1669 JabberStream *js;
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1670
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1671 g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1672
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1673 buddy = (PurpleBuddy *) node;
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24251
diff changeset
1674 gc = purple_account_get_connection(purple_buddy_get_account(buddy));
24942
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
1675 js = purple_connection_get_protocol_data(gc);
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1676
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24251
diff changeset
1677 jabber_buddy_set_invisibility(js, purple_buddy_get_name(buddy), TRUE);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1678 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1679
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1680 static void jabber_buddy_make_visible(PurpleBlistNode *node, gpointer data)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1681 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1682 PurpleBuddy *buddy;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1683 PurpleConnection *gc;
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1684 JabberStream *js;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1685
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1686 g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1687
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1688 buddy = (PurpleBuddy *) node;
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24251
diff changeset
1689 gc = purple_account_get_connection(purple_buddy_get_account(buddy));
24942
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
1690 js = purple_connection_get_protocol_data(gc);
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1691
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24251
diff changeset
1692 jabber_buddy_set_invisibility(js, purple_buddy_get_name(buddy), FALSE);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1693 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1694
28058
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1695 static void cancel_presence_notification(gpointer data)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1696 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1697 PurpleBuddy *buddy;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1698 PurpleConnection *gc;
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1699 JabberStream *js;
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1700
28058
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1701 buddy = data;
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1702 gc = purple_account_get_connection(purple_buddy_get_account(buddy));
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1703 js = purple_connection_get_protocol_data(gc);
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1704
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1705 jabber_presence_subscription_set(js, purple_buddy_get_name(buddy), "unsubscribed");
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1706 }
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1707
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1708 static void
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1709 jabber_buddy_cancel_presence_notification(PurpleBlistNode *node,
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1710 gpointer data)
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1711 {
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1712 PurpleBuddy *buddy;
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1713 PurpleAccount *account;
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1714 PurpleConnection *gc;
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1715 const gchar *name;
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1716 char *msg;
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1717
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1718 g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1719
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1720 buddy = (PurpleBuddy *) node;
28058
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1721 name = purple_buddy_get_name(buddy);
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1722 account = purple_buddy_get_account(buddy);
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1723 gc = purple_account_get_connection(account);
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1724
28058
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1725 msg = g_strdup_printf(_("%s will no longer be able to see your status "
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1726 "updates. Do you want to continue?"), name);
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1727 purple_request_yes_no(gc, NULL, _("Cancel Presence Notification"),
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1728 msg, 0 /* Yes */, account, name, NULL, buddy,
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1729 cancel_presence_notification, NULL /* Do nothing */);
52eb7bf6e375 jabber: Prompt before cancelling presence notification to a buddy.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1730 g_free(msg);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1731 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1732
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1733 static void jabber_buddy_rerequest_auth(PurpleBlistNode *node, gpointer data)
7250
7e10382fbf49 [gaim-migrate @ 7827]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
1734 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1735 PurpleBuddy *buddy;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1736 PurpleConnection *gc;
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1737 JabberStream *js;
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1738
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1739 g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
7250
7e10382fbf49 [gaim-migrate @ 7827]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
1740
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1741 buddy = (PurpleBuddy *) node;
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24251
diff changeset
1742 gc = purple_account_get_connection(purple_buddy_get_account(buddy));
24942
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
1743 js = purple_connection_get_protocol_data(gc);
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1744
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24251
diff changeset
1745 jabber_presence_subscription_set(js, purple_buddy_get_name(buddy), "subscribe");
7250
7e10382fbf49 [gaim-migrate @ 7827]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
1746 }
7e10382fbf49 [gaim-migrate @ 7827]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
1747
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1748
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1749 static void jabber_buddy_unsubscribe(PurpleBlistNode *node, gpointer data)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1750 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1751 PurpleBuddy *buddy;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1752 PurpleConnection *gc;
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1753 JabberStream *js;
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1754
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1755 g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1756
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1757 buddy = (PurpleBuddy *) node;
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24251
diff changeset
1758 gc = purple_account_get_connection(purple_buddy_get_account(buddy));
24942
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
1759 js = purple_connection_get_protocol_data(gc);
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1760
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24251
diff changeset
1761 jabber_presence_subscription_set(js, purple_buddy_get_name(buddy), "unsubscribe");
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1762 }
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1763
17808
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1764 static void jabber_buddy_login(PurpleBlistNode *node, gpointer data) {
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1765 if(PURPLE_BLIST_NODE_IS_BUDDY(node)) {
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1766 /* simply create a directed presence of the current status */
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1767 PurpleBuddy *buddy = (PurpleBuddy *) node;
24942
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
1768 PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(buddy));
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
1769 JabberStream *js = purple_connection_get_protocol_data(gc);
17808
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1770 PurpleAccount *account = purple_connection_get_account(gc);
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1771 PurplePresence *gpresence = purple_account_get_presence(account);
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1772 PurpleStatus *status = purple_presence_get_active_status(gpresence);
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1773 xmlnode *presence;
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1774 JabberBuddyState state;
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1775 char *msg;
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1776 int priority;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1777
17808
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1778 purple_status_to_jabber(status, &state, &msg, &priority);
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1779 presence = jabber_presence_create_js(js, state, msg, priority);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1780
17808
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1781 g_free(msg);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1782
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24251
diff changeset
1783 xmlnode_set_attrib(presence, "to", purple_buddy_get_name(buddy));
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1784
17808
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1785 jabber_send(js, presence);
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1786 xmlnode_free(presence);
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1787 }
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1788 }
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1789
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1790 static void jabber_buddy_logout(PurpleBlistNode *node, gpointer data) {
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1791 if(PURPLE_BLIST_NODE_IS_BUDDY(node)) {
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1792 /* simply create a directed unavailable presence */
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1793 PurpleBuddy *buddy = (PurpleBuddy *) node;
24942
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
1794 PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(buddy));
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
1795 JabberStream *js = purple_connection_get_protocol_data(gc);
17808
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1796 xmlnode *presence;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1797
17808
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1798 presence = jabber_presence_create_js(js, JABBER_BUDDY_STATE_UNAVAILABLE, NULL, 0);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1799
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24251
diff changeset
1800 xmlnode_set_attrib(presence, "to", purple_buddy_get_name(buddy));
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1801
17808
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1802 jabber_send(js, presence);
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1803 xmlnode_free(presence);
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1804 }
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1805 }
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1806
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1807 static GList *jabber_buddy_menu(PurpleBuddy *buddy)
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1808 {
24942
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
1809 PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(buddy));
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
1810 JabberStream *js = purple_connection_get_protocol_data(gc);
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24251
diff changeset
1811 const char *name = purple_buddy_get_name(buddy);
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24251
diff changeset
1812 JabberBuddy *jb = jabber_buddy_find(js, name, TRUE);
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
1813 GList *jbrs;
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1814
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1815 GList *m = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1816 PurpleMenuAction *act;
7395
e5595e8e13e4 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1817
e5595e8e13e4 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1818 if(!jb)
e5595e8e13e4 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1819 return m;
e5595e8e13e4 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1820
28071
a0706162fefd jabber: Store the "own JabberBuddy" in the JabberStream* struct.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1821 if (js->protocol_version == JABBER_PROTO_0_9 && jb != js->user_jb) {
8166
0a109d9655c7 [gaim-migrate @ 8878]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
1822 if(jb->invisible & JABBER_INVIS_BUDDY) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1823 act = purple_menu_action_new(_("Un-hide From"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1824 PURPLE_CALLBACK(jabber_buddy_make_visible),
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12683
diff changeset
1825 NULL, NULL);
8166
0a109d9655c7 [gaim-migrate @ 8878]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
1826 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1827 act = purple_menu_action_new(_("Temporarily Hide From"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1828 PURPLE_CALLBACK(jabber_buddy_make_invisible),
13019
71d729443516 [gaim-migrate @ 15372]
Etan Reisner <deryni@pidgin.im>
parents: 12933
diff changeset
1829 NULL, NULL);
8166
0a109d9655c7 [gaim-migrate @ 8878]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
1830 }
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1831 m = g_list_append(m, act);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1832 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1833
28071
a0706162fefd jabber: Store the "own JabberBuddy" in the JabberStream* struct.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1834 if(jb->subscription & JABBER_SUB_FROM && jb != js->user_jb) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1835 act = purple_menu_action_new(_("Cancel Presence Notification"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1836 PURPLE_CALLBACK(jabber_buddy_cancel_presence_notification),
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12683
diff changeset
1837 NULL, NULL);
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1838 m = g_list_append(m, act);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1839 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1840
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1841 if(!(jb->subscription & JABBER_SUB_TO)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1842 act = purple_menu_action_new(_("(Re-)Request authorization"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1843 PURPLE_CALLBACK(jabber_buddy_rerequest_auth),
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12683
diff changeset
1844 NULL, NULL);
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1845 m = g_list_append(m, act);
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1846
28071
a0706162fefd jabber: Store the "own JabberBuddy" in the JabberStream* struct.
Paul Aurich <darkrain42@pidgin.im>
parents: 28046
diff changeset
1847 } else if (jb != js->user_jb) {
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1848
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1849 /* shouldn't this just happen automatically when the buddy is
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1850 removed? */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1851 act = purple_menu_action_new(_("Unsubscribe"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1852 PURPLE_CALLBACK(jabber_buddy_unsubscribe),
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12683
diff changeset
1853 NULL, NULL);
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1854 m = g_list_append(m, act);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1855 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1856
28667
7bab19738f5e jabber: Add an "Initiate Chat" blist context menu option for GTalk accounts.
Eion Robb <eion@robbmob.com>
parents: 28611
diff changeset
1857 if (js->googletalk) {
7bab19738f5e jabber: Add an "Initiate Chat" blist context menu option for GTalk accounts.
Eion Robb <eion@robbmob.com>
parents: 28611
diff changeset
1858 act = purple_menu_action_new(_("Initiate _Chat"),
7bab19738f5e jabber: Add an "Initiate Chat" blist context menu option for GTalk accounts.
Eion Robb <eion@robbmob.com>
parents: 28611
diff changeset
1859 PURPLE_CALLBACK(google_buddy_node_chat),
7bab19738f5e jabber: Add an "Initiate Chat" blist context menu option for GTalk accounts.
Eion Robb <eion@robbmob.com>
parents: 28611
diff changeset
1860 NULL, NULL);
7bab19738f5e jabber: Add an "Initiate Chat" blist context menu option for GTalk accounts.
Eion Robb <eion@robbmob.com>
parents: 28611
diff changeset
1861 m = g_list_append(m, act);
7bab19738f5e jabber: Add an "Initiate Chat" blist context menu option for GTalk accounts.
Eion Robb <eion@robbmob.com>
parents: 28611
diff changeset
1862 }
7bab19738f5e jabber: Add an "Initiate Chat" blist context menu option for GTalk accounts.
Eion Robb <eion@robbmob.com>
parents: 28611
diff changeset
1863
17808
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1864 /*
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1865 * This if-condition implements parts of XEP-0100: Gateway Interaction
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1866 *
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1867 * According to stpeter, there is no way to know if a jid on the roster is a gateway without sending a disco#info.
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1868 * However, since the gateway might appear offline to us, we cannot get that information. Therefore, I just assume
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1869 * that gateways on the roster can be identified by having no '@' in their jid. This is a faily safe assumption, since
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1870 * people don't tend to have a server or other service there.
29059
8225f2507058 strchr() is safe when searching for an ASCII character in UTF8 strings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28984
diff changeset
1871 *
8225f2507058 strchr() is safe when searching for an ASCII character in UTF8 strings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28984
diff changeset
1872 * TODO: Use disco#info...
17808
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1873 */
29059
8225f2507058 strchr() is safe when searching for an ASCII character in UTF8 strings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28984
diff changeset
1874 if (strchr(name, '@') == NULL) {
17808
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1875 act = purple_menu_action_new(_("Log In"),
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1876 PURPLE_CALLBACK(jabber_buddy_login),
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1877 NULL, NULL);
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1878 m = g_list_append(m, act);
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1879 act = purple_menu_action_new(_("Log Out"),
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1880 PURPLE_CALLBACK(jabber_buddy_logout),
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1881 NULL, NULL);
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1882 m = g_list_append(m, act);
9b9a78bf9a03 Implemented logging in/out of gateways, as explained in XEP-0100.
Andreas Monitzer <am@adiumx.com>
parents: 17807
diff changeset
1883 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
1884
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
1885 /* add all ad hoc commands to the action menu */
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
1886 for(jbrs = jb->resources; jbrs; jbrs = g_list_next(jbrs)) {
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
1887 JabberBuddyResource *jbr = jbrs->data;
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
1888 GList *commands;
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
1889 if (!jbr->commands)
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
1890 continue;
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
1891 for(commands = jbr->commands; commands; commands = g_list_next(commands)) {
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
1892 JabberAdHocCommands *cmd = commands->data;
17818
ebd51078c0e6 Now all ad-hoc commands have to be sent through jabber_adhoc_execute to be properly executed (including the form steps). This cleans up the code a bit, and avoids DOS attacks by flooding the client with malicious ad-hoc command forms that were not requested.
Andreas Monitzer <am@adiumx.com>
parents: 17816
diff changeset
1893 act = purple_menu_action_new(cmd->name, PURPLE_CALLBACK(jabber_adhoc_execute_action), cmd, NULL);
17816
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
1894 m = g_list_append(m, act);
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
1895 }
1b7362b4a7a2 Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents: 17808
diff changeset
1896 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1897
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1898 return m;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1899 }
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1900
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1901 GList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1902 jabber_blist_node_menu(PurpleBlistNode *node)
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1903 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1904 if(PURPLE_BLIST_NODE_IS_BUDDY(node)) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1905 return jabber_buddy_menu((PurpleBuddy *) node);
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1906 } else {
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1907 return NULL;
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1908 }
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1909 }
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1910
29383
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1911 static const struct {
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1912 const char *status_id; /* link to core */
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1913 const char *show; /* The show child's cdata in a presence stanza */
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1914 const char *readable; /* readable representation */
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1915 JabberBuddyState state;
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1916 } jabber_statuses[] = {
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1917 { "offline", NULL, N_("Offline"), JABBER_BUDDY_STATE_UNAVAILABLE },
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1918 { "available", NULL, N_("Available"), JABBER_BUDDY_STATE_ONLINE},
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1919 { "freeforchat", "chat", N_("Chatty"), JABBER_BUDDY_STATE_CHAT },
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1920 { "away", "away", N_("Away"), JABBER_BUDDY_STATE_AWAY },
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1921 { "extended_away", "xa", N_("Extended Away"), JABBER_BUDDY_STATE_XA },
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1922 { "dnd", "dnd", N_("Do Not Disturb"), JABBER_BUDDY_STATE_DND },
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1923 { "error", NULL, N_("Error"), JABBER_BUDDY_STATE_ERROR }
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1924 };
9030
7b574a641391 [gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents: 9015
diff changeset
1925
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1926 const char *
29383
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1927 jabber_buddy_state_get_name(const JabberBuddyState state)
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1928 {
29383
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1929 int i;
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1930 for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i)
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1931 if (jabber_statuses[i].state == state)
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1932 return _(jabber_statuses[i].readable);
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1933
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1934 return _("Unknown");
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1935 }
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1936
29383
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1937 JabberBuddyState
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1938 jabber_buddy_status_id_get_state(const char *id)
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1939 {
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1940 int i;
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1941 if (!id)
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1942 return JABBER_BUDDY_STATE_UNKNOWN;
29383
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1943
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1944 for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i)
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1945 if (g_str_equal(id, jabber_statuses[i].status_id))
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1946 return jabber_statuses[i].state;
12683
9ff688ee3fec [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1947
9ff688ee3fec [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1948 return JABBER_BUDDY_STATE_UNKNOWN;
9ff688ee3fec [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1949 }
9ff688ee3fec [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1950
27619
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1951 JabberBuddyState jabber_buddy_show_get_state(const char *id)
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1952 {
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1953 int i;
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1954
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1955 g_return_val_if_fail(id != NULL, JABBER_BUDDY_STATE_UNKNOWN);
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1956
29383
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1957 for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i)
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1958 if (g_str_equal(id, jabber_statuses[i].show))
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1959 return jabber_statuses[i].state;
27619
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1960
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1961 purple_debug_warning("jabber", "Invalid value of presence <show/> "
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1962 "attribute: %s\n", id);
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1963 return JABBER_BUDDY_STATE_UNKNOWN;
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1964 }
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1965
27619
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1966 const char *
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1967 jabber_buddy_state_get_show(JabberBuddyState state)
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1968 {
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1969 int i;
29383
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1970 for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i)
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1971 if (state == jabber_statuses[i].state)
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1972 return jabber_statuses[i].show;
27619
3600b7157ab7 Various minor changes to jabber_presence_parse. No functionality changes.
Paul Aurich <darkrain42@pidgin.im>
parents: 27552
diff changeset
1973
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1974 return NULL;
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1975 }
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1976
29383
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1977 const char *
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1978 jabber_buddy_state_get_status_id(JabberBuddyState state)
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1979 {
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1980 int i;
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1981 for (i = 0; i < G_N_ELEMENTS(jabber_statuses); ++i)
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1982 if (state == jabber_statuses[i].state)
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1983 return jabber_statuses[i].status_id;
f33172510491 jabber: Unify the JabberBuddyState functions (and briefly document them)
Paul Aurich <darkrain42@pidgin.im>
parents: 29368
diff changeset
1984
12683
9ff688ee3fec [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1985 return NULL;
9ff688ee3fec [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1986 }
9ff688ee3fec [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1987
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1988 static void user_search_result_add_buddy_cb(PurpleConnection *gc, GList *row, void *user_data)
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1989 {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1990 /* XXX find out the jid */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1991 purple_blist_request_add_buddy(purple_connection_get_account(gc),
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1992 g_list_nth_data(row, 0), NULL, NULL);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1993 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1994
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1995 static void user_search_result_cb(JabberStream *js, const char *from,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1996 JabberIqType type, const char *id,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
1997 xmlnode *packet, gpointer data)
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1998 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
1999 PurpleNotifySearchResults *results;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2000 PurpleNotifySearchColumn *column;
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2001 xmlnode *x, *query, *item, *field;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2002
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2003 /* XXX error checking? */
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2004 if(!(query = xmlnode_get_child(packet, "query")))
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2005 return;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2006
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2007 results = purple_notify_searchresults_new();
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2008 if((x = xmlnode_get_child_with_namespace(query, "x", "jabber:x:data"))) {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2009 xmlnode *reported;
19963
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2010 GSList *column_vars = NULL;
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2011
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2012 purple_debug_info("jabber", "new-skool\n");
19963
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2013
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2014 if((reported = xmlnode_get_child(x, "reported"))) {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2015 xmlnode *field = xmlnode_get_child(reported, "field");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2016 while(field) {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2017 const char *var = xmlnode_get_attrib(field, "var");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2018 const char *label = xmlnode_get_attrib(field, "label");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2019 if(var) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2020 column = purple_notify_searchresults_column_new(label ? label : var);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2021 purple_notify_searchresults_column_add(results, column);
19963
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2022 column_vars = g_slist_append(column_vars, (char *)var);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2023 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2024 field = xmlnode_get_next_twin(field);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2025 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2026 }
19963
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2027
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2028 item = xmlnode_get_child(x, "item");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2029 while(item) {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2030 GList *row = NULL;
19963
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2031 GSList *l;
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2032 xmlnode *valuenode;
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2033 const char *var;
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2034
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2035 for (l = column_vars; l != NULL; l = l->next) {
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2036 /*
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2037 * Build a row containing the strings that correspond
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2038 * to each column of the search results.
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2039 */
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2040 for (field = xmlnode_get_child(item, "field");
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2041 field != NULL;
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2042 field = xmlnode_get_next_twin(field))
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2043 {
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2044 if ((var = xmlnode_get_attrib(field, "var")) &&
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2045 !strcmp(var, l->data) &&
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2046 (valuenode = xmlnode_get_child(field, "value")))
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2047 {
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2048 char *value = xmlnode_get_data(valuenode);
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2049 row = g_list_append(row, value);
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2050 break;
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2051 }
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2052 }
19963
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2053 if (field == NULL)
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2054 /* No data for this column */
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2055 row = g_list_append(row, NULL);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2056 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2057 purple_notify_searchresults_row_add(results, row);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2058 item = xmlnode_get_next_twin(item);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2059 }
19963
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2060
46f23859d166 Fix the bug reported to the devel mailing list by Georgi Kirilov.
Mark Doliner <markdoliner@pidgin.im>
parents: 19931
diff changeset
2061 g_slist_free(column_vars);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2062 } else {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2063 /* old skool */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2064 purple_debug_info("jabber", "old-skool\n");
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2065
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2066 column = purple_notify_searchresults_column_new(_("JID"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2067 purple_notify_searchresults_column_add(results, column);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2068 column = purple_notify_searchresults_column_new(_("First Name"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2069 purple_notify_searchresults_column_add(results, column);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2070 column = purple_notify_searchresults_column_new(_("Last Name"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2071 purple_notify_searchresults_column_add(results, column);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2072 column = purple_notify_searchresults_column_new(_("Nickname"));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2073 purple_notify_searchresults_column_add(results, column);
23325
a374a26fe217 Use "email" and "Email" consistently. This is potentially controversial,
Richard Laager <rlaager@pidgin.im>
parents: 23026
diff changeset
2074 column = purple_notify_searchresults_column_new(_("Email"));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2075 purple_notify_searchresults_column_add(results, column);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2076
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2077 for(item = xmlnode_get_child(query, "item"); item; item = xmlnode_get_next_twin(item)) {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2078 const char *jid;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2079 xmlnode *node;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2080 GList *row = NULL;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2081
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2082 if(!(jid = xmlnode_get_attrib(item, "jid")))
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2083 continue;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2084
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2085 row = g_list_append(row, g_strdup(jid));
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2086 node = xmlnode_get_child(item, "first");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2087 row = g_list_append(row, node ? xmlnode_get_data(node) : NULL);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2088 node = xmlnode_get_child(item, "last");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2089 row = g_list_append(row, node ? xmlnode_get_data(node) : NULL);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2090 node = xmlnode_get_child(item, "nick");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2091 row = g_list_append(row, node ? xmlnode_get_data(node) : NULL);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2092 node = xmlnode_get_child(item, "email");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2093 row = g_list_append(row, node ? xmlnode_get_data(node) : NULL);
22622
1ecb840b5101 Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <markdoliner@pidgin.im>
parents: 22586
diff changeset
2094 purple_debug_info("jabber", "row=%p\n", row);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2095 purple_notify_searchresults_row_add(results, row);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2096 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2097 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2098
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2099 purple_notify_searchresults_button_add(results, PURPLE_NOTIFY_BUTTON_ADD,
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2100 user_search_result_add_buddy_cb);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2101
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2102 purple_notify_searchresults(js->gc, NULL, NULL, _("The following are the results of your search"), results, NULL, NULL);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2103 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2104
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2105 static void user_search_x_data_cb(JabberStream *js, xmlnode *result, gpointer data)
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2106 {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2107 xmlnode *query;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2108 JabberIq *iq;
13345
5c3833c02134 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13332
diff changeset
2109 char *dir_server = data;
21388
108195e86aa3 don't send a canceled user query
Nathan Walp <nwalp@pidgin.im>
parents: 21381
diff changeset
2110 const char *type;
108195e86aa3 don't send a canceled user query
Nathan Walp <nwalp@pidgin.im>
parents: 21381
diff changeset
2111
108195e86aa3 don't send a canceled user query
Nathan Walp <nwalp@pidgin.im>
parents: 21381
diff changeset
2112 /* if they've cancelled the search, we're
108195e86aa3 don't send a canceled user query
Nathan Walp <nwalp@pidgin.im>
parents: 21381
diff changeset
2113 * just going to get an error if we send
108195e86aa3 don't send a canceled user query
Nathan Walp <nwalp@pidgin.im>
parents: 21381
diff changeset
2114 * a cancel, so skip it */
108195e86aa3 don't send a canceled user query
Nathan Walp <nwalp@pidgin.im>
parents: 21381
diff changeset
2115 type = xmlnode_get_attrib(result, "type");
108195e86aa3 don't send a canceled user query
Nathan Walp <nwalp@pidgin.im>
parents: 21381
diff changeset
2116 if(type && !strcmp(type, "cancel")) {
108195e86aa3 don't send a canceled user query
Nathan Walp <nwalp@pidgin.im>
parents: 21381
diff changeset
2117 g_free(dir_server);
108195e86aa3 don't send a canceled user query
Nathan Walp <nwalp@pidgin.im>
parents: 21381
diff changeset
2118 return;
108195e86aa3 don't send a canceled user query
Nathan Walp <nwalp@pidgin.im>
parents: 21381
diff changeset
2119 }
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2120
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2121 iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:search");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2122 query = xmlnode_get_child(iq->node, "query");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2123
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2124 xmlnode_insert_child(query, result);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2125
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2126 jabber_iq_set_callback(iq, user_search_result_cb, NULL);
13345
5c3833c02134 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13332
diff changeset
2127 xmlnode_set_attrib(iq->node, "to", dir_server);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2128 jabber_iq_send(iq);
13345
5c3833c02134 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13332
diff changeset
2129 g_free(dir_server);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2130 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2131
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2132 struct user_search_info {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2133 JabberStream *js;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2134 char *directory_server;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2135 };
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2136
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2137 static void user_search_cancel_cb(struct user_search_info *usi, PurpleRequestFields *fields)
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2138 {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2139 g_free(usi->directory_server);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2140 g_free(usi);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2141 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2142
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2143 static void user_search_cb(struct user_search_info *usi, PurpleRequestFields *fields)
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2144 {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2145 JabberStream *js = usi->js;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2146 JabberIq *iq;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2147 xmlnode *query;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2148 GList *groups, *flds;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2149
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2150 iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:search");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2151 query = xmlnode_get_child(iq->node, "query");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2152
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2153 for(groups = purple_request_fields_get_groups(fields); groups; groups = groups->next) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2154 for(flds = purple_request_field_group_get_fields(groups->data);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2155 flds; flds = flds->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2156 PurpleRequestField *field = flds->data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2157 const char *id = purple_request_field_get_id(field);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2158 const char *value = purple_request_field_string_get_value(field);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2159
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2160 if(value && (!strcmp(id, "first") || !strcmp(id, "last") || !strcmp(id, "nick") || !strcmp(id, "email"))) {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2161 xmlnode *y = xmlnode_new_child(query, id);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2162 xmlnode_insert_data(y, value, -1);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2163 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2164 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2165 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2166
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2167 jabber_iq_set_callback(iq, user_search_result_cb, NULL);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2168 xmlnode_set_attrib(iq->node, "to", usi->directory_server);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2169 jabber_iq_send(iq);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2170
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2171 g_free(usi->directory_server);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2172 g_free(usi);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2173 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2174
13617
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2175 #if 0
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2176 /* This is for gettext only -- it will see this even though there's an #if 0. */
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2177
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2178 /*
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2179 * An incomplete list of server generated original language search
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2180 * comments for Jabber User Directories
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2181 *
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2182 * See discussion thread "Search comment for Jabber is not translatable"
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2183 * in purple-i18n@lists.sourceforge.net (March 2006)
13617
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2184 */
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2185 static const char * jabber_user_dir_comments [] = {
19894
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 18798
diff changeset
2186 /* current comment from Jabber User Directory users.jabber.org */
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 18798
diff changeset
2187 N_("Find a contact by entering the search criteria in the given fields. "
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 18798
diff changeset
2188 "Note: Each field supports wild card searches (%)"),
b273d0db2bdd Fixed code indenting, some spaces were still left and now replaced by tabs.
Andreas Monitzer <am@adiumx.com>
parents: 18798
diff changeset
2189 NULL
13617
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2190 };
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2191 #endif
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2192
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
2193 static void user_search_fields_result_cb(JabberStream *js, const char *from,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
2194 JabberIqType type, const char *id,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
2195 xmlnode *packet, gpointer data)
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2196 {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2197 xmlnode *query, *x;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2198
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
2199 if (!from)
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2200 return;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2201
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
2202 if (type == JABBER_IQ_ERROR) {
21150
bedd1215fb5e Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <resiak@pidgin.im>
parents: 20350
diff changeset
2203 char *msg = jabber_parse_error(js, packet, NULL);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
2204
13634
e9f9cef982d7 [gaim-migrate @ 16031]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13619
diff changeset
2205 if(!msg)
e9f9cef982d7 [gaim-migrate @ 16031]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13619
diff changeset
2206 msg = g_strdup(_("Unknown error"));
e9f9cef982d7 [gaim-migrate @ 16031]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13619
diff changeset
2207
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2208 purple_notify_error(js->gc, _("Directory Query Failed"),
13634
e9f9cef982d7 [gaim-migrate @ 16031]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13619
diff changeset
2209 _("Could not query the directory server."), msg);
e9f9cef982d7 [gaim-migrate @ 16031]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13619
diff changeset
2210 g_free(msg);
e9f9cef982d7 [gaim-migrate @ 16031]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13619
diff changeset
2211
13345
5c3833c02134 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13332
diff changeset
2212 return;
5c3833c02134 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13332
diff changeset
2213 }
5c3833c02134 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13332
diff changeset
2214
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2215
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2216 if(!(query = xmlnode_get_child(packet, "query")))
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2217 return;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2218
13330
33fb51d94dfd [gaim-migrate @ 15699]
Nathan Walp <nwalp@pidgin.im>
parents: 13019
diff changeset
2219 if((x = xmlnode_get_child_with_namespace(query, "x", "jabber:x:data"))) {
13345
5c3833c02134 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13332
diff changeset
2220 jabber_x_data_request(js, x, user_search_x_data_cb, g_strdup(from));
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2221 return;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2222 } else {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2223 struct user_search_info *usi;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2224 xmlnode *instnode;
13617
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2225 char *instructions = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2226 PurpleRequestFields *fields;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2227 PurpleRequestFieldGroup *group;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2228 PurpleRequestField *field;
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2229
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2230 /* old skool */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2231 fields = purple_request_fields_new();
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2232 group = purple_request_field_group_new(NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2233 purple_request_fields_add_group(fields, group);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2234
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2235 if((instnode = xmlnode_get_child(query, "instructions")))
13574
433001d94e3e [gaim-migrate @ 15952]
Richard Laager <rlaager@pidgin.im>
parents: 13572
diff changeset
2236 {
433001d94e3e [gaim-migrate @ 15952]
Richard Laager <rlaager@pidgin.im>
parents: 13572
diff changeset
2237 char *tmp = xmlnode_get_data(instnode);
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
2238
13617
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2239 if(tmp)
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2240 {
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
2241 /* Try to translate the message (see static message
13617
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2242 list in jabber_user_dir_comments[]) */
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2243 instructions = g_strdup_printf(_("Server Instructions: %s"), _(tmp));
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2244 g_free(tmp);
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2245 }
13574
433001d94e3e [gaim-migrate @ 15952]
Richard Laager <rlaager@pidgin.im>
parents: 13572
diff changeset
2246 }
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
2247
13617
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2248 if(!instructions)
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2249 {
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2250 instructions = g_strdup(_("Fill in one or more fields to search "
16961
b6955f946f8f s/Jabber/XMPP in user-visible places.
Richard Laager <rlaager@pidgin.im>
parents: 16799
diff changeset
2251 "for any matching XMPP users."));
13617
983b0c58fcae [gaim-migrate @ 16002]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13574
diff changeset
2252 }
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2253
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2254 if(xmlnode_get_child(query, "first")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2255 field = purple_request_field_string_new("first", _("First Name"),
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2256 NULL, FALSE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2257 purple_request_field_group_add_field(group, field);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2258 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2259 if(xmlnode_get_child(query, "last")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2260 field = purple_request_field_string_new("last", _("Last Name"),
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2261 NULL, FALSE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2262 purple_request_field_group_add_field(group, field);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2263 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2264 if(xmlnode_get_child(query, "nick")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2265 field = purple_request_field_string_new("nick", _("Nickname"),
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2266 NULL, FALSE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2267 purple_request_field_group_add_field(group, field);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2268 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2269 if(xmlnode_get_child(query, "email")) {
23325
a374a26fe217 Use "email" and "Email" consistently. This is potentially controversial,
Richard Laager <rlaager@pidgin.im>
parents: 23026
diff changeset
2270 field = purple_request_field_string_new("email", _("Email Address"),
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2271 NULL, FALSE);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2272 purple_request_field_group_add_field(group, field);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2273 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2274
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2275 usi = g_new0(struct user_search_info, 1);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2276 usi->js = js;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2277 usi->directory_server = g_strdup(from);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2278
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
2279 purple_request_fields(js->gc, _("Search for XMPP users"),
16961
b6955f946f8f s/Jabber/XMPP in user-visible places.
Richard Laager <rlaager@pidgin.im>
parents: 16799
diff changeset
2280 _("Search for XMPP users"), instructions, fields,
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2281 _("Search"), G_CALLBACK(user_search_cb),
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 15884
diff changeset
2282 _("Cancel"), G_CALLBACK(user_search_cancel_cb),
17798
45d377fdb3c3 Fixed weird bug that caused not supplying the account when searching for users.
Andreas Monitzer <am@adiumx.com>
parents: 17789
diff changeset
2283 purple_connection_get_account(js->gc), NULL, NULL,
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
2284 usi);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2285
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2286 g_free(instructions);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2287 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2288 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2289
17807
d98844d33c37 Exposed the user search function, so that directory searches can be performed directly when the jid is known.
Andreas Monitzer <am@adiumx.com>
parents: 17798
diff changeset
2290 void jabber_user_search(JabberStream *js, const char *directory)
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2291 {
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2292 JabberIq *iq;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2293
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2294 /* XXX: should probably better validate the directory we're given */
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2295 if(!directory || !*directory) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2296 purple_notify_error(js->gc, _("Invalid Directory"), _("Invalid Directory"), NULL);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2297 return;
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2298 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2299
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2300 iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:search");
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2301 xmlnode_set_attrib(iq->node, "to", directory);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2302
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2303 jabber_iq_set_callback(iq, user_search_fields_result_cb, NULL);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2304
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2305 jabber_iq_send(iq);
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2306 }
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2307
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2308 void jabber_user_search_begin(PurplePluginAction *action)
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2309 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15727
diff changeset
2310 PurpleConnection *gc = (PurpleConnection *) action->context;
24942
ec72b773a9da More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents: 24251
diff changeset
2311 JabberStream *js = purple_connection_get_protocol_data(gc);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2312
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
2313 purple_request_input(gc, _("Enter a User Directory"), _("Enter a User Directory"),
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2314 _("Select a user directory to search"),
17007
66c0fa6e5e2a Removes 'jabber.org' defaults from XMPP. I think we had agreed this was a good idea.
Sean Egan <seanegan@pidgin.im>
parents: 16961
diff changeset
2315 js->user_directories ? js->user_directories->data : NULL,
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2316 FALSE, FALSE, NULL,
17807
d98844d33c37 Exposed the user search function, so that directory searches can be performed directly when the jid is known.
Andreas Monitzer <am@adiumx.com>
parents: 17798
diff changeset
2317 _("Search Directory"), PURPLE_CALLBACK(jabber_user_search),
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 15884
diff changeset
2318 _("Cancel"), NULL,
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 15884
diff changeset
2319 NULL, NULL, NULL,
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
2320 js);
11675
0eae965a9098 [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
2321 }
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
2322
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2323 gboolean
28879
27cc8217e86e jabber: Determine if a buddy can receive a file transfer (when we have
Marcus Lundblad <malu@pidgin.im>
parents: 28828
diff changeset
2324 jabber_resource_know_capabilities(const JabberBuddyResource *jbr)
27cc8217e86e jabber: Determine if a buddy can receive a file transfer (when we have
Marcus Lundblad <malu@pidgin.im>
parents: 28828
diff changeset
2325 {
27cc8217e86e jabber: Determine if a buddy can receive a file transfer (when we have
Marcus Lundblad <malu@pidgin.im>
parents: 28828
diff changeset
2326 return jbr->caps.info != NULL;
27cc8217e86e jabber: Determine if a buddy can receive a file transfer (when we have
Marcus Lundblad <malu@pidgin.im>
parents: 28828
diff changeset
2327 }
27cc8217e86e jabber: Determine if a buddy can receive a file transfer (when we have
Marcus Lundblad <malu@pidgin.im>
parents: 28828
diff changeset
2328
27cc8217e86e jabber: Determine if a buddy can receive a file transfer (when we have
Marcus Lundblad <malu@pidgin.im>
parents: 28828
diff changeset
2329 gboolean
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2330 jabber_resource_has_capability(const JabberBuddyResource *jbr, const gchar *cap)
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2331 {
24802
eb481e98ac6a Sprinkle jabber_resource_has_capability in places
Paul Aurich <darkrain42@pidgin.im>
parents: 24732
diff changeset
2332 const GList *node = NULL;
24880
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
2333 const JabberCapsNodeExts *exts;
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
2334
24880
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
2335 if (!jbr->caps.info) {
27696
2cd9b9331f06 Lower the severity of this message.
Paul Aurich <darkrain42@pidgin.im>
parents: 27619
diff changeset
2336 purple_debug_info("jabber",
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2337 "Unable to find caps: nothing known about buddy\n");
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2338 return FALSE;
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2339 }
13794
7264393a2349 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13787
diff changeset
2340
24880
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
2341 node = g_list_find_custom(jbr->caps.info->features, cap, (GCompareFunc)strcmp);
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
2342 if (!node && jbr->caps.exts && jbr->caps.info->exts) {
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
2343 const GList *ext;
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
2344 exts = jbr->caps.info->exts;
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
2345 /* Walk through all the enabled caps, checking each list for the cap.
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
2346 * Don't check it twice, though. */
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
2347 for (ext = jbr->caps.exts; ext && !node; ext = ext->next) {
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
2348 GList *features = g_hash_table_lookup(exts->exts, ext->data);
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
2349 if (features)
ae4e8598d0bf Support old (XEP v1.3) Entity Capabilities alongside the new ones.
Paul Aurich <darkrain42@pidgin.im>
parents: 24878
diff changeset
2350 node = g_list_find_custom(features, cap, (GCompareFunc)strcmp);
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2351 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2352 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2353
24802
eb481e98ac6a Sprinkle jabber_resource_has_capability in places
Paul Aurich <darkrain42@pidgin.im>
parents: 24732
diff changeset
2354 return (node != NULL);
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2355 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2356
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2357 gboolean
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2358 jabber_buddy_has_capability(const JabberBuddy *jb, const gchar *cap)
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2359 {
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2360 JabberBuddyResource *jbr = jabber_buddy_find_resource((JabberBuddy*)jb, NULL);
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2361
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2362 if (!jbr) {
25454
9a1500ef24bd This happens anytime you IM an offline user, and is totally not an error
Mark Doliner <markdoliner@pidgin.im>
parents: 25391
diff changeset
2363 purple_debug_info("jabber",
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2364 "Unable to find caps: buddy might be offline\n");
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2365 return FALSE;
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2366 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2367
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2368 return jabber_resource_has_capability(jbr, cap);
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2369 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23393
diff changeset
2370
25577
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2371 const gchar *
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2372 jabber_resource_get_identity_category_type(const JabberBuddyResource *jbr,
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2373 const gchar *category)
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2374 {
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2375 const GList *iter = NULL;
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2376
27286
f637c4c27815 Fixup after propagating new caps stuff
Marcus Lundblad <malu@pidgin.im>
parents: 27285
diff changeset
2377 if (jbr->caps.info) {
f637c4c27815 Fixup after propagating new caps stuff
Marcus Lundblad <malu@pidgin.im>
parents: 27285
diff changeset
2378 for (iter = jbr->caps.info->identities ; iter ; iter = g_list_next(iter)) {
f637c4c27815 Fixup after propagating new caps stuff
Marcus Lundblad <malu@pidgin.im>
parents: 27285
diff changeset
2379 const JabberIdentity *identity =
f637c4c27815 Fixup after propagating new caps stuff
Marcus Lundblad <malu@pidgin.im>
parents: 27285
diff changeset
2380 (JabberIdentity *) iter->data;
25577
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2381
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2382 if (strcmp(identity->category, category) == 0) {
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2383 return identity->type;
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2384 }
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2385 }
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2386 }
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2387
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2388 return NULL;
ca0b40451bbc Set a value "type" in the ui_info hash table
Marcus Lundblad <malu@pidgin.im>
parents: 25575
diff changeset
2389 }

mercurial