annotate src/protocols/jabber/buddy.c @ 14067:f3ed5f4efcae

[gaim-migrate @ 16688] Fix for CID 110 (which also will fix some asserts that happen when you edit your Jabber User Info for the first time) Fix for CID 251 (Null check after deref) Fixes for CID 252, 253. (UNUSED_VALUE) I also changed the jabber_buddy_find() call in jabber_vcard_parse not to create the JabberBuddy if it doesn't exist - there should be a specific jabber buddy attached to the JabberBuddyInfo and if isn't present any more, we shouldn't create a new one. committer: Tailor Script <tailor@pidgin.im>
author Daniel Atallah <daniel.atallah@gmail.com>
date Thu, 10 Aug 2006 21:08:00 +0000
parents 25e63008d3bb
children 6cb8bdc3366f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
2 * gaim - Jabber Protocol Plugin
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
3 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
4 * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
5 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
9 * (at your option) any later version.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
10 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
14 * GNU General Public License for more details.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
15 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
19 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
20 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
21 #include "internal.h"
10684
72a5babfa8b4 [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents: 10662
diff changeset
22 #include "cipher.h"
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
23 #include "debug.h"
7076
9f1a6c97108d [gaim-migrate @ 7641]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
24 #include "imgstore.h"
9713
db62420a53a2 [gaim-migrate @ 10574]
Mark Doliner <mark@kingant.net>
parents: 9466
diff changeset
25 #include "prpl.h"
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
26 #include "notify.h"
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
27 #include "request.h"
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
28 #include "util.h"
7395
b250288fa948 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
29 #include "xmlnode.h"
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
30
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
31 #include "buddy.h"
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
32 #include "chat.h"
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
33 #include "jabber.h"
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
34 #include "iq.h"
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
35 #include "presence.h"
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
36 #include "xdata.h"
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
37
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
38 typedef struct {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
39 long idle_seconds;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
40 } JabberBuddyInfoResource;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
41
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
42 typedef struct {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
43 JabberStream *js;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
44 JabberBuddy *jb;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
45 char *jid;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
46 GSList *ids;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
47 GHashTable *resources;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
48 int timeout_handle;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
49 char *vcard_text;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
50 GSList *vcard_imgids;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
51 } JabberBuddyInfo;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
52
7116
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
53 void jabber_buddy_free(JabberBuddy *jb)
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
54 {
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
55 g_return_if_fail(jb != NULL);
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
56
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
57 if(jb->error_msg)
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
58 g_free(jb->error_msg);
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
59 while(jb->resources)
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
60 jabber_buddy_resource_free(jb->resources->data);
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
61
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
62 g_free(jb);
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
63 }
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
64
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
65 JabberBuddy *jabber_buddy_find(JabberStream *js, const char *name,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
66 gboolean create)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
67 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
68 JabberBuddy *jb;
7445
6ea4a49b4b51 [gaim-migrate @ 8052]
Nathan Walp <nwalp@pidgin.im>
parents: 7425
diff changeset
69 const char *realname;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
70
7445
6ea4a49b4b51 [gaim-migrate @ 8052]
Nathan Walp <nwalp@pidgin.im>
parents: 7425
diff changeset
71 if(!(realname = jabber_normalize(js->gc->account, name)))
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
72 return NULL;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
73
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
74 jb = g_hash_table_lookup(js->buddies, realname);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
75
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
76 if(!jb && create) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
77 jb = g_new0(JabberBuddy, 1);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
78 g_hash_table_insert(js->buddies, g_strdup(realname), jb);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
79 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
80
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
81 return jb;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
82 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
83
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
84
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
85 JabberBuddyResource *jabber_buddy_find_resource(JabberBuddy *jb,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
86 const char *resource)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
87 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
88 JabberBuddyResource *jbr = NULL;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
89 GList *l;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
90
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
91 if(!jb)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
92 return NULL;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
93
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
94 for(l = jb->resources; l; l = l->next)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
95 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
96 if(!jbr && !resource) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
97 jbr = l->data;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
98 } else if(!resource) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
99 if(((JabberBuddyResource *)l->data)->priority >= jbr->priority)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
100 jbr = l->data;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
101 } else if(((JabberBuddyResource *)l->data)->name) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
102 if(!strcmp(((JabberBuddyResource *)l->data)->name, resource)) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
103 jbr = l->data;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
104 break;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
105 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
106 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
107 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
108
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
109 return jbr;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
110 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
111
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
112 JabberBuddyResource *jabber_buddy_track_resource(JabberBuddy *jb, const char *resource,
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
113 int priority, JabberBuddyState state, const char *status)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
114 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
115 JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, resource);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
116
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
117 if(!jbr) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
118 jbr = g_new0(JabberBuddyResource, 1);
7116
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
119 jbr->jb = jb;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
120 jbr->name = g_strdup(resource);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
121 jbr->capabilities = JABBER_CAP_XHTML;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
122 jb->resources = g_list_append(jb->resources, jbr);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
123 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
124 jbr->priority = priority;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
125 jbr->state = state;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
126 if(jbr->status)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
127 g_free(jbr->status);
13785
10f702a4d3dc [gaim-migrate @ 16197]
Sean Egan <seanegan@gmail.com>
parents: 13776
diff changeset
128 if (status)
10f702a4d3dc [gaim-migrate @ 16197]
Sean Egan <seanegan@gmail.com>
parents: 13776
diff changeset
129 jbr->status = g_markup_escape_text(status, -1);
10f702a4d3dc [gaim-migrate @ 16197]
Sean Egan <seanegan@gmail.com>
parents: 13776
diff changeset
130 else
10f702a4d3dc [gaim-migrate @ 16197]
Sean Egan <seanegan@gmail.com>
parents: 13776
diff changeset
131 jbr->status = NULL;
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
132
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
133 return jbr;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
134 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
135
7116
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
136 void jabber_buddy_resource_free(JabberBuddyResource *jbr)
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
137 {
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
138 g_return_if_fail(jbr != NULL);
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
139
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
140 jbr->jb->resources = g_list_remove(jbr->jb->resources, jbr);
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
141
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
142 g_free(jbr->name);
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
143 g_free(jbr->status);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
144 g_free(jbr->thread_id);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
145 g_free(jbr->client.name);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
146 g_free(jbr->client.version);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
147 g_free(jbr->client.os);
7116
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
148 g_free(jbr);
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
149 }
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
150
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
151 void jabber_buddy_remove_resource(JabberBuddy *jb, const char *resource)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
152 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
153 JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, resource);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
154
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
155 if(!jbr)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
156 return;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
157
7116
6c8706109f92 [gaim-migrate @ 7683]
Nathan Walp <nwalp@pidgin.im>
parents: 7108
diff changeset
158 jabber_buddy_resource_free(jbr);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
159 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
160
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
161 const char *jabber_buddy_get_status_msg(JabberBuddy *jb)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
162 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
163 JabberBuddyResource *jbr;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
164
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
165 if(!jb)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
166 return NULL;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
167
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
168 jbr = jabber_buddy_find_resource(jb, NULL);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
169
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
170 if(!jbr)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
171 return NULL;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
172
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
173 return jbr->status;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
174 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
175
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
176 /*******
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
177 * This is the old vCard stuff taken from the old prpl. vCards, by definition
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
178 * are a temporary thing until jabber can get its act together and come up
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
179 * with a format for user information, hence the namespace of 'vcard-temp'
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
180 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
181 * Since I don't feel like putting that much work into something that's
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
182 * _supposed_ to go away, i'm going to just copy the kludgy old code here,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
183 * and make it purdy when jabber comes up with a standards-track JEP to
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
184 * replace vcard-temp
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
185 * --Nathan
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
186 *******/
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
187
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
188 /*---------------------------------------*/
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
189 /* Jabber "set info" (vCard) support */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
190 /*---------------------------------------*/
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
191
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
192 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
193 * V-Card format:
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
194 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
195 * <vCard prodid='' version='' xmlns=''>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
196 * <FN></FN>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
197 * <N>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
198 * <FAMILY/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
199 * <GIVEN/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
200 * </N>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
201 * <NICKNAME/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
202 * <URL/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
203 * <ADR>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
204 * <STREET/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
205 * <EXTADD/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
206 * <LOCALITY/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
207 * <REGION/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
208 * <PCODE/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
209 * <COUNTRY/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
210 * </ADR>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
211 * <TEL/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
212 * <EMAIL/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
213 * <ORG>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
214 * <ORGNAME/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
215 * <ORGUNIT/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
216 * </ORG>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
217 * <TITLE/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
218 * <ROLE/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
219 * <DESC/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
220 * <BDAY/>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
221 * </vCard>
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
222 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
223 * See also:
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
224 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
225 * http://docs.jabber.org/proto/html/vcard-temp.html
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
226 * http://www.vcard-xml.org/dtd/vCard-XML-v2-20010520.dtd
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
227 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
228
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
229 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
230 * Cross-reference user-friendly V-Card entry labels to vCard XML tags
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
231 * and attributes.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
232 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
233 * Order is (or should be) unimportant. For example: we have no way of
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
234 * knowing in what order real data will arrive.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
235 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
236 * Format: Label, Pre-set text, "visible" flag, "editable" flag, XML tag
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
237 * name, XML tag's parent tag "path" (relative to vCard node).
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
238 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
239 * List is terminated by a NULL label pointer.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
240 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
241 * Entries with no label text, but with XML tag and parent tag
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
242 * entries, are used by V-Card XML construction routines to
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
243 * "automagically" construct the appropriate XML node tree.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
244 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
245 * Thoughts on future direction/expansion
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
246 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
247 * This is a "simple" vCard.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
248 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
249 * It is possible for nodes other than the "vCard" node to have
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
250 * attributes. Should that prove necessary/desirable, add an
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
251 * "attributes" pointer to the vcard_template struct, create the
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
252 * necessary tag_attr structs, and add 'em to the vcard_dflt_data
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
253 * array.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
254 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
255 * The above changes will (obviously) require changes to the vCard
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
256 * construction routines.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
257 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
258
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
259 struct vcard_template {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
260 char *label; /* label text pointer */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
261 char *text; /* entry text pointer */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
262 int visible; /* should entry field be "visible?" */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
263 int editable; /* should entry field be editable? */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
264 char *tag; /* tag text */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
265 char *ptag; /* parent tag "path" text */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
266 char *url; /* vCard display format if URL */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
267 } vcard_template_data[] = {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
268 {N_("Full Name"), NULL, TRUE, TRUE, "FN", NULL, NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
269 {N_("Family Name"), NULL, TRUE, TRUE, "FAMILY", "N", NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
270 {N_("Given Name"), NULL, TRUE, TRUE, "GIVEN", "N", NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
271 {N_("Nickname"), NULL, TRUE, TRUE, "NICKNAME", NULL, NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
272 {N_("URL"), NULL, TRUE, TRUE, "URL", NULL, "<A HREF=\"%s\">%s</A>"},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
273 {N_("Street Address"), NULL, TRUE, TRUE, "STREET", "ADR", NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
274 {N_("Extended Address"), NULL, TRUE, TRUE, "EXTADD", "ADR", NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
275 {N_("Locality"), NULL, TRUE, TRUE, "LOCALITY", "ADR", NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
276 {N_("Region"), NULL, TRUE, TRUE, "REGION", "ADR", NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
277 {N_("Postal Code"), NULL, TRUE, TRUE, "PCODE", "ADR", NULL},
13331
b13bbdbed4ed [gaim-migrate @ 15701]
Nathan Walp <nwalp@pidgin.im>
parents: 13329
diff changeset
278 {N_("Country"), NULL, TRUE, TRUE, "CTRY", "ADR", NULL},
11361
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
279 {N_("Telephone"), NULL, TRUE, TRUE, "NUMBER", "TEL", NULL},
13545
cfc2f7fcb3dd [gaim-migrate @ 15922]
Richard Laager <rlaager@wiktel.com>
parents: 13344
diff changeset
280 {N_("E-Mail"), NULL, TRUE, TRUE, "USERID", "EMAIL", "<A HREF=\"mailto:%s\">%s</A>"},
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
281 {N_("Organization Name"), NULL, TRUE, TRUE, "ORGNAME", "ORG", NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
282 {N_("Organization Unit"), NULL, TRUE, TRUE, "ORGUNIT", "ORG", NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
283 {N_("Title"), NULL, TRUE, TRUE, "TITLE", NULL, NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
284 {N_("Role"), NULL, TRUE, TRUE, "ROLE", NULL, NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
285 {N_("Birthday"), NULL, TRUE, TRUE, "BDAY", NULL, NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
286 {N_("Description"), NULL, TRUE, TRUE, "DESC", NULL, NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
287 {"", NULL, TRUE, TRUE, "N", NULL, NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
288 {"", NULL, TRUE, TRUE, "ADR", NULL, NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
289 {"", NULL, TRUE, TRUE, "ORG", NULL, NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
290 {NULL, NULL, 0, 0, NULL, NULL, NULL}
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
291 };
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
292
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
293 /*
8735
92cbf9713795 [gaim-migrate @ 9490]
Christian Hammond <chipx86@chipx86.com>
parents: 8401
diff changeset
294 * The "vCard" tag's attribute list...
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
295 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
296 struct tag_attr {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
297 char *attr;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
298 char *value;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
299 } vcard_tag_attr_list[] = {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
300 {"prodid", "-//HandGen//NONSGML vGen v1.0//EN"},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
301 {"version", "2.0", },
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
302 {"xmlns", "vcard-temp", },
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
303 {NULL, NULL},
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
304 };
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
305
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
306
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
307 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
308 * Insert a tag node into an xmlnode tree, recursively inserting parent tag
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
309 * nodes as necessary
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
310 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
311 * Returns pointer to inserted node
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
312 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
313 * Note to hackers: this code is designed to be re-entrant (it's recursive--it
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
314 * calls itself), so don't put any "static"s in here!
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
315 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
316 static xmlnode *insert_tag_to_parent_tag(xmlnode *start, const char *parent_tag, const char *new_tag)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
317 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
318 xmlnode *x = NULL;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
319
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
320 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
321 * If the parent tag wasn't specified, see if we can get it
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
322 * from the vCard template struct.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
323 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
324 if(parent_tag == NULL) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
325 struct vcard_template *vc_tp = vcard_template_data;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
326
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
327 while(vc_tp->label != NULL) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
328 if(strcmp(vc_tp->tag, new_tag) == 0) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
329 parent_tag = vc_tp->ptag;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
330 break;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
331 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
332 ++vc_tp;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
333 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
334 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
335
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
336 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
337 * If we have a parent tag...
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
338 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
339 if(parent_tag != NULL ) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
340 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
341 * Try to get the parent node for a tag
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
342 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
343 if((x = xmlnode_get_child(start, parent_tag)) == NULL) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
344 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
345 * Descend?
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
346 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
347 char *grand_parent = g_strdup(parent_tag);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
348 char *parent;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
349
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
350 if((parent = strrchr(grand_parent, '/')) != NULL) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
351 *(parent++) = '\0';
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
352 x = insert_tag_to_parent_tag(start, grand_parent, parent);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
353 } else {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
354 x = xmlnode_new_child(start, grand_parent);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
355 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
356 g_free(grand_parent);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
357 } else {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
358 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
359 * We found *something* to be the parent node.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
360 * Note: may be the "root" node!
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
361 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
362 xmlnode *y;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
363 if((y = xmlnode_get_child(x, new_tag)) != NULL) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
364 return(y);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
365 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
366 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
367 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
368
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
369 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
370 * insert the new tag into its parent node
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
371 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
372 return(xmlnode_new_child((x == NULL? start : x), new_tag));
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
373 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
374
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
375 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
376 * Send vCard info to Jabber server
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
377 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
378 void jabber_set_info(GaimConnection *gc, const char *info)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
379 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
380 JabberIq *iq;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
381 JabberStream *js = gc->proto_data;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
382 xmlnode *vc_node;
11303
10066662176a [gaim-migrate @ 13503]
Richard Laager <rlaager@wiktel.com>
parents: 11183
diff changeset
383 char *avatar_file = NULL;
13691
87b027bb1f15 [gaim-migrate @ 16094]
Richard Laager <rlaager@wiktel.com>
parents: 13640
diff changeset
384 struct tag_attr *tag_attr;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
385
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
386 if(js->avatar_hash)
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
387 g_free(js->avatar_hash);
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
388 js->avatar_hash = NULL;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
389
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
390 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
391 * Send only if there's actually any *information* to send
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
392 */
11388
ce2a2e793835 [gaim-migrate @ 13616]
Nathan Walp <nwalp@pidgin.im>
parents: 11361
diff changeset
393 vc_node = info ? xmlnode_from_str(info, -1) : NULL;
11318
519dc2186438 [gaim-migrate @ 13521]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11303
diff changeset
394 avatar_file = gaim_buddy_icons_get_full_path(gaim_account_get_buddy_icon(gc->account));
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
395
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
396 if(!vc_node && avatar_file) {
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
397 vc_node = xmlnode_new("vCard");
13691
87b027bb1f15 [gaim-migrate @ 16094]
Richard Laager <rlaager@wiktel.com>
parents: 13640
diff changeset
398 for(tag_attr = vcard_tag_attr_list; tag_attr->attr != NULL; ++tag_attr)
87b027bb1f15 [gaim-migrate @ 16094]
Richard Laager <rlaager@wiktel.com>
parents: 13640
diff changeset
399 xmlnode_set_attrib(vc_node, tag_attr->attr, tag_attr->value);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
400 }
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
401
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
402 if(vc_node) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
403 if (vc_node->name &&
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
404 !g_ascii_strncasecmp(vc_node->name, "vCard", 5)) {
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
405 GError *error = NULL;
11509
fca94aa83486 [gaim-migrate @ 13754]
Tim Ringenbach <marv@pidgin.im>
parents: 11388
diff changeset
406 gchar *avatar_data_tmp;
fca94aa83486 [gaim-migrate @ 13754]
Tim Ringenbach <marv@pidgin.im>
parents: 11388
diff changeset
407 guchar *avatar_data;
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
408 gsize avatar_len;
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
409
11509
fca94aa83486 [gaim-migrate @ 13754]
Tim Ringenbach <marv@pidgin.im>
parents: 11388
diff changeset
410 if(avatar_file && g_file_get_contents(avatar_file, &avatar_data_tmp, &avatar_len, &error)) {
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
411 xmlnode *photo, *binval;
11127
719779387f96 [gaim-migrate @ 13183]
Mark Doliner <mark@kingant.net>
parents: 10941
diff changeset
412 gchar *enc;
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
413 int i;
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
414 unsigned char hashval[20];
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
415 char *p, hash[41];
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
416
11521
d41aabad3b7a [gaim-migrate @ 13769]
Mark Doliner <mark@kingant.net>
parents: 11509
diff changeset
417 avatar_data = (guchar *) avatar_data_tmp;
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
418 photo = xmlnode_new_child(vc_node, "PHOTO");
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
419 binval = xmlnode_new_child(photo, "BINVAL");
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
420 enc = gaim_base64_encode(avatar_data, avatar_len);
10684
72a5babfa8b4 [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents: 10662
diff changeset
421
11183
8dca96cbcd64 [gaim-migrate @ 13295]
Mark Doliner <mark@kingant.net>
parents: 11137
diff changeset
422 gaim_cipher_digest_region("sha1", (guchar *)avatar_data,
10687
b256ce6b85b8 [gaim-migrate @ 12235]
Etan Reisner <pidgin@unreliablesource.net>
parents: 10684
diff changeset
423 avatar_len, sizeof(hashval),
b256ce6b85b8 [gaim-migrate @ 12235]
Etan Reisner <pidgin@unreliablesource.net>
parents: 10684
diff changeset
424 hashval, NULL);
10684
72a5babfa8b4 [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents: 10662
diff changeset
425
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
426 p = hash;
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
427 for(i=0; i<20; i++, p+=2)
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
428 snprintf(p, 3, "%02x", hashval[i]);
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
429 js->avatar_hash = g_strdup(hash);
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
430
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
431 xmlnode_insert_data(binval, enc, -1);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
432 g_free(enc);
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
433 g_free(avatar_data);
10504
1a97d5e88d12 [gaim-migrate @ 11796]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10490
diff changeset
434 } else if (error != NULL) {
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
435 g_error_free(error);
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
436 }
11303
10066662176a [gaim-migrate @ 13503]
Richard Laager <rlaager@wiktel.com>
parents: 11183
diff changeset
437 g_free(avatar_file);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
438
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
439 iq = jabber_iq_new(js, JABBER_IQ_SET);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
440 xmlnode_insert_child(iq->node, vc_node);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
441 jabber_iq_send(iq);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
442 } else {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
443 xmlnode_free(vc_node);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
444 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
445 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
446 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
447
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
448 void jabber_set_buddy_icon(GaimConnection *gc, const char *iconfile)
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
449 {
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
450 GaimPresence *gpresence;
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
451 GaimStatus *status;
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
452
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
453 jabber_set_info(gc, gaim_account_get_user_info(gc->account));
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
454
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
455 gpresence = gaim_account_get_presence(gc->account);
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
456 status = gaim_presence_get_active_status(gpresence);
10216
09876d57c520 [gaim-migrate @ 11343]
Nathan Walp <nwalp@pidgin.im>
parents: 10215
diff changeset
457 jabber_presence_send(gc->account, status);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
458 }
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
459
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
460 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
461 * This is the callback from the "ok clicked" for "set vCard"
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
462 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
463 * Formats GSList data into XML-encoded string and returns a pointer
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
464 * to said string.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
465 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
466 * g_free()'ing the returned string space is the responsibility of
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
467 * the caller.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
468 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
469 static void
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
470 jabber_format_info(GaimConnection *gc, GaimRequestFields *fields)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
471 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
472 xmlnode *vc_node;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
473 GaimRequestField *field;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
474 const char *text;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
475 char *p;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
476 const struct vcard_template *vc_tp;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
477 struct tag_attr *tag_attr;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
478
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
479 vc_node = xmlnode_new("vCard");
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
480
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
481 for(tag_attr = vcard_tag_attr_list; tag_attr->attr != NULL; ++tag_attr)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
482 xmlnode_set_attrib(vc_node, tag_attr->attr, tag_attr->value);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
483
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
484 for (vc_tp = vcard_template_data; vc_tp->label != NULL; vc_tp++) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
485 if (*vc_tp->label == '\0')
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
486 continue;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
487
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
488 field = gaim_request_fields_get_field(fields, vc_tp->tag);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
489 text = gaim_request_field_string_get_value(field);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
490
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
491
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
492 if (text != NULL && *text != '\0') {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
493 xmlnode *xp;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
494
9339
4d1ba3243f7a [gaim-migrate @ 10147]
Nathan Walp <nwalp@pidgin.im>
parents: 9285
diff changeset
495 gaim_debug(GAIM_DEBUG_INFO, "jabber",
4d1ba3243f7a [gaim-migrate @ 10147]
Nathan Walp <nwalp@pidgin.im>
parents: 9285
diff changeset
496 "Setting %s to '%s'\n", vc_tp->tag, text);
4d1ba3243f7a [gaim-migrate @ 10147]
Nathan Walp <nwalp@pidgin.im>
parents: 9285
diff changeset
497
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
498 if ((xp = insert_tag_to_parent_tag(vc_node,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
499 NULL, vc_tp->tag)) != NULL) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
500
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
501 xmlnode_insert_data(xp, text, -1);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
502 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
503 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
504 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
505
7642
9008b5be4275 [gaim-migrate @ 8285]
Nathan Walp <nwalp@pidgin.im>
parents: 7445
diff changeset
506 p = xmlnode_to_str(vc_node, NULL);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
507 xmlnode_free(vc_node);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
508
13713
2cf94cdb2e99 [gaim-migrate @ 16117]
Richard Laager <rlaager@wiktel.com>
parents: 13691
diff changeset
509 if (gc != NULL) {
2cf94cdb2e99 [gaim-migrate @ 16117]
Richard Laager <rlaager@wiktel.com>
parents: 13691
diff changeset
510 GaimAccount *account = gaim_connection_get_account(gc);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
511
13713
2cf94cdb2e99 [gaim-migrate @ 16117]
Richard Laager <rlaager@wiktel.com>
parents: 13691
diff changeset
512 if (account != NULL) {
2cf94cdb2e99 [gaim-migrate @ 16117]
Richard Laager <rlaager@wiktel.com>
parents: 13691
diff changeset
513 gaim_account_set_user_info(account, p);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
514 serv_set_info(gc, p);
13713
2cf94cdb2e99 [gaim-migrate @ 16117]
Richard Laager <rlaager@wiktel.com>
parents: 13691
diff changeset
515 }
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
516 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
517
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
518 g_free(p);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
519 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
520
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
521 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
522 * This gets executed by the proto action
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
523 *
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
524 * Creates a new GaimRequestFields struct, gets the XML-formatted user_info
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
525 * string (if any) into GSLists for the (multi-entry) edit dialog and
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
526 * calls the set_vcard dialog.
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
527 */
9015
67421e0dc497 [gaim-migrate @ 9791]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
528 void jabber_setup_set_info(GaimPluginAction *action)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
529 {
9015
67421e0dc497 [gaim-migrate @ 9791]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
530 GaimConnection *gc = (GaimConnection *) action->context;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
531 GaimRequestFields *fields;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
532 GaimRequestFieldGroup *group;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
533 GaimRequestField *field;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
534 const struct vcard_template *vc_tp;
14067
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
535 const char *user_info;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
536 char *cdata;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
537 xmlnode *x_vc_data = NULL;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
538
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
539 fields = gaim_request_fields_new();
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
540 group = gaim_request_field_group_new(NULL);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
541 gaim_request_fields_add_group(fields, group);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
542
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
543 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
544 * Get existing, XML-formatted, user info
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
545 */
14067
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
546 if((user_info = gaim_account_get_user_info(gc->account)) != NULL)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
547 x_vc_data = xmlnode_from_str(user_info, -1);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
548
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
549 /*
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
550 * Set up GSLists for edit with labels from "template," data from user info
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
551 */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
552 for(vc_tp = vcard_template_data; vc_tp->label != NULL; ++vc_tp) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
553 xmlnode *data_node;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
554 if((vc_tp->label)[0] == '\0')
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
555 continue;
14067
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
556
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
557 if (x_vc_data != NULL) {
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
558 if(vc_tp->ptag == NULL) {
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
559 data_node = xmlnode_get_child(x_vc_data, vc_tp->tag);
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
560 } else {
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
561 gchar *tag = g_strdup_printf("%s/%s", vc_tp->ptag, vc_tp->tag);
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
562 data_node = xmlnode_get_child(x_vc_data, tag);
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
563 g_free(tag);
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
564 }
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
565 if(data_node)
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
566 cdata = xmlnode_get_data(data_node);
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
567 else
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
568 cdata = NULL;
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
569 } else
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
570 cdata = NULL;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
571
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
572 if(strcmp(vc_tp->tag, "DESC") == 0) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
573 field = gaim_request_field_string_new(vc_tp->tag,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
574 _(vc_tp->label), cdata,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
575 TRUE);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
576 } else {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
577 field = gaim_request_field_string_new(vc_tp->tag,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
578 _(vc_tp->label), cdata,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
579 FALSE);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
580 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
581
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
582 gaim_request_field_group_add_field(group, field);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
583 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
584
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
585 if(x_vc_data != NULL)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
586 xmlnode_free(x_vc_data);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
587
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
588 gaim_request_fields(gc, _("Edit Jabber vCard"),
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
589 _("Edit Jabber vCard"),
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
590 _("All items below are optional. Enter only the "
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
591 "information with which you feel comfortable."),
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
592 fields,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
593 _("Save"), G_CALLBACK(jabber_format_info),
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
594 _("Cancel"), NULL,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
595 gc);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
596 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
597
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
598 /*---------------------------------------*/
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
599 /* End Jabber "set info" (vCard) support */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
600 /*---------------------------------------*/
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
601
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
602 /******
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
603 * end of that ancient crap that needs to die
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
604 ******/
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
605
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
606 static void jabber_buddy_info_show_if_ready(JabberBuddyInfo *jbi)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
607 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
608 GString *info_text;
7306
7c12dab8e513 [gaim-migrate @ 7890]
Nathan Walp <nwalp@pidgin.im>
parents: 7250
diff changeset
609 char *resource_name;
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
610 JabberBuddyResource *jbr;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
611 JabberBuddyInfoResource *jbir;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
612 GList *resources;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
613
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
614 /* not yet */
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
615 if(jbi->ids)
11361
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
616 return;
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
617
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
618 info_text = g_string_new("");
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
619 resource_name = jabber_get_resource(jbi->jid);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
620
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
621 if(resource_name) {
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
622 jbr = jabber_buddy_find_resource(jbi->jb, resource_name);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
623 jbir = g_hash_table_lookup(jbi->resources, resource_name);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
624 if(jbr) {
7145
0e4894b3e2a6 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7116
diff changeset
625 char *purdy = NULL;
0e4894b3e2a6 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7116
diff changeset
626 if(jbr->status)
0e4894b3e2a6 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7116
diff changeset
627 purdy = gaim_strdup_withhtml(jbr->status);
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
628 g_string_append_printf(info_text, "<b>%s:</b> %s%s%s<br/>",
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
629 _("Status"), jabber_buddy_state_get_name(jbr->state),
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
630 purdy ? ": " : "",
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
631 purdy ? purdy : "");
7145
0e4894b3e2a6 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7116
diff changeset
632 if(purdy)
0e4894b3e2a6 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7116
diff changeset
633 g_free(purdy);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
634 } else {
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
635 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
636 _("Status"), _("Unknown"));
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
637 }
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
638 if(jbir) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
639 if(jbir->idle_seconds > 0) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
640 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
641 _("Idle"), gaim_str_seconds_to_string(jbir->idle_seconds));
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
642 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
643 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
644 if(jbr && jbr->client.name) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
645 g_string_append_printf(info_text, "<b>%s:</b> %s %s<br/>",
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
646 _("Client:"), jbr->client.name,
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
647 jbr->client.version ? jbr->client.version : "");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
648 if(jbr->client.os) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
649 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
650 _("Operating System"), jbr->client.os);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
651 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
652 }
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
653 } else {
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
654 for(resources = jbi->jb->resources; resources; resources = resources->next) {
7145
0e4894b3e2a6 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7116
diff changeset
655 char *purdy = NULL;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
656 jbr = resources->data;
7145
0e4894b3e2a6 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7116
diff changeset
657 if(jbr->status)
0e4894b3e2a6 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7116
diff changeset
658 purdy = gaim_strdup_withhtml(jbr->status);
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
659 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
660 _("Resource"), jbr->name);
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
661 g_string_append_printf(info_text, "<b>%s:</b> %s%s%s<br/>",
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
662 _("Status"), jabber_buddy_state_get_name(jbr->state),
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
663 purdy ? ": " : "",
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
664 purdy ? purdy : "");
7145
0e4894b3e2a6 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7116
diff changeset
665 if(purdy)
0e4894b3e2a6 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7116
diff changeset
666 g_free(purdy);
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
667
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
668 jbir = g_hash_table_lookup(jbi->resources, jbr->name);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
669 if(jbir) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
670 if(jbir->idle_seconds > 0) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
671 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
672 _("Idle"), gaim_str_seconds_to_string(jbir->idle_seconds));
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
673 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
674 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
675 if(jbr->client.name) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
676 g_string_append_printf(info_text, "<b>%s:</b> %s %s<br/>",
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
677 _("Client:"), jbr->client.name,
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
678 jbr->client.version ? jbr->client.version : "");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
679 if(jbr->client.os) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
680 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
681 _("Operating System"), jbr->client.os);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
682 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
683 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
684
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
685 g_string_append_printf(info_text, "<br/>");
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
686 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
687 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
688
7306
7c12dab8e513 [gaim-migrate @ 7890]
Nathan Walp <nwalp@pidgin.im>
parents: 7250
diff changeset
689 g_free(resource_name);
7c12dab8e513 [gaim-migrate @ 7890]
Nathan Walp <nwalp@pidgin.im>
parents: 7250
diff changeset
690
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
691 info_text = g_string_append(info_text, jbi->vcard_text);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
692
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
693 gaim_notify_userinfo(jbi->js->gc, jbi->jid, info_text->str, NULL, NULL);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
694
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
695 while(jbi->vcard_imgids) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
696 gaim_imgstore_unref(GPOINTER_TO_INT(jbi->vcard_imgids->data));
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
697 jbi->vcard_imgids = g_slist_delete_link(jbi->vcard_imgids, jbi->vcard_imgids);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
698 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
699
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
700 g_string_free(info_text, TRUE);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
701
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
702 gaim_timeout_remove(jbi->timeout_handle);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
703 g_free(jbi->jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
704 g_hash_table_destroy(jbi->resources);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
705 g_free(jbi->vcard_text);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
706 g_free(jbi);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
707 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
708
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
709 static void jabber_buddy_info_remove_id(JabberBuddyInfo *jbi, const char *id)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
710 {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
711 GSList *l = jbi->ids;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
712
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
713 if(!id)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
714 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
715
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
716 while(l) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
717 if(!strcmp(id, l->data)) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
718 jbi->ids = g_slist_remove(jbi->ids, l->data);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
719 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
720 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
721 l = l->next;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
722 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
723 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
724
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
725 static void jabber_vcard_parse(JabberStream *js, xmlnode *packet, gpointer data)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
726 {
14067
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
727 const char *id, *from;
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
728 GString *info_text;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
729 char *bare_jid;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
730 char *text;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
731 xmlnode *vcard;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
732 GaimBuddy *b;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
733 JabberBuddyInfo *jbi = data;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
734
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
735 from = xmlnode_get_attrib(packet, "from");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
736 id = xmlnode_get_attrib(packet, "id");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
737
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
738 if(!jbi)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
739 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
740
14067
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
741 jabber_buddy_info_remove_id(jbi, id);
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
742
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
743 if(!from)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
744 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
745
14067
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
746 if(!jabber_buddy_find(js, from, FALSE))
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
747 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
748
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
749 /* XXX: handle the error case */
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
750
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
751 bare_jid = jabber_get_bare_jid(from);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
752
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
753 b = gaim_find_buddy(js->gc->account, bare_jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
754
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
755 info_text = g_string_new("");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
756
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
757 if((vcard = xmlnode_get_child(packet, "vCard")) ||
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
758 (vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp"))) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
759 xmlnode *child;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
760 for(child = vcard->child; child; child = child->next)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
761 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
762 xmlnode *child2;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
763
8135
8f4ce853e685 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 7955
diff changeset
764 if(child->type != XMLNODE_TYPE_TAG)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
765 continue;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
766
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
767 text = xmlnode_get_data(child);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
768 if(text && !strcmp(child->name, "FN")) {
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
769 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
770 _("Full Name"), text);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
771 } else if(!strcmp(child->name, "N")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
772 for(child2 = child->child; child2; child2 = child2->next)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
773 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
774 char *text2;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
775
8135
8f4ce853e685 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 7955
diff changeset
776 if(child2->type != XMLNODE_TYPE_TAG)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
777 continue;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
778
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
779 text2 = xmlnode_get_data(child2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
780 if(text2 && !strcmp(child2->name, "FAMILY")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
781 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
782 "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
783 _("Family Name"), text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
784 } else if(text2 && !strcmp(child2->name, "GIVEN")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
785 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
786 "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
787 _("Given Name"), text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
788 } else if(text2 && !strcmp(child2->name, "MIDDLE")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
789 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
790 "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
791 _("Middle Name"), text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
792 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
793 g_free(text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
794 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
795 } else if(text && !strcmp(child->name, "NICKNAME")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
796 serv_got_alias(js->gc, from, text);
7955
119a22025818 [gaim-migrate @ 8630]
Nathan Walp <nwalp@pidgin.im>
parents: 7757
diff changeset
797 if(b) {
119a22025818 [gaim-migrate @ 8630]
Nathan Walp <nwalp@pidgin.im>
parents: 7757
diff changeset
798 gaim_blist_node_set_string((GaimBlistNode*)b, "servernick", text);
119a22025818 [gaim-migrate @ 8630]
Nathan Walp <nwalp@pidgin.im>
parents: 7757
diff changeset
799 }
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
800 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
801 _("Nickname"), text);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
802 } else if(text && !strcmp(child->name, "BDAY")) {
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
803 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
804 _("Birthday"), text);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
805 } else if(!strcmp(child->name, "ADR")) {
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
806 gboolean address_line_added = FALSE;
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
807
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
808 for(child2 = child->child; child2; child2 = child2->next)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
809 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
810 char *text2;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
811
8135
8f4ce853e685 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 7955
diff changeset
812 if(child2->type != XMLNODE_TYPE_TAG)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
813 continue;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
814
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
815 text2 = xmlnode_get_data(child2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
816 if (text2 == NULL)
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
817 continue;
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
818
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
819 /* We do this here so that it's not added if all the child
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
820 * elements are empty. */
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
821 if (!address_line_added)
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
822 {
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
823 g_string_append_printf(info_text, "<b>%s:</b><br/>",
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
824 _("Address"));
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
825 address_line_added = TRUE;
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
826 }
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
827
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
828 if(!strcmp(child2->name, "POBOX")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
829 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
830 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
831 _("P.O. Box"), text2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
832 } else if(!strcmp(child2->name, "EXTADR")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
833 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
834 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
835 _("Extended Address"), text2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
836 } else if(!strcmp(child2->name, "STREET")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
837 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
838 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
839 _("Street Address"), text2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
840 } else if(!strcmp(child2->name, "LOCALITY")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
841 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
842 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
843 _("Locality"), text2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
844 } else if(!strcmp(child2->name, "REGION")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
845 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
846 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
847 _("Region"), text2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
848 } else if(!strcmp(child2->name, "PCODE")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
849 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
850 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
851 _("Postal Code"), text2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
852 } else if(!strcmp(child2->name, "CTRY")
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
853 || !strcmp(child2->name, "COUNTRY")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
854 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
855 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
856 _("Country"), text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
857 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
858 g_free(text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
859 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
860 } else if(!strcmp(child->name, "TEL")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
861 char *number;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
862 if((child2 = xmlnode_get_child(child, "NUMBER"))) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
863 /* show what kind of number it is */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
864 number = xmlnode_get_data(child2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
865 if(number) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
866 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
867 "<b>%s:</b> %s<br/>", _("Telephone"), number);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
868 g_free(number);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
869 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
870 } else if((number = xmlnode_get_data(child))) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
871 /* lots of clients (including gaim) do this, but it's
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
872 * out of spec */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
873 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
874 "<b>%s:</b> %s<br/>", _("Telephone"), number);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
875 g_free(number);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
876 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
877 } else if(!strcmp(child->name, "EMAIL")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
878 char *userid;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
879 if((child2 = xmlnode_get_child(child, "USERID"))) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
880 /* show what kind of email it is */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
881 userid = xmlnode_get_data(child2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
882 if(userid) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
883 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
884 "<b>%s:</b> <a href='mailto:%s'>%s</a><br/>",
13545
cfc2f7fcb3dd [gaim-migrate @ 15922]
Richard Laager <rlaager@wiktel.com>
parents: 13344
diff changeset
885 _("E-Mail"), userid, userid);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
886 g_free(userid);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
887 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
888 } else if((userid = xmlnode_get_data(child))) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
889 /* lots of clients (including gaim) do this, but it's
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
890 * out of spec */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
891 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
892 "<b>%s:</b> <a href='mailto:%s'>%s</a><br/>",
13545
cfc2f7fcb3dd [gaim-migrate @ 15922]
Richard Laager <rlaager@wiktel.com>
parents: 13344
diff changeset
893 _("E-Mail"), userid, userid);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
894 g_free(userid);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
895 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
896 } else if(!strcmp(child->name, "ORG")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
897 for(child2 = child->child; child2; child2 = child2->next)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
898 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
899 char *text2;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
900
8135
8f4ce853e685 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 7955
diff changeset
901 if(child2->type != XMLNODE_TYPE_TAG)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
902 continue;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
903
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
904 text2 = xmlnode_get_data(child2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
905 if(text2 && !strcmp(child2->name, "ORGNAME")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
906 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
907 "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
908 _("Organization Name"), text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
909 } else if(text2 && !strcmp(child2->name, "ORGUNIT")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
910 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
911 "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
912 _("Organization Unit"), text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
913 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
914 g_free(text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
915 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
916 } else if(text && !strcmp(child->name, "TITLE")) {
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
917 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
918 _("Title"), text);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
919 } else if(text && !strcmp(child->name, "ROLE")) {
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
920 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
921 _("Role"), text);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
922 } else if(text && !strcmp(child->name, "DESC")) {
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
923 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
924 _("Description"), text);
7076
9f1a6c97108d [gaim-migrate @ 7641]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
925 } else if(!strcmp(child->name, "PHOTO") ||
9f1a6c97108d [gaim-migrate @ 7641]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
926 !strcmp(child->name, "LOGO")) {
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
927 char *bintext = NULL;
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
928 xmlnode *binval;
11361
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
929
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
930 if( ((binval = xmlnode_get_child(child, "BINVAL")) &&
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
931 (bintext = xmlnode_get_data(binval))) ||
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
932 (bintext = xmlnode_get_data(child))) {
11127
719779387f96 [gaim-migrate @ 13183]
Mark Doliner <mark@kingant.net>
parents: 10941
diff changeset
933 gsize size;
11137
096020ae09a9 [gaim-migrate @ 13201]
Mark Doliner <mark@kingant.net>
parents: 11127
diff changeset
934 guchar *data;
11127
719779387f96 [gaim-migrate @ 13183]
Mark Doliner <mark@kingant.net>
parents: 10941
diff changeset
935 int i;
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
936 unsigned char hashval[20];
11127
719779387f96 [gaim-migrate @ 13183]
Mark Doliner <mark@kingant.net>
parents: 10941
diff changeset
937 char *p, hash[41];
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
938 gboolean photo = (strcmp(child->name, "PHOTO") == 0);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
939
11361
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
940 data = gaim_base64_decode(bintext, &size);
7076
9f1a6c97108d [gaim-migrate @ 7641]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
941
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
942 jbi->vcard_imgids = g_slist_prepend(jbi->vcard_imgids, GINT_TO_POINTER(gaim_imgstore_add(data, size, "logo.png")));
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
943 g_string_append_printf(info_text,
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
944 "<b>%s:</b> <img id='%d'><br/>",
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
945 photo ? _("Photo") : _("Logo"),
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
946 GPOINTER_TO_INT(jbi->vcard_imgids->data));
7076
9f1a6c97108d [gaim-migrate @ 7641]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
947
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
948 gaim_buddy_icons_set_for_user(js->gc->account, bare_jid,
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
949 data, size);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
950
11183
8dca96cbcd64 [gaim-migrate @ 13295]
Mark Doliner <mark@kingant.net>
parents: 11137
diff changeset
951 gaim_cipher_digest_region("sha1", (guchar *)data, size,
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
952 sizeof(hashval), hashval, NULL);
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
953 p = hash;
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
954 for(i=0; i<20; i++, p+=2)
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
955 snprintf(p, 3, "%02x", hashval[i]);
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
956 gaim_blist_node_set_string((GaimBlistNode*)b, "avatar_hash", hash);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
957
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
958 g_free(data);
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
959 g_free(bintext);
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
960 }
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
961 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
962 g_free(text);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
963 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
964 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
965
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
966 jbi->vcard_text = gaim_strdup_withhtml(info_text->str);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
967 g_string_free(info_text, TRUE);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
968 g_free(bare_jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
969
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
970 jabber_buddy_info_show_if_ready(jbi);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
971 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
972
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
973
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
974 static void jabber_buddy_info_resource_free(gpointer data)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
975 {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
976 JabberBuddyInfoResource *jbri = data;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
977 g_free(jbri);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
978 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
979
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
980 static void jabber_version_parse(JabberStream *js, xmlnode *packet, gpointer data)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
981 {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
982 JabberBuddyInfo *jbi = data;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
983 const char *type, *id, *from;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
984 xmlnode *query;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
985 char *resource_name;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
986
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
987 g_return_if_fail(jbi != NULL);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
988
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
989 type = xmlnode_get_attrib(packet, "type");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
990 id = xmlnode_get_attrib(packet, "id");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
991 from = xmlnode_get_attrib(packet, "from");
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
992
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
993 jabber_buddy_info_remove_id(jbi, id);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
994
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
995 if(!from)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
996 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
997
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
998 resource_name = jabber_get_resource(from);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
999
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1000 if(resource_name) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1001 if(type && !strcmp(type, "result")) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1002 if((query = xmlnode_get_child(packet, "query"))) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1003 JabberBuddyResource *jbr = jabber_buddy_find_resource(jbi->jb, resource_name);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1004 if(jbr) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1005 xmlnode *node;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1006 if((node = xmlnode_get_child(query, "name"))) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1007 jbr->client.name = xmlnode_get_data(node);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1008 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1009 if((node = xmlnode_get_child(query, "version"))) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1010 jbr->client.version = xmlnode_get_data(node);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1011 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1012 if((node = xmlnode_get_child(query, "os"))) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1013 jbr->client.os = xmlnode_get_data(node);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1014 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1015 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1016 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1017 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1018 g_free(resource_name);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1019 }
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1020
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1021 jabber_buddy_info_show_if_ready(jbi);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1022 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1023
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1024 static void jabber_last_parse(JabberStream *js, xmlnode *packet, gpointer data)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1025 {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1026 JabberBuddyInfo *jbi = data;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1027 xmlnode *query;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1028 char *resource_name;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1029 const char *type, *id, *from, *seconds;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1030
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1031 g_return_if_fail(jbi != NULL);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1032
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1033 type = xmlnode_get_attrib(packet, "type");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1034 id = xmlnode_get_attrib(packet, "id");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1035 from = xmlnode_get_attrib(packet, "from");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1036
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1037 jabber_buddy_info_remove_id(jbi, id);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1038
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1039 if(!from)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1040 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1041
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1042 resource_name = jabber_get_resource(from);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1043
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1044 if(resource_name) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1045 if(type && !strcmp(type, "result")) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1046 if((query = xmlnode_get_child(packet, "query"))) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1047 seconds = xmlnode_get_attrib(query, "seconds");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1048 if(seconds) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1049 char *end = NULL;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1050 long sec = strtol(seconds, &end, 10);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1051 if(end != seconds) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1052 JabberBuddyInfoResource *jbir = g_hash_table_lookup(jbi->resources, resource_name);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1053 if(jbir) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1054 jbir->idle_seconds = sec;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1055 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1056 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1057 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1058 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1059 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1060 g_free(resource_name);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1061 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1062
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1063 jabber_buddy_info_show_if_ready(jbi);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1064 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1065
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1066 static gboolean jabber_buddy_get_info_timeout(gpointer data)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1067 {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1068 JabberBuddyInfo *jbi = data;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1069
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1070 /* remove the pending callbacks */
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1071 while(jbi->ids) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1072 char *id = jbi->ids->data;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1073 jabber_iq_remove_callback_by_id(jbi->js, id);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1074 g_free(id);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1075 jbi->ids = g_slist_remove(jbi->ids, id);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1076 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1077
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1078 jbi->timeout_handle = 0;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1079
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1080 jabber_buddy_info_show_if_ready(jbi);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1081
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1082 return FALSE;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1083 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1084
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1085 static void jabber_buddy_get_info_for_jid(JabberStream *js, const char *jid)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1086 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1087 JabberIq *iq;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1088 xmlnode *vcard;
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1089 GList *resources;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1090 JabberBuddy *jb;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1091 JabberBuddyInfo *jbi;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1092
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1093 jb = jabber_buddy_find(js, jid, TRUE);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1094
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1095 /* invalid JID */
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1096 if(!jb)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1097 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1098
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1099 jbi = g_new0(JabberBuddyInfo, 1);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1100 jbi->jid = g_strdup(jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1101 jbi->js = js;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1102 jbi->jb = jb;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1103 jbi->resources = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, jabber_buddy_info_resource_free);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1104
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1105 iq = jabber_iq_new(js, JABBER_IQ_GET);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1106
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1107 xmlnode_set_attrib(iq->node, "to", jid);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1108 vcard = xmlnode_new_child(iq->node, "vCard");
13806
25e63008d3bb [gaim-migrate @ 16229]
Sean Egan <seanegan@gmail.com>
parents: 13792
diff changeset
1109 xmlnode_set_namespace(vcard, "vcard-temp");
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1110
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1111 jabber_iq_set_callback(iq, jabber_vcard_parse, jbi);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1112 jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1113
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1114 jabber_iq_send(iq);
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1115
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1116 for(resources = jb->resources; resources; resources = resources->next)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1117 {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1118 JabberBuddyResource *jbr = resources->data;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1119 JabberBuddyInfoResource *jbir = g_new0(JabberBuddyInfoResource, 1);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1120 char *full_jid;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1121 if(strrchr(jid, '/')) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1122 full_jid = g_strdup(jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1123 } else {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1124 full_jid = g_strdup_printf("%s/%s", jid, jbr->name);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1125 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1126
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1127 g_hash_table_insert(jbi->resources, g_strdup(jbr->name), jbir);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1128
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1129 if(!jbr->client.name) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1130 iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:version");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1131 xmlnode_set_attrib(iq->node, "to", full_jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1132 jabber_iq_set_callback(iq, jabber_version_parse, jbi);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1133 jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1134 jabber_iq_send(iq);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1135 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1136
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1137 iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:last");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1138 xmlnode_set_attrib(iq->node, "to", full_jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1139 jabber_iq_set_callback(iq, jabber_last_parse, jbi);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1140 jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1141 jabber_iq_send(iq);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1142
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1143 g_free(full_jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1144 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1145
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1146 jbi->timeout_handle = gaim_timeout_add(30000, jabber_buddy_get_info_timeout, jbi);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1147 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1148
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1149 void jabber_buddy_get_info(GaimConnection *gc, const char *who)
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1150 {
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1151 JabberStream *js = gc->proto_data;
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1152 char *bare_jid = jabber_get_bare_jid(who);
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1153
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1154 if(bare_jid) {
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1155 jabber_buddy_get_info_for_jid(js, bare_jid);
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1156 g_free(bare_jid);
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1157 }
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1158 }
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1159
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1160 void jabber_buddy_get_info_chat(GaimConnection *gc, int id,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1161 const char *resource)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1162 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1163 JabberStream *js = gc->proto_data;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1164 JabberChat *chat = jabber_chat_find_by_id(js, id);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1165 char *full_jid;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1166
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1167 if(!chat)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1168 return;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1169
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1170 full_jid = g_strdup_printf("%s@%s/%s", chat->room, chat->server, resource);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1171 jabber_buddy_get_info_for_jid(js, full_jid);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1172 g_free(full_jid);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1173 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1174
7395
b250288fa948 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1175
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1176 static void jabber_buddy_set_invisibility(JabberStream *js, const char *who,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1177 gboolean invisible)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1178 {
9944
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1179 GaimPresence *gpresence;
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1180 GaimAccount *account;
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1181 GaimStatus *status;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1182 JabberBuddy *jb = jabber_buddy_find(js, who, TRUE);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1183 xmlnode *presence;
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1184 JabberBuddyState state;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1185 const char *msg;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1186 int priority;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1187
9944
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1188 account = gaim_connection_get_account(js->gc);
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1189 gpresence = gaim_account_get_presence(account);
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1190 status = gaim_presence_get_active_status(gpresence);
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1191
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1192 gaim_status_to_jabber(status, &state, &msg, &priority);
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1193 presence = jabber_presence_create(state, msg, priority);
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1194
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1195 xmlnode_set_attrib(presence, "to", who);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1196 if(invisible) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1197 xmlnode_set_attrib(presence, "type", "invisible");
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1198 jb->invisible |= JABBER_INVIS_BUDDY;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1199 } else {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1200 jb->invisible &= ~JABBER_INVIS_BUDDY;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1201 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1202
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1203 jabber_send(js, presence);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1204 xmlnode_free(presence);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1205 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1206
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1207 static void jabber_buddy_make_invisible(GaimBlistNode *node, gpointer data)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1208 {
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1209 GaimBuddy *buddy;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1210 GaimConnection *gc;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1211 JabberStream *js;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1212
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1213 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1214
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1215 buddy = (GaimBuddy *) node;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1216 gc = gaim_account_get_connection(buddy->account);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1217 js = gc->proto_data;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1218
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1219 jabber_buddy_set_invisibility(js, buddy->name, TRUE);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1220 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1221
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1222 static void jabber_buddy_make_visible(GaimBlistNode *node, gpointer data)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1223 {
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1224 GaimBuddy *buddy;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1225 GaimConnection *gc;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1226 JabberStream *js;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1227
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1228 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1229
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1230 buddy = (GaimBuddy *) node;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1231 gc = gaim_account_get_connection(buddy->account);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1232 js = gc->proto_data;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1233
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1234 jabber_buddy_set_invisibility(js, buddy->name, FALSE);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1235 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1236
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1237 static void jabber_buddy_cancel_presence_notification(GaimBlistNode *node,
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1238 gpointer data)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1239 {
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1240 GaimBuddy *buddy;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1241 GaimConnection *gc;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1242 JabberStream *js;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1243
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1244 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1245
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1246 buddy = (GaimBuddy *) node;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1247 gc = gaim_account_get_connection(buddy->account);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1248 js = gc->proto_data;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1249
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1250 /* I wonder if we should prompt the user before doing this */
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1251 jabber_presence_subscription_set(js, buddy->name, "unsubscribed");
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1252 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1253
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1254 static void jabber_buddy_rerequest_auth(GaimBlistNode *node, gpointer data)
7250
dee9f6aebbf3 [gaim-migrate @ 7827]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
1255 {
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1256 GaimBuddy *buddy;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1257 GaimConnection *gc;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1258 JabberStream *js;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1259
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1260 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
7250
dee9f6aebbf3 [gaim-migrate @ 7827]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
1261
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1262 buddy = (GaimBuddy *) node;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1263 gc = gaim_account_get_connection(buddy->account);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1264 js = gc->proto_data;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1265
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1266 jabber_presence_subscription_set(js, buddy->name, "subscribe");
7250
dee9f6aebbf3 [gaim-migrate @ 7827]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
1267 }
dee9f6aebbf3 [gaim-migrate @ 7827]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
1268
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1269
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1270 static void jabber_buddy_unsubscribe(GaimBlistNode *node, gpointer data)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1271 {
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1272 GaimBuddy *buddy;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1273 GaimConnection *gc;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1274 JabberStream *js;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1275
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1276 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1277
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1278 buddy = (GaimBuddy *) node;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1279 gc = gaim_account_get_connection(buddy->account);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1280 js = gc->proto_data;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1281
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1282 jabber_presence_subscription_set(js, buddy->name, "unsubscribe");
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1283 }
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1284
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1285
12323
fc464a0abccc [gaim-migrate @ 14627]
Richard Laager <rlaager@wiktel.com>
parents: 12284
diff changeset
1286 static GList *jabber_buddy_menu(GaimBuddy *buddy)
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1287 {
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1288 GaimConnection *gc = gaim_account_get_connection(buddy->account);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1289 JabberStream *js = gc->proto_data;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1290 JabberBuddy *jb = jabber_buddy_find(js, buddy->name, TRUE);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1291
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1292 GList *m = NULL;
12919
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1293 GaimMenuAction *act;
7395
b250288fa948 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1294
b250288fa948 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1295 if(!jb)
b250288fa948 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1296 return m;
b250288fa948 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1297
8185
3a229ad2fab0 [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8166
diff changeset
1298 /* XXX: fix the NOT ME below */
3a229ad2fab0 [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8166
diff changeset
1299
3a229ad2fab0 [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8166
diff changeset
1300 if(js->protocol_version == JABBER_PROTO_0_9 /* && NOT ME */) {
8166
ac7bf273bd66 [gaim-migrate @ 8878]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
1301 if(jb->invisible & JABBER_INVIS_BUDDY) {
12919
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1302 act = gaim_menu_action_new(_("Un-hide From"),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1303 GAIM_CALLBACK(jabber_buddy_make_visible),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1304 NULL, NULL);
8166
ac7bf273bd66 [gaim-migrate @ 8878]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
1305 } else {
12919
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1306 act = gaim_menu_action_new(_("Temporarily Hide From"),
13019
8504ce176d38 [gaim-migrate @ 15372]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12933
diff changeset
1307 GAIM_CALLBACK(jabber_buddy_make_invisible),
8504ce176d38 [gaim-migrate @ 15372]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12933
diff changeset
1308 NULL, NULL);
8166
ac7bf273bd66 [gaim-migrate @ 8878]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
1309 }
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1310 m = g_list_append(m, act);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1311 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1312
8185
3a229ad2fab0 [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8166
diff changeset
1313 if(jb->subscription & JABBER_SUB_FROM /* && NOT ME */) {
12919
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1314 act = gaim_menu_action_new(_("Cancel Presence Notification"),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1315 GAIM_CALLBACK(jabber_buddy_cancel_presence_notification),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1316 NULL, NULL);
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1317 m = g_list_append(m, act);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1318 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1319
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1320 if(!(jb->subscription & JABBER_SUB_TO)) {
12919
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1321 act = gaim_menu_action_new(_("(Re-)Request authorization"),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1322 GAIM_CALLBACK(jabber_buddy_rerequest_auth),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1323 NULL, NULL);
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1324 m = g_list_append(m, act);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1325
8185
3a229ad2fab0 [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8166
diff changeset
1326 } else /* if(NOT ME) */{
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1327
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1328 /* shouldn't this just happen automatically when the buddy is
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1329 removed? */
12919
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1330 act = gaim_menu_action_new(_("Unsubscribe"),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1331 GAIM_CALLBACK(jabber_buddy_unsubscribe),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1332 NULL, NULL);
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1333 m = g_list_append(m, act);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1334 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1335
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1336 return m;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1337 }
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1338
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1339 GList *
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1340 jabber_blist_node_menu(GaimBlistNode *node)
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1341 {
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1342 if(GAIM_BLIST_NODE_IS_BUDDY(node)) {
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1343 return jabber_buddy_menu((GaimBuddy *) node);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1344 } else {
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1345 return NULL;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1346 }
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1347 }
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1348
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1349
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1350 const char *
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1351 jabber_buddy_state_get_name(JabberBuddyState state)
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1352 {
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1353 switch(state) {
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1354 case JABBER_BUDDY_STATE_UNKNOWN:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1355 return _("Unknown");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1356 case JABBER_BUDDY_STATE_ERROR:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1357 return _("Error");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1358 case JABBER_BUDDY_STATE_UNAVAILABLE:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1359 return _("Offline");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1360 case JABBER_BUDDY_STATE_ONLINE:
12467
1b57012eec7b [gaim-migrate @ 14777]
Richard Laager <rlaager@wiktel.com>
parents: 12323
diff changeset
1361 return _("Available");
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1362 case JABBER_BUDDY_STATE_CHAT:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1363 return _("Chatty");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1364 case JABBER_BUDDY_STATE_AWAY:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1365 return _("Away");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1366 case JABBER_BUDDY_STATE_XA:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1367 return _("Extended Away");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1368 case JABBER_BUDDY_STATE_DND:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1369 return _("Do Not Disturb");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1370 }
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1371
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1372 return _("Unknown");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1373 }
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1374
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1375 JabberBuddyState jabber_buddy_status_id_get_state(const char *id) {
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1376 if(!id)
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1377 return JABBER_BUDDY_STATE_UNKNOWN;
11540
9ddda2a86f50 [gaim-migrate @ 13795]
Mark Doliner <mark@kingant.net>
parents: 11533
diff changeset
1378 if(!strcmp(id, "available"))
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1379 return JABBER_BUDDY_STATE_ONLINE;
12683
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1380 if(!strcmp(id, "freeforchat"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1381 return JABBER_BUDDY_STATE_CHAT;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1382 if(!strcmp(id, "away"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1383 return JABBER_BUDDY_STATE_AWAY;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1384 if(!strcmp(id, "extended_away"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1385 return JABBER_BUDDY_STATE_XA;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1386 if(!strcmp(id, "dnd"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1387 return JABBER_BUDDY_STATE_DND;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1388 if(!strcmp(id, "offline"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1389 return JABBER_BUDDY_STATE_UNAVAILABLE;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1390 if(!strcmp(id, "error"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1391 return JABBER_BUDDY_STATE_ERROR;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1392
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1393 return JABBER_BUDDY_STATE_UNKNOWN;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1394 }
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1395
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1396 JabberBuddyState jabber_buddy_show_get_state(const char *id) {
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1397 if(!id)
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1398 return JABBER_BUDDY_STATE_UNKNOWN;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1399 if(!strcmp(id, "available"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1400 return JABBER_BUDDY_STATE_ONLINE;
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1401 if(!strcmp(id, "chat"))
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1402 return JABBER_BUDDY_STATE_CHAT;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1403 if(!strcmp(id, "away"))
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1404 return JABBER_BUDDY_STATE_AWAY;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1405 if(!strcmp(id, "xa"))
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1406 return JABBER_BUDDY_STATE_XA;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1407 if(!strcmp(id, "dnd"))
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1408 return JABBER_BUDDY_STATE_DND;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1409 if(!strcmp(id, "offline"))
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1410 return JABBER_BUDDY_STATE_UNAVAILABLE;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1411 if(!strcmp(id, "error"))
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1412 return JABBER_BUDDY_STATE_ERROR;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1413
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1414 return JABBER_BUDDY_STATE_UNKNOWN;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1415 }
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1416
12683
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1417 const char *jabber_buddy_state_get_show(JabberBuddyState state) {
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1418 switch(state) {
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1419 case JABBER_BUDDY_STATE_CHAT:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1420 return "chat";
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1421 case JABBER_BUDDY_STATE_AWAY:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1422 return "away";
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1423 case JABBER_BUDDY_STATE_XA:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1424 return "xa";
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1425 case JABBER_BUDDY_STATE_DND:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1426 return "dnd";
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1427 case JABBER_BUDDY_STATE_ONLINE:
11540
9ddda2a86f50 [gaim-migrate @ 13795]
Mark Doliner <mark@kingant.net>
parents: 11533
diff changeset
1428 return "available";
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1429 case JABBER_BUDDY_STATE_UNKNOWN:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1430 case JABBER_BUDDY_STATE_ERROR:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1431 return NULL;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1432 case JABBER_BUDDY_STATE_UNAVAILABLE:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1433 return "offline";
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1434 }
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1435 return NULL;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1436 }
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1437
12683
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1438 const char *jabber_buddy_state_get_status_id(JabberBuddyState state) {
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1439 switch(state) {
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1440 case JABBER_BUDDY_STATE_CHAT:
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1441 return "freeforchat";
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1442 case JABBER_BUDDY_STATE_AWAY:
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1443 return "away";
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1444 case JABBER_BUDDY_STATE_XA:
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1445 return "extended_away";
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1446 case JABBER_BUDDY_STATE_DND:
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1447 return "dnd";
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1448 case JABBER_BUDDY_STATE_ONLINE:
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1449 return "available";
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1450 case JABBER_BUDDY_STATE_UNKNOWN:
13756
56fedad48814 [gaim-migrate @ 16167]
Sean Egan <seanegan@gmail.com>
parents: 13713
diff changeset
1451 return "available";
12683
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1452 case JABBER_BUDDY_STATE_ERROR:
13756
56fedad48814 [gaim-migrate @ 16167]
Sean Egan <seanegan@gmail.com>
parents: 13713
diff changeset
1453 return "error";
12683
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1454 case JABBER_BUDDY_STATE_UNAVAILABLE:
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1455 return "offline";
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1456 }
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1457 return NULL;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1458 }
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1459
13640
d12bbe6da705 [gaim-migrate @ 16038]
Bartoz Oler <bartosz@pidgin.im>
parents: 13633
diff changeset
1460 static void user_search_result_add_buddy_cb(GaimConnection *gc, GList *row, void *user_data)
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1461 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1462 /* XXX find out the jid */
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1463 gaim_blist_request_add_buddy(gaim_connection_get_account(gc),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1464 g_list_nth_data(row, 0), NULL, NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1465 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1466
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1467 static void user_search_result_cb(JabberStream *js, xmlnode *packet, gpointer data)
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1468 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1469 GaimNotifySearchResults *results;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1470 GaimNotifySearchColumn *column;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1471 xmlnode *x, *query, *item, *field;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1472
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1473 /* XXX error checking? */
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1474 if(!(query = xmlnode_get_child(packet, "query")))
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1475 return;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1476
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1477 results = gaim_notify_searchresults_new();
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1478 if((x = xmlnode_get_child_with_namespace(query, "x", "jabber:x:data"))) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1479 xmlnode *reported;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1480 gaim_debug_info("jabber", "new-skool\n");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1481 if((reported = xmlnode_get_child(x, "reported"))) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1482 xmlnode *field = xmlnode_get_child(reported, "field");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1483 while(field) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1484 /* XXX keep track of this order, use it below */
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1485 const char *var = xmlnode_get_attrib(field, "var");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1486 const char *label = xmlnode_get_attrib(field, "label");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1487 if(var) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1488 column = gaim_notify_searchresults_column_new(label ? label : var);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1489 gaim_notify_searchresults_column_add(results, column);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1490 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1491 field = xmlnode_get_next_twin(field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1492 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1493 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1494 item = xmlnode_get_child(x, "item");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1495 while(item) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1496 GList *row = NULL;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1497 field = xmlnode_get_child(item, "field");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1498 while(field) {
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1499 xmlnode *valuenode = xmlnode_get_child(field, "value");
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1500 if(valuenode) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1501 char *value = xmlnode_get_data(valuenode);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1502 row = g_list_append(row, value);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1503 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1504 field = xmlnode_get_next_twin(field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1505 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1506 gaim_notify_searchresults_row_add(results, row);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1507
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1508 item = xmlnode_get_next_twin(item);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1509 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1510 } else {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1511 /* old skool */
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1512 gaim_debug_info("jabber", "old-skool\n");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1513
13571
02a8424191ea [gaim-migrate @ 15950]
Richard Laager <rlaager@wiktel.com>
parents: 13545
diff changeset
1514 column = gaim_notify_searchresults_column_new(_("JID"));
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1515 gaim_notify_searchresults_column_add(results, column);
13571
02a8424191ea [gaim-migrate @ 15950]
Richard Laager <rlaager@wiktel.com>
parents: 13545
diff changeset
1516 column = gaim_notify_searchresults_column_new(_("First Name"));
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1517 gaim_notify_searchresults_column_add(results, column);
13571
02a8424191ea [gaim-migrate @ 15950]
Richard Laager <rlaager@wiktel.com>
parents: 13545
diff changeset
1518 column = gaim_notify_searchresults_column_new(_("Last Name"));
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1519 gaim_notify_searchresults_column_add(results, column);
13571
02a8424191ea [gaim-migrate @ 15950]
Richard Laager <rlaager@wiktel.com>
parents: 13545
diff changeset
1520 column = gaim_notify_searchresults_column_new(_("Nickname"));
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1521 gaim_notify_searchresults_column_add(results, column);
13571
02a8424191ea [gaim-migrate @ 15950]
Richard Laager <rlaager@wiktel.com>
parents: 13545
diff changeset
1522 column = gaim_notify_searchresults_column_new(_("E-Mail"));
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1523 gaim_notify_searchresults_column_add(results, column);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1524
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1525 for(item = xmlnode_get_child(query, "item"); item; item = xmlnode_get_next_twin(item)) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1526 const char *jid;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1527 xmlnode *node;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1528 GList *row = NULL;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1529
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1530 if(!(jid = xmlnode_get_attrib(item, "jid")))
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1531 continue;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1532
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1533 row = g_list_append(row, g_strdup(jid));
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1534 node = xmlnode_get_child(item, "first");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1535 row = g_list_append(row, node ? xmlnode_get_data(node) : NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1536 node = xmlnode_get_child(item, "last");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1537 row = g_list_append(row, node ? xmlnode_get_data(node) : NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1538 node = xmlnode_get_child(item, "nick");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1539 row = g_list_append(row, node ? xmlnode_get_data(node) : NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1540 node = xmlnode_get_child(item, "email");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1541 row = g_list_append(row, node ? xmlnode_get_data(node) : NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1542 gaim_debug_info("jabber", "row=%d\n", row);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1543 gaim_notify_searchresults_row_add(results, row);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1544 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1545 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1546
12624
851b0bd7eb52 [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12467
diff changeset
1547 gaim_notify_searchresults_button_add(results, GAIM_NOTIFY_BUTTON_ADD,
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1548 user_search_result_add_buddy_cb);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1549
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1550 gaim_notify_searchresults(js->gc, NULL, NULL, _("The following are the results of your search"), results, NULL, NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1551 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1552
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1553 static void user_search_x_data_cb(JabberStream *js, xmlnode *result, gpointer data)
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1554 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1555 xmlnode *query;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1556 JabberIq *iq;
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1557 char *dir_server = data;
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1558
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1559 iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:search");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1560 query = xmlnode_get_child(iq->node, "query");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1561
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1562 xmlnode_insert_child(query, result);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1563
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1564 jabber_iq_set_callback(iq, user_search_result_cb, NULL);
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1565 xmlnode_set_attrib(iq->node, "to", dir_server);
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1566 jabber_iq_send(iq);
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1567 g_free(dir_server);
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1568 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1569
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1570 struct user_search_info {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1571 JabberStream *js;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1572 char *directory_server;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1573 };
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1574
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1575 static void user_search_cancel_cb(struct user_search_info *usi, GaimRequestFields *fields)
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1576 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1577 g_free(usi->directory_server);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1578 g_free(usi);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1579 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1580
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1581 static void user_search_cb(struct user_search_info *usi, GaimRequestFields *fields)
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1582 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1583 JabberStream *js = usi->js;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1584 JabberIq *iq;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1585 xmlnode *query;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1586 GList *groups, *flds;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1587
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1588 iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:search");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1589 query = xmlnode_get_child(iq->node, "query");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1590
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1591 for(groups = gaim_request_fields_get_groups(fields); groups; groups = groups->next) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1592 for(flds = gaim_request_field_group_get_fields(groups->data);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1593 flds; flds = flds->next) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1594 GaimRequestField *field = flds->data;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1595 const char *id = gaim_request_field_get_id(field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1596 const char *value = gaim_request_field_string_get_value(field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1597
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1598 if(value && (!strcmp(id, "first") || !strcmp(id, "last") || !strcmp(id, "nick") || !strcmp(id, "email"))) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1599 xmlnode *y = xmlnode_new_child(query, id);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1600 xmlnode_insert_data(y, value, -1);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1601 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1602 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1603 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1604
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1605 jabber_iq_set_callback(iq, user_search_result_cb, NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1606 xmlnode_set_attrib(iq->node, "to", usi->directory_server);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1607 jabber_iq_send(iq);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1608
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1609 g_free(usi->directory_server);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1610 g_free(usi);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1611 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1612
13616
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1613 #if 0
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1614 /* This is for gettext only -- it will see this even though there's an #if 0. */
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1615
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1616 /*
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1617 * An incomplete list of server generated original language search
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1618 * comments for Jabber User Directories
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1619 *
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1620 * See discussion thread "Search comment for Jabber is not translatable"
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1621 * in gaim-i18n@lists.sourceforge.net (March 2006)
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1622 */
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1623 static const char * jabber_user_dir_comments [] = {
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1624 /* current comment from Jabber User Directory users.jabber.org */
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1625 N_("Find a contact by entering the search criteria in the given fields. "
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1626 "Note: Each field supports wild card searches (%)"),
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1627 NULL
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1628 };
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1629 #endif
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1630
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1631 static void user_search_fields_result_cb(JabberStream *js, xmlnode *packet, gpointer data)
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1632 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1633 xmlnode *query, *x;
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1634 const char *from, *type;
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1635
12284
ecd471d1eeec [gaim-migrate @ 14588]
Etan Reisner <pidgin@unreliablesource.net>
parents: 11675
diff changeset
1636 if(!(from = xmlnode_get_attrib(packet, "from")))
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1637 return;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1638
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1639 if(!(type = xmlnode_get_attrib(packet, "type")) || !strcmp(type, "error")) {
13633
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1640 char *msg = jabber_parse_error(js, packet);
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1641
13633
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1642 if(!msg)
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1643 msg = g_strdup(_("Unknown error"));
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1644
13617
513d0e06f35f [gaim-migrate @ 16003]
Richard Laager <rlaager@wiktel.com>
parents: 13616
diff changeset
1645 gaim_notify_error(js->gc, _("Directory Query Failed"),
13633
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1646 _("Could not query the directory server."), msg);
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1647 g_free(msg);
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1648
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1649 return;
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1650 }
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1651
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1652
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1653 if(!(query = xmlnode_get_child(packet, "query")))
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1654 return;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1655
13329
1d569233f257 [gaim-migrate @ 15699]
Nathan Walp <nwalp@pidgin.im>
parents: 13019
diff changeset
1656 if((x = xmlnode_get_child_with_namespace(query, "x", "jabber:x:data"))) {
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1657 jabber_x_data_request(js, x, user_search_x_data_cb, g_strdup(from));
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1658 return;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1659 } else {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1660 struct user_search_info *usi;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1661 xmlnode *instnode;
13616
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1662 char *instructions = NULL;
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1663 GaimRequestFields *fields;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1664 GaimRequestFieldGroup *group;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1665 GaimRequestField *field;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1666
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1667 /* old skool */
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1668 fields = gaim_request_fields_new();
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1669 group = gaim_request_field_group_new(NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1670 gaim_request_fields_add_group(fields, group);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1671
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1672 if((instnode = xmlnode_get_child(query, "instructions")))
13573
0b2e4a5a8e79 [gaim-migrate @ 15952]
Richard Laager <rlaager@wiktel.com>
parents: 13571
diff changeset
1673 {
0b2e4a5a8e79 [gaim-migrate @ 15952]
Richard Laager <rlaager@wiktel.com>
parents: 13571
diff changeset
1674 char *tmp = xmlnode_get_data(instnode);
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1675
13616
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1676 if(tmp)
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1677 {
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1678 /* Try to translate the message (see static message
13616
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1679 list in jabber_user_dir_comments[]) */
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1680 instructions = g_strdup_printf(_("Server Instructions: %s"), _(tmp));
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1681 g_free(tmp);
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1682 }
13573
0b2e4a5a8e79 [gaim-migrate @ 15952]
Richard Laager <rlaager@wiktel.com>
parents: 13571
diff changeset
1683 }
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1684
13616
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1685 if(!instructions)
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1686 {
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1687 instructions = g_strdup(_("Fill in one or more fields to search "
13616
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1688 "for any matching Jabber users."));
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1689 }
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1690
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1691 if(xmlnode_get_child(query, "first")) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1692 field = gaim_request_field_string_new("first", _("First Name"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1693 NULL, FALSE);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1694 gaim_request_field_group_add_field(group, field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1695 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1696 if(xmlnode_get_child(query, "last")) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1697 field = gaim_request_field_string_new("last", _("Last Name"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1698 NULL, FALSE);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1699 gaim_request_field_group_add_field(group, field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1700 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1701 if(xmlnode_get_child(query, "nick")) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1702 field = gaim_request_field_string_new("nick", _("Nickname"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1703 NULL, FALSE);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1704 gaim_request_field_group_add_field(group, field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1705 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1706 if(xmlnode_get_child(query, "email")) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1707 field = gaim_request_field_string_new("email", _("E-Mail Address"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1708 NULL, FALSE);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1709 gaim_request_field_group_add_field(group, field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1710 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1711
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1712 usi = g_new0(struct user_search_info, 1);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1713 usi->js = js;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1714 usi->directory_server = g_strdup(from);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1715
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1716 gaim_request_fields(js->gc, _("Search for Jabber users"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1717 _("Search for Jabber users"), instructions, fields,
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1718 _("Search"), G_CALLBACK(user_search_cb),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1719 _("Cancel"), G_CALLBACK(user_search_cancel_cb), usi);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1720
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1721 g_free(instructions);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1722 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1723 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1724
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1725 static void jabber_user_search_ok(JabberStream *js, const char *directory)
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1726 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1727 JabberIq *iq;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1728
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1729 /* XXX: should probably better validate the directory we're given */
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1730 if(!directory || !*directory) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1731 gaim_notify_error(js->gc, _("Invalid Directory"), _("Invalid Directory"), NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1732 return;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1733 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1734
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1735 iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:search");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1736 xmlnode_set_attrib(iq->node, "to", directory);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1737
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1738 jabber_iq_set_callback(iq, user_search_fields_result_cb, NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1739
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1740 jabber_iq_send(iq);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1741 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1742
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1743 void jabber_user_search_begin(GaimPluginAction *action)
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1744 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1745 GaimConnection *gc = (GaimConnection *) action->context;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1746 JabberStream *js = gc->proto_data;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1747
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1748 gaim_request_input(gc, _("Enter a User Directory"), _("Enter a User Directory"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1749 _("Select a user directory to search"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1750 js->user_directories ? js->user_directories->data : "users.jabber.org",
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1751 FALSE, FALSE, NULL,
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1752 _("Search Directory"), GAIM_CALLBACK(jabber_user_search_ok),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1753 _("Cancel"), NULL, js);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1754 }
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1755
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1756
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1757