annotate src/protocols/jabber/buddy.c @ 14102:14e14f1ef1d8

[gaim-migrate @ 16732] Jabber crashed when getting info from someone on your buddy list if the JID consists only of the domain identifer. For example, add "quser.alpha.qunu.com" to your buddy list then get their info. This fixes the crashing. I'm not really sure if the fix is correct. Can someone familiar with Jabber please look over this? committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 13 Aug 2006 05:50:19 +0000
parents b9e9938b1afa
children
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;
14068
6cb8bdc3366f [gaim-migrate @ 16689]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 14067
diff changeset
536 char *cdata = NULL;
7014
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);
14068
6cb8bdc3366f [gaim-migrate @ 16689]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 14067
diff changeset
567 }
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
568
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
569 if(strcmp(vc_tp->tag, "DESC") == 0) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
570 field = gaim_request_field_string_new(vc_tp->tag,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
571 _(vc_tp->label), cdata,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
572 TRUE);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
573 } else {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
574 field = gaim_request_field_string_new(vc_tp->tag,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
575 _(vc_tp->label), cdata,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
576 FALSE);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
577 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
578
14068
6cb8bdc3366f [gaim-migrate @ 16689]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 14067
diff changeset
579 g_free(cdata);
6cb8bdc3366f [gaim-migrate @ 16689]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 14067
diff changeset
580 cdata = NULL;
6cb8bdc3366f [gaim-migrate @ 16689]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 14067
diff changeset
581
7014
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/>",
14093
b9e9938b1afa [gaim-migrate @ 16719]
Mark Doliner <mark@kingant.net>
parents: 14068
diff changeset
677 _("Client"), jbr->client.name,
13792
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
14093
b9e9938b1afa [gaim-migrate @ 16719]
Mark Doliner <mark@kingant.net>
parents: 14068
diff changeset
691 if (jbi->vcard_text != NULL)
b9e9938b1afa [gaim-migrate @ 16719]
Mark Doliner <mark@kingant.net>
parents: 14068
diff changeset
692 info_text = g_string_append(info_text, jbi->vcard_text);
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
693
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
694 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
695
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
696 while(jbi->vcard_imgids) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
697 gaim_imgstore_unref(GPOINTER_TO_INT(jbi->vcard_imgids->data));
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
698 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
699 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
700
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
701 g_string_free(info_text, TRUE);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
702
14093
b9e9938b1afa [gaim-migrate @ 16719]
Mark Doliner <mark@kingant.net>
parents: 14068
diff changeset
703 if (jbi->timeout_handle > 0)
b9e9938b1afa [gaim-migrate @ 16719]
Mark Doliner <mark@kingant.net>
parents: 14068
diff changeset
704 gaim_timeout_remove(jbi->timeout_handle);
b9e9938b1afa [gaim-migrate @ 16719]
Mark Doliner <mark@kingant.net>
parents: 14068
diff changeset
705
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
706 g_free(jbi->jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
707 g_hash_table_destroy(jbi->resources);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
708 g_free(jbi->vcard_text);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
709 g_free(jbi);
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
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
712 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
713 {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
714 GSList *l = jbi->ids;
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 if(!id)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
717 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
718
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
719 while(l) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
720 if(!strcmp(id, l->data)) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
721 jbi->ids = g_slist_remove(jbi->ids, l->data);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
722 return;
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 l = l->next;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
725 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
726 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
727
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
728 static void jabber_vcard_parse(JabberStream *js, xmlnode *packet, gpointer data)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
729 {
14067
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
730 const char *id, *from;
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
731 GString *info_text;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
732 char *bare_jid;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
733 char *text;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
734 xmlnode *vcard;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
735 GaimBuddy *b;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
736 JabberBuddyInfo *jbi = data;
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 from = xmlnode_get_attrib(packet, "from");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
739 id = xmlnode_get_attrib(packet, "id");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
740
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
741 if(!jbi)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
742 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
743
14067
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
744 jabber_buddy_info_remove_id(jbi, id);
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
745
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
746 if(!from)
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
14067
f3ed5f4efcae [gaim-migrate @ 16688]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13806
diff changeset
749 if(!jabber_buddy_find(js, from, FALSE))
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
750 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
751
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
752 /* XXX: handle the error case */
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
753
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
754 bare_jid = jabber_get_bare_jid(from);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
755
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
756 b = gaim_find_buddy(js->gc->account, bare_jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
757
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
758 info_text = g_string_new("");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
759
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
760 if((vcard = xmlnode_get_child(packet, "vCard")) ||
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
761 (vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp"))) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
762 xmlnode *child;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
763 for(child = vcard->child; child; child = child->next)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
764 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
765 xmlnode *child2;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
766
8135
8f4ce853e685 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 7955
diff changeset
767 if(child->type != XMLNODE_TYPE_TAG)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
768 continue;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
769
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
770 text = xmlnode_get_data(child);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
771 if(text && !strcmp(child->name, "FN")) {
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
772 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
773 _("Full Name"), text);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
774 } else if(!strcmp(child->name, "N")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
775 for(child2 = child->child; child2; child2 = child2->next)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
776 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
777 char *text2;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
778
8135
8f4ce853e685 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 7955
diff changeset
779 if(child2->type != XMLNODE_TYPE_TAG)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
780 continue;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
781
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
782 text2 = xmlnode_get_data(child2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
783 if(text2 && !strcmp(child2->name, "FAMILY")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
784 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
785 "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
786 _("Family Name"), text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
787 } else if(text2 && !strcmp(child2->name, "GIVEN")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
788 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
789 "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
790 _("Given Name"), text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
791 } else if(text2 && !strcmp(child2->name, "MIDDLE")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
792 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
793 "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
794 _("Middle Name"), text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
795 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
796 g_free(text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
797 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
798 } else if(text && !strcmp(child->name, "NICKNAME")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
799 serv_got_alias(js->gc, from, text);
7955
119a22025818 [gaim-migrate @ 8630]
Nathan Walp <nwalp@pidgin.im>
parents: 7757
diff changeset
800 if(b) {
119a22025818 [gaim-migrate @ 8630]
Nathan Walp <nwalp@pidgin.im>
parents: 7757
diff changeset
801 gaim_blist_node_set_string((GaimBlistNode*)b, "servernick", text);
119a22025818 [gaim-migrate @ 8630]
Nathan Walp <nwalp@pidgin.im>
parents: 7757
diff changeset
802 }
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 _("Nickname"), text);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
805 } else if(text && !strcmp(child->name, "BDAY")) {
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
806 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
807 _("Birthday"), text);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
808 } else if(!strcmp(child->name, "ADR")) {
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
809 gboolean address_line_added = FALSE;
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
810
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
811 for(child2 = child->child; child2; child2 = child2->next)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
812 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
813 char *text2;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
814
8135
8f4ce853e685 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 7955
diff changeset
815 if(child2->type != XMLNODE_TYPE_TAG)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
816 continue;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
817
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
818 text2 = xmlnode_get_data(child2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
819 if (text2 == NULL)
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
820 continue;
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
821
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
822 /* 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
823 * elements are empty. */
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
824 if (!address_line_added)
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
825 {
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
826 g_string_append_printf(info_text, "<b>%s:</b><br/>",
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
827 _("Address"));
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
828 address_line_added = TRUE;
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
829 }
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
830
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
831 if(!strcmp(child2->name, "POBOX")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
832 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
833 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
834 _("P.O. Box"), text2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
835 } else if(!strcmp(child2->name, "EXTADR")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
836 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
837 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
838 _("Extended Address"), text2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
839 } else if(!strcmp(child2->name, "STREET")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
840 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
841 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
842 _("Street Address"), text2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
843 } else if(!strcmp(child2->name, "LOCALITY")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
844 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
845 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
846 _("Locality"), text2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
847 } else if(!strcmp(child2->name, "REGION")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
848 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
849 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
850 _("Region"), text2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
851 } else if(!strcmp(child2->name, "PCODE")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
852 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
853 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
854 _("Postal Code"), text2);
12933
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
855 } else if(!strcmp(child2->name, "CTRY")
75ac13ab161f [gaim-migrate @ 15286]
Richard Laager <rlaager@wiktel.com>
parents: 12919
diff changeset
856 || !strcmp(child2->name, "COUNTRY")) {
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
857 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
858 "&nbsp;<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
859 _("Country"), text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
860 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
861 g_free(text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
862 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
863 } else if(!strcmp(child->name, "TEL")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
864 char *number;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
865 if((child2 = xmlnode_get_child(child, "NUMBER"))) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
866 /* show what kind of number it is */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
867 number = xmlnode_get_data(child2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
868 if(number) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
869 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
870 "<b>%s:</b> %s<br/>", _("Telephone"), number);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
871 g_free(number);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
872 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
873 } else if((number = xmlnode_get_data(child))) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
874 /* lots of clients (including gaim) do this, but it's
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
875 * out of spec */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
876 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
877 "<b>%s:</b> %s<br/>", _("Telephone"), number);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
878 g_free(number);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
879 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
880 } else if(!strcmp(child->name, "EMAIL")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
881 char *userid;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
882 if((child2 = xmlnode_get_child(child, "USERID"))) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
883 /* show what kind of email it is */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
884 userid = xmlnode_get_data(child2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
885 if(userid) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
886 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
887 "<b>%s:</b> <a href='mailto:%s'>%s</a><br/>",
13545
cfc2f7fcb3dd [gaim-migrate @ 15922]
Richard Laager <rlaager@wiktel.com>
parents: 13344
diff changeset
888 _("E-Mail"), userid, userid);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
889 g_free(userid);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
890 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
891 } else if((userid = xmlnode_get_data(child))) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
892 /* lots of clients (including gaim) do this, but it's
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
893 * out of spec */
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
894 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
895 "<b>%s:</b> <a href='mailto:%s'>%s</a><br/>",
13545
cfc2f7fcb3dd [gaim-migrate @ 15922]
Richard Laager <rlaager@wiktel.com>
parents: 13344
diff changeset
896 _("E-Mail"), userid, userid);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
897 g_free(userid);
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 } else if(!strcmp(child->name, "ORG")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
900 for(child2 = child->child; child2; child2 = child2->next)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
901 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
902 char *text2;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
903
8135
8f4ce853e685 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 7955
diff changeset
904 if(child2->type != XMLNODE_TYPE_TAG)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
905 continue;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
906
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
907 text2 = xmlnode_get_data(child2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
908 if(text2 && !strcmp(child2->name, "ORGNAME")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
909 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
910 "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
911 _("Organization Name"), text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
912 } else if(text2 && !strcmp(child2->name, "ORGUNIT")) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
913 g_string_append_printf(info_text,
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
914 "<b>%s:</b> %s<br/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
915 _("Organization Unit"), text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
916 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
917 g_free(text2);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
918 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
919 } else if(text && !strcmp(child->name, "TITLE")) {
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 _("Title"), text);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
922 } else if(text && !strcmp(child->name, "ROLE")) {
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/>",
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
924 _("Role"), text);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
925 } else if(text && !strcmp(child->name, "DESC")) {
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
926 g_string_append_printf(info_text, "<b>%s:</b> %s<br/>",
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
927 _("Description"), text);
7076
9f1a6c97108d [gaim-migrate @ 7641]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
928 } else if(!strcmp(child->name, "PHOTO") ||
9f1a6c97108d [gaim-migrate @ 7641]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
929 !strcmp(child->name, "LOGO")) {
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
930 char *bintext = NULL;
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
931 xmlnode *binval;
11361
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
932
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
933 if( ((binval = xmlnode_get_child(child, "BINVAL")) &&
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
934 (bintext = xmlnode_get_data(binval))) ||
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
935 (bintext = xmlnode_get_data(child))) {
11127
719779387f96 [gaim-migrate @ 13183]
Mark Doliner <mark@kingant.net>
parents: 10941
diff changeset
936 gsize size;
11137
096020ae09a9 [gaim-migrate @ 13201]
Mark Doliner <mark@kingant.net>
parents: 11127
diff changeset
937 guchar *data;
11127
719779387f96 [gaim-migrate @ 13183]
Mark Doliner <mark@kingant.net>
parents: 10941
diff changeset
938 int i;
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
939 unsigned char hashval[20];
11127
719779387f96 [gaim-migrate @ 13183]
Mark Doliner <mark@kingant.net>
parents: 10941
diff changeset
940 char *p, hash[41];
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
941 gboolean photo = (strcmp(child->name, "PHOTO") == 0);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
942
11361
e4868370c433 [gaim-migrate @ 13585]
Nathan Walp <nwalp@pidgin.im>
parents: 11318
diff changeset
943 data = gaim_base64_decode(bintext, &size);
7076
9f1a6c97108d [gaim-migrate @ 7641]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
944
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
945 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
946 g_string_append_printf(info_text,
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
947 "<b>%s:</b> <img id='%d'><br/>",
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
948 photo ? _("Photo") : _("Logo"),
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
949 GPOINTER_TO_INT(jbi->vcard_imgids->data));
7076
9f1a6c97108d [gaim-migrate @ 7641]
Nathan Walp <nwalp@pidgin.im>
parents: 7014
diff changeset
950
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
951 gaim_buddy_icons_set_for_user(js->gc->account, bare_jid,
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
952 data, size);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
953
11183
8dca96cbcd64 [gaim-migrate @ 13295]
Mark Doliner <mark@kingant.net>
parents: 11137
diff changeset
954 gaim_cipher_digest_region("sha1", (guchar *)data, size,
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
955 sizeof(hashval), hashval, NULL);
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
956 p = hash;
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
957 for(i=0; i<20; i++, p+=2)
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
958 snprintf(p, 3, "%02x", hashval[i]);
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
959 gaim_blist_node_set_string((GaimBlistNode*)b, "avatar_hash", hash);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
960
10941
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
961 g_free(data);
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
962 g_free(bintext);
cef48e318125 [gaim-migrate @ 12731]
Nathan Walp <nwalp@pidgin.im>
parents: 10687
diff changeset
963 }
7014
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 g_free(text);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
966 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
967 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
968
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
969 jbi->vcard_text = gaim_strdup_withhtml(info_text->str);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
970 g_string_free(info_text, TRUE);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
971 g_free(bare_jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
972
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
973 jabber_buddy_info_show_if_ready(jbi);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
974 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
975
8213
8d41a4250bb7 [gaim-migrate @ 8936]
Nathan Walp <nwalp@pidgin.im>
parents: 8185
diff changeset
976
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
977 static void jabber_buddy_info_resource_free(gpointer data)
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 JabberBuddyInfoResource *jbri = data;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
980 g_free(jbri);
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
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
983 static void jabber_version_parse(JabberStream *js, xmlnode *packet, gpointer data)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
984 {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
985 JabberBuddyInfo *jbi = data;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
986 const char *type, *id, *from;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
987 xmlnode *query;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
988 char *resource_name;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
989
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
990 g_return_if_fail(jbi != NULL);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
991
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
992 type = xmlnode_get_attrib(packet, "type");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
993 id = xmlnode_get_attrib(packet, "id");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
994 from = xmlnode_get_attrib(packet, "from");
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
995
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
996 jabber_buddy_info_remove_id(jbi, id);
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 if(!from)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
999 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1000
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1001 resource_name = jabber_get_resource(from);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1002
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1003 if(resource_name) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1004 if(type && !strcmp(type, "result")) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1005 if((query = xmlnode_get_child(packet, "query"))) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1006 JabberBuddyResource *jbr = jabber_buddy_find_resource(jbi->jb, resource_name);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1007 if(jbr) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1008 xmlnode *node;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1009 if((node = xmlnode_get_child(query, "name"))) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1010 jbr->client.name = 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, "version"))) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1013 jbr->client.version = 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 if((node = xmlnode_get_child(query, "os"))) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1016 jbr->client.os = xmlnode_get_data(node);
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 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1019 }
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 g_free(resource_name);
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1022 }
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1023
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1024 jabber_buddy_info_show_if_ready(jbi);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1025 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1026
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1027 static void jabber_last_parse(JabberStream *js, xmlnode *packet, gpointer data)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1028 {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1029 JabberBuddyInfo *jbi = data;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1030 xmlnode *query;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1031 char *resource_name;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1032 const char *type, *id, *from, *seconds;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1033
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1034 g_return_if_fail(jbi != NULL);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1035
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1036 type = xmlnode_get_attrib(packet, "type");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1037 id = xmlnode_get_attrib(packet, "id");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1038 from = xmlnode_get_attrib(packet, "from");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1039
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1040 jabber_buddy_info_remove_id(jbi, id);
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 if(!from)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1043 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1044
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1045 resource_name = jabber_get_resource(from);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1046
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1047 if(resource_name) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1048 if(type && !strcmp(type, "result")) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1049 if((query = xmlnode_get_child(packet, "query"))) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1050 seconds = xmlnode_get_attrib(query, "seconds");
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1051 if(seconds) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1052 char *end = NULL;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1053 long sec = strtol(seconds, &end, 10);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1054 if(end != seconds) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1055 JabberBuddyInfoResource *jbir = g_hash_table_lookup(jbi->resources, resource_name);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1056 if(jbir) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1057 jbir->idle_seconds = sec;
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 }
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 g_free(resource_name);
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 jabber_buddy_info_show_if_ready(jbi);
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
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1069 static gboolean jabber_buddy_get_info_timeout(gpointer data)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1070 {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1071 JabberBuddyInfo *jbi = data;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1072
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1073 /* remove the pending callbacks */
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1074 while(jbi->ids) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1075 char *id = jbi->ids->data;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1076 jabber_iq_remove_callback_by_id(jbi->js, id);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1077 g_free(id);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1078 jbi->ids = g_slist_remove(jbi->ids, id);
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
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1081 jbi->timeout_handle = 0;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1082
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1083 jabber_buddy_info_show_if_ready(jbi);
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 return FALSE;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1086 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1087
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1088 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
1089 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1090 JabberIq *iq;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1091 xmlnode *vcard;
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1092 GList *resources;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1093 JabberBuddy *jb;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1094 JabberBuddyInfo *jbi;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1095
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1096 jb = jabber_buddy_find(js, jid, TRUE);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1097
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1098 /* invalid JID */
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1099 if(!jb)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1100 return;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1101
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1102 jbi = g_new0(JabberBuddyInfo, 1);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1103 jbi->jid = g_strdup(jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1104 jbi->js = js;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1105 jbi->jb = jb;
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1106 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
1107
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1108 iq = jabber_iq_new(js, JABBER_IQ_GET);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1109
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1110 xmlnode_set_attrib(iq->node, "to", jid);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1111 vcard = xmlnode_new_child(iq->node, "vCard");
13806
25e63008d3bb [gaim-migrate @ 16229]
Sean Egan <seanegan@gmail.com>
parents: 13792
diff changeset
1112 xmlnode_set_namespace(vcard, "vcard-temp");
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1113
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1114 jabber_iq_set_callback(iq, jabber_vcard_parse, jbi);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1115 jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1116
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1117 jabber_iq_send(iq);
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1118
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1119 for(resources = jb->resources; resources; resources = resources->next)
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1120 {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1121 JabberBuddyResource *jbr = resources->data;
14102
14e14f1ef1d8 [gaim-migrate @ 16732]
Mark Doliner <mark@kingant.net>
parents: 14093
diff changeset
1122 JabberBuddyInfoResource *jbir;
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1123 char *full_jid;
14102
14e14f1ef1d8 [gaim-migrate @ 16732]
Mark Doliner <mark@kingant.net>
parents: 14093
diff changeset
1124
14e14f1ef1d8 [gaim-migrate @ 16732]
Mark Doliner <mark@kingant.net>
parents: 14093
diff changeset
1125 if ((strchr(jid, '/') == NULL) && (jbr->name != NULL)) {
14e14f1ef1d8 [gaim-migrate @ 16732]
Mark Doliner <mark@kingant.net>
parents: 14093
diff changeset
1126 full_jid = g_strdup_printf("%s/%s", jid, jbr->name);
14e14f1ef1d8 [gaim-migrate @ 16732]
Mark Doliner <mark@kingant.net>
parents: 14093
diff changeset
1127 } else {
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1128 full_jid = g_strdup(jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1129 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1130
14102
14e14f1ef1d8 [gaim-migrate @ 16732]
Mark Doliner <mark@kingant.net>
parents: 14093
diff changeset
1131 if (jbr->name != NULL)
14e14f1ef1d8 [gaim-migrate @ 16732]
Mark Doliner <mark@kingant.net>
parents: 14093
diff changeset
1132 {
14e14f1ef1d8 [gaim-migrate @ 16732]
Mark Doliner <mark@kingant.net>
parents: 14093
diff changeset
1133 jbir = g_new0(JabberBuddyInfoResource, 1);
14e14f1ef1d8 [gaim-migrate @ 16732]
Mark Doliner <mark@kingant.net>
parents: 14093
diff changeset
1134 g_hash_table_insert(jbi->resources, g_strdup(jbr->name), jbir);
14e14f1ef1d8 [gaim-migrate @ 16732]
Mark Doliner <mark@kingant.net>
parents: 14093
diff changeset
1135 }
13792
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 if(!jbr->client.name) {
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1138 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
1139 xmlnode_set_attrib(iq->node, "to", full_jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1140 jabber_iq_set_callback(iq, jabber_version_parse, jbi);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1141 jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1142 jabber_iq_send(iq);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1143 }
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 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
1146 xmlnode_set_attrib(iq->node, "to", full_jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1147 jabber_iq_set_callback(iq, jabber_last_parse, jbi);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1148 jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1149 jabber_iq_send(iq);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1150
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1151 g_free(full_jid);
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1152 }
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1153
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1154 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
1155 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1156
10189
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1157 void jabber_buddy_get_info(GaimConnection *gc, const char *who)
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 JabberStream *js = gc->proto_data;
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1160 char *bare_jid = jabber_get_bare_jid(who);
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1161
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1162 if(bare_jid) {
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1163 jabber_buddy_get_info_for_jid(js, bare_jid);
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1164 g_free(bare_jid);
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1165 }
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1166 }
4e7249591251 [gaim-migrate @ 11304]
Nathan Walp <nwalp@pidgin.im>
parents: 9954
diff changeset
1167
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1168 void jabber_buddy_get_info_chat(GaimConnection *gc, int id,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1169 const char *resource)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1170 {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1171 JabberStream *js = gc->proto_data;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1172 JabberChat *chat = jabber_chat_find_by_id(js, id);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1173 char *full_jid;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1174
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1175 if(!chat)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1176 return;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1177
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1178 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
1179 jabber_buddy_get_info_for_jid(js, full_jid);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1180 g_free(full_jid);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1181 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1182
7395
b250288fa948 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1183
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1184 static void jabber_buddy_set_invisibility(JabberStream *js, const char *who,
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1185 gboolean invisible)
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1186 {
9944
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1187 GaimPresence *gpresence;
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1188 GaimAccount *account;
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1189 GaimStatus *status;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1190 JabberBuddy *jb = jabber_buddy_find(js, who, TRUE);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1191 xmlnode *presence;
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1192 JabberBuddyState state;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1193 const char *msg;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1194 int priority;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1195
9944
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1196 account = gaim_connection_get_account(js->gc);
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1197 gpresence = gaim_account_get_presence(account);
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1198 status = gaim_presence_get_active_status(gpresence);
e4a27c9aec4c [gaim-migrate @ 10838]
Luke Schierer <lschiere@pidgin.im>
parents: 9797
diff changeset
1199
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1200 gaim_status_to_jabber(status, &state, &msg, &priority);
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1201 presence = jabber_presence_create(state, msg, priority);
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1202
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1203 xmlnode_set_attrib(presence, "to", who);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1204 if(invisible) {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1205 xmlnode_set_attrib(presence, "type", "invisible");
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1206 jb->invisible |= JABBER_INVIS_BUDDY;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1207 } else {
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1208 jb->invisible &= ~JABBER_INVIS_BUDDY;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1209 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1210
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1211 jabber_send(js, presence);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1212 xmlnode_free(presence);
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1213 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1214
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1215 static void jabber_buddy_make_invisible(GaimBlistNode *node, gpointer data)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1216 {
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1217 GaimBuddy *buddy;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1218 GaimConnection *gc;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1219 JabberStream *js;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1220
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1221 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1222
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1223 buddy = (GaimBuddy *) node;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1224 gc = gaim_account_get_connection(buddy->account);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1225 js = gc->proto_data;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1226
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1227 jabber_buddy_set_invisibility(js, buddy->name, TRUE);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1228 }
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 static void jabber_buddy_make_visible(GaimBlistNode *node, gpointer data)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1231 {
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1232 GaimBuddy *buddy;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1233 GaimConnection *gc;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1234 JabberStream *js;
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1235
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1236 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1237
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1238 buddy = (GaimBuddy *) node;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1239 gc = gaim_account_get_connection(buddy->account);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1240 js = gc->proto_data;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1241
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1242 jabber_buddy_set_invisibility(js, buddy->name, FALSE);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1243 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1244
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1245 static void jabber_buddy_cancel_presence_notification(GaimBlistNode *node,
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1246 gpointer data)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1247 {
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1248 GaimBuddy *buddy;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1249 GaimConnection *gc;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1250 JabberStream *js;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1251
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1252 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
7014
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 buddy = (GaimBuddy *) node;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1255 gc = gaim_account_get_connection(buddy->account);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1256 js = gc->proto_data;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1257
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1258 /* I wonder if we should prompt the user before doing this */
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1259 jabber_presence_subscription_set(js, buddy->name, "unsubscribed");
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1260 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1261
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1262 static void jabber_buddy_rerequest_auth(GaimBlistNode *node, gpointer data)
7250
dee9f6aebbf3 [gaim-migrate @ 7827]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
1263 {
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1264 GaimBuddy *buddy;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1265 GaimConnection *gc;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1266 JabberStream *js;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1267
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1268 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
7250
dee9f6aebbf3 [gaim-migrate @ 7827]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
1269
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1270 buddy = (GaimBuddy *) node;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1271 gc = gaim_account_get_connection(buddy->account);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1272 js = gc->proto_data;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1273
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1274 jabber_presence_subscription_set(js, buddy->name, "subscribe");
7250
dee9f6aebbf3 [gaim-migrate @ 7827]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
1275 }
dee9f6aebbf3 [gaim-migrate @ 7827]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
1276
9030
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 static void jabber_buddy_unsubscribe(GaimBlistNode *node, gpointer data)
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1279 {
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1280 GaimBuddy *buddy;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1281 GaimConnection *gc;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1282 JabberStream *js;
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 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node));
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1285
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1286 buddy = (GaimBuddy *) node;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1287 gc = gaim_account_get_connection(buddy->account);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1288 js = gc->proto_data;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1289
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1290 jabber_presence_subscription_set(js, buddy->name, "unsubscribe");
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1291 }
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1292
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1293
12323
fc464a0abccc [gaim-migrate @ 14627]
Richard Laager <rlaager@wiktel.com>
parents: 12284
diff changeset
1294 static GList *jabber_buddy_menu(GaimBuddy *buddy)
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1295 {
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1296 GaimConnection *gc = gaim_account_get_connection(buddy->account);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1297 JabberStream *js = gc->proto_data;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1298 JabberBuddy *jb = jabber_buddy_find(js, buddy->name, TRUE);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1299
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1300 GList *m = NULL;
12919
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1301 GaimMenuAction *act;
7395
b250288fa948 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1302
b250288fa948 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1303 if(!jb)
b250288fa948 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1304 return m;
b250288fa948 [gaim-migrate @ 7990]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
1305
8185
3a229ad2fab0 [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8166
diff changeset
1306 /* XXX: fix the NOT ME below */
3a229ad2fab0 [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8166
diff changeset
1307
3a229ad2fab0 [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8166
diff changeset
1308 if(js->protocol_version == JABBER_PROTO_0_9 /* && NOT ME */) {
8166
ac7bf273bd66 [gaim-migrate @ 8878]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
1309 if(jb->invisible & JABBER_INVIS_BUDDY) {
12919
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1310 act = gaim_menu_action_new(_("Un-hide From"),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1311 GAIM_CALLBACK(jabber_buddy_make_visible),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1312 NULL, NULL);
8166
ac7bf273bd66 [gaim-migrate @ 8878]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
1313 } else {
12919
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1314 act = gaim_menu_action_new(_("Temporarily Hide From"),
13019
8504ce176d38 [gaim-migrate @ 15372]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12933
diff changeset
1315 GAIM_CALLBACK(jabber_buddy_make_invisible),
8504ce176d38 [gaim-migrate @ 15372]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12933
diff changeset
1316 NULL, NULL);
8166
ac7bf273bd66 [gaim-migrate @ 8878]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
1317 }
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1318 m = g_list_append(m, act);
7014
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
8185
3a229ad2fab0 [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8166
diff changeset
1321 if(jb->subscription & JABBER_SUB_FROM /* && NOT ME */) {
12919
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1322 act = gaim_menu_action_new(_("Cancel Presence Notification"),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1323 GAIM_CALLBACK(jabber_buddy_cancel_presence_notification),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1324 NULL, NULL);
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1325 m = g_list_append(m, act);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1326 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1327
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1328 if(!(jb->subscription & JABBER_SUB_TO)) {
12919
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1329 act = gaim_menu_action_new(_("(Re-)Request authorization"),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1330 GAIM_CALLBACK(jabber_buddy_rerequest_auth),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1331 NULL, NULL);
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1332 m = g_list_append(m, act);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1333
8185
3a229ad2fab0 [gaim-migrate @ 8906]
Nathan Walp <nwalp@pidgin.im>
parents: 8166
diff changeset
1334 } else /* if(NOT ME) */{
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1335
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1336 /* shouldn't this just happen automatically when the buddy is
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1337 removed? */
12919
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1338 act = gaim_menu_action_new(_("Unsubscribe"),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1339 GAIM_CALLBACK(jabber_buddy_unsubscribe),
248b8b39c671 [gaim-migrate @ 15272]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12683
diff changeset
1340 NULL, NULL);
9030
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1341 m = g_list_append(m, act);
7014
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1342 }
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1343
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1344 return m;
67c4e9d39242 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1345 }
9030
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 GList *
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1348 jabber_blist_node_menu(GaimBlistNode *node)
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1349 {
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1350 if(GAIM_BLIST_NODE_IS_BUDDY(node)) {
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1351 return jabber_buddy_menu((GaimBuddy *) node);
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1352 } else {
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1353 return NULL;
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1354 }
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1355 }
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1356
7ab20f829190 [gaim-migrate @ 9806]
Mark Doliner <mark@kingant.net>
parents: 9015
diff changeset
1357
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1358 const char *
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1359 jabber_buddy_state_get_name(JabberBuddyState state)
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1360 {
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1361 switch(state) {
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1362 case JABBER_BUDDY_STATE_UNKNOWN:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1363 return _("Unknown");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1364 case JABBER_BUDDY_STATE_ERROR:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1365 return _("Error");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1366 case JABBER_BUDDY_STATE_UNAVAILABLE:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1367 return _("Offline");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1368 case JABBER_BUDDY_STATE_ONLINE:
12467
1b57012eec7b [gaim-migrate @ 14777]
Richard Laager <rlaager@wiktel.com>
parents: 12323
diff changeset
1369 return _("Available");
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1370 case JABBER_BUDDY_STATE_CHAT:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1371 return _("Chatty");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1372 case JABBER_BUDDY_STATE_AWAY:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1373 return _("Away");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1374 case JABBER_BUDDY_STATE_XA:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1375 return _("Extended Away");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1376 case JABBER_BUDDY_STATE_DND:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1377 return _("Do Not Disturb");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1378 }
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1379
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1380 return _("Unknown");
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1381 }
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1382
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1383 JabberBuddyState jabber_buddy_status_id_get_state(const char *id) {
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1384 if(!id)
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1385 return JABBER_BUDDY_STATE_UNKNOWN;
11540
9ddda2a86f50 [gaim-migrate @ 13795]
Mark Doliner <mark@kingant.net>
parents: 11533
diff changeset
1386 if(!strcmp(id, "available"))
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1387 return JABBER_BUDDY_STATE_ONLINE;
12683
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1388 if(!strcmp(id, "freeforchat"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1389 return JABBER_BUDDY_STATE_CHAT;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1390 if(!strcmp(id, "away"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1391 return JABBER_BUDDY_STATE_AWAY;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1392 if(!strcmp(id, "extended_away"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1393 return JABBER_BUDDY_STATE_XA;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1394 if(!strcmp(id, "dnd"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1395 return JABBER_BUDDY_STATE_DND;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1396 if(!strcmp(id, "offline"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1397 return JABBER_BUDDY_STATE_UNAVAILABLE;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1398 if(!strcmp(id, "error"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1399 return JABBER_BUDDY_STATE_ERROR;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1400
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1401 return JABBER_BUDDY_STATE_UNKNOWN;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1402 }
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1403
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1404 JabberBuddyState jabber_buddy_show_get_state(const char *id) {
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1405 if(!id)
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1406 return JABBER_BUDDY_STATE_UNKNOWN;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1407 if(!strcmp(id, "available"))
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1408 return JABBER_BUDDY_STATE_ONLINE;
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1409 if(!strcmp(id, "chat"))
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1410 return JABBER_BUDDY_STATE_CHAT;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1411 if(!strcmp(id, "away"))
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1412 return JABBER_BUDDY_STATE_AWAY;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1413 if(!strcmp(id, "xa"))
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1414 return JABBER_BUDDY_STATE_XA;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1415 if(!strcmp(id, "dnd"))
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1416 return JABBER_BUDDY_STATE_DND;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1417 if(!strcmp(id, "offline"))
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1418 return JABBER_BUDDY_STATE_UNAVAILABLE;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1419 if(!strcmp(id, "error"))
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1420 return JABBER_BUDDY_STATE_ERROR;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1421
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1422 return JABBER_BUDDY_STATE_UNKNOWN;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1423 }
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1424
12683
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1425 const char *jabber_buddy_state_get_show(JabberBuddyState state) {
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1426 switch(state) {
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1427 case JABBER_BUDDY_STATE_CHAT:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1428 return "chat";
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1429 case JABBER_BUDDY_STATE_AWAY:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1430 return "away";
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1431 case JABBER_BUDDY_STATE_XA:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1432 return "xa";
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1433 case JABBER_BUDDY_STATE_DND:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1434 return "dnd";
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1435 case JABBER_BUDDY_STATE_ONLINE:
11540
9ddda2a86f50 [gaim-migrate @ 13795]
Mark Doliner <mark@kingant.net>
parents: 11533
diff changeset
1436 return "available";
9954
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1437 case JABBER_BUDDY_STATE_UNKNOWN:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1438 case JABBER_BUDDY_STATE_ERROR:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1439 return NULL;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1440 case JABBER_BUDDY_STATE_UNAVAILABLE:
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1441 return "offline";
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1442 }
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1443 return NULL;
a9fb4493ae22 [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9944
diff changeset
1444 }
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1445
12683
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1446 const char *jabber_buddy_state_get_status_id(JabberBuddyState state) {
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1447 switch(state) {
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1448 case JABBER_BUDDY_STATE_CHAT:
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1449 return "freeforchat";
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1450 case JABBER_BUDDY_STATE_AWAY:
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1451 return "away";
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1452 case JABBER_BUDDY_STATE_XA:
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1453 return "extended_away";
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1454 case JABBER_BUDDY_STATE_DND:
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1455 return "dnd";
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1456 case JABBER_BUDDY_STATE_ONLINE:
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1457 return "available";
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1458 case JABBER_BUDDY_STATE_UNKNOWN:
13756
56fedad48814 [gaim-migrate @ 16167]
Sean Egan <seanegan@gmail.com>
parents: 13713
diff changeset
1459 return "available";
12683
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1460 case JABBER_BUDDY_STATE_ERROR:
13756
56fedad48814 [gaim-migrate @ 16167]
Sean Egan <seanegan@gmail.com>
parents: 13713
diff changeset
1461 return "error";
12683
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1462 case JABBER_BUDDY_STATE_UNAVAILABLE:
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1463 return "offline";
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1464 }
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1465 return NULL;
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1466 }
41cf9be29754 [gaim-migrate @ 15026]
Nathan Walp <nwalp@pidgin.im>
parents: 12633
diff changeset
1467
13640
d12bbe6da705 [gaim-migrate @ 16038]
Bartoz Oler <bartosz@pidgin.im>
parents: 13633
diff changeset
1468 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
1469 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1470 /* XXX find out the jid */
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1471 gaim_blist_request_add_buddy(gaim_connection_get_account(gc),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1472 g_list_nth_data(row, 0), NULL, NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1473 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1474
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1475 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
1476 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1477 GaimNotifySearchResults *results;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1478 GaimNotifySearchColumn *column;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1479 xmlnode *x, *query, *item, *field;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1480
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1481 /* XXX error checking? */
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1482 if(!(query = xmlnode_get_child(packet, "query")))
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1483 return;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1484
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1485 results = gaim_notify_searchresults_new();
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1486 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
1487 xmlnode *reported;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1488 gaim_debug_info("jabber", "new-skool\n");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1489 if((reported = xmlnode_get_child(x, "reported"))) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1490 xmlnode *field = xmlnode_get_child(reported, "field");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1491 while(field) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1492 /* XXX keep track of this order, use it below */
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1493 const char *var = xmlnode_get_attrib(field, "var");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1494 const char *label = xmlnode_get_attrib(field, "label");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1495 if(var) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1496 column = gaim_notify_searchresults_column_new(label ? label : var);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1497 gaim_notify_searchresults_column_add(results, column);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1498 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1499 field = xmlnode_get_next_twin(field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1500 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1501 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1502 item = xmlnode_get_child(x, "item");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1503 while(item) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1504 GList *row = NULL;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1505 field = xmlnode_get_child(item, "field");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1506 while(field) {
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1507 xmlnode *valuenode = xmlnode_get_child(field, "value");
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1508 if(valuenode) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1509 char *value = xmlnode_get_data(valuenode);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1510 row = g_list_append(row, value);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1511 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1512 field = xmlnode_get_next_twin(field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1513 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1514 gaim_notify_searchresults_row_add(results, row);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1515
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1516 item = xmlnode_get_next_twin(item);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1517 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1518 } else {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1519 /* old skool */
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1520 gaim_debug_info("jabber", "old-skool\n");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1521
13571
02a8424191ea [gaim-migrate @ 15950]
Richard Laager <rlaager@wiktel.com>
parents: 13545
diff changeset
1522 column = gaim_notify_searchresults_column_new(_("JID"));
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1523 gaim_notify_searchresults_column_add(results, column);
13571
02a8424191ea [gaim-migrate @ 15950]
Richard Laager <rlaager@wiktel.com>
parents: 13545
diff changeset
1524 column = gaim_notify_searchresults_column_new(_("First Name"));
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1525 gaim_notify_searchresults_column_add(results, column);
13571
02a8424191ea [gaim-migrate @ 15950]
Richard Laager <rlaager@wiktel.com>
parents: 13545
diff changeset
1526 column = gaim_notify_searchresults_column_new(_("Last Name"));
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1527 gaim_notify_searchresults_column_add(results, column);
13571
02a8424191ea [gaim-migrate @ 15950]
Richard Laager <rlaager@wiktel.com>
parents: 13545
diff changeset
1528 column = gaim_notify_searchresults_column_new(_("Nickname"));
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1529 gaim_notify_searchresults_column_add(results, column);
13571
02a8424191ea [gaim-migrate @ 15950]
Richard Laager <rlaager@wiktel.com>
parents: 13545
diff changeset
1530 column = gaim_notify_searchresults_column_new(_("E-Mail"));
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1531 gaim_notify_searchresults_column_add(results, column);
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 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
1534 const char *jid;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1535 xmlnode *node;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1536 GList *row = NULL;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1537
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1538 if(!(jid = xmlnode_get_attrib(item, "jid")))
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1539 continue;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1540
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1541 row = g_list_append(row, g_strdup(jid));
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1542 node = xmlnode_get_child(item, "first");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1543 row = g_list_append(row, node ? xmlnode_get_data(node) : NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1544 node = xmlnode_get_child(item, "last");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1545 row = g_list_append(row, node ? xmlnode_get_data(node) : NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1546 node = xmlnode_get_child(item, "nick");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1547 row = g_list_append(row, node ? xmlnode_get_data(node) : NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1548 node = xmlnode_get_child(item, "email");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1549 row = g_list_append(row, node ? xmlnode_get_data(node) : NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1550 gaim_debug_info("jabber", "row=%d\n", row);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1551 gaim_notify_searchresults_row_add(results, row);
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 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1554
12624
851b0bd7eb52 [gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents: 12467
diff changeset
1555 gaim_notify_searchresults_button_add(results, GAIM_NOTIFY_BUTTON_ADD,
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1556 user_search_result_add_buddy_cb);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1557
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1558 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
1559 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1560
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1561 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
1562 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1563 xmlnode *query;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1564 JabberIq *iq;
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1565 char *dir_server = data;
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1566
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1567 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
1568 query = xmlnode_get_child(iq->node, "query");
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 xmlnode_insert_child(query, result);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1571
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1572 jabber_iq_set_callback(iq, user_search_result_cb, NULL);
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1573 xmlnode_set_attrib(iq->node, "to", dir_server);
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1574 jabber_iq_send(iq);
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1575 g_free(dir_server);
11675
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
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1578 struct user_search_info {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1579 JabberStream *js;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1580 char *directory_server;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1581 };
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 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
1584 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1585 g_free(usi->directory_server);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1586 g_free(usi);
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
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1589 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
1590 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1591 JabberStream *js = usi->js;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1592 JabberIq *iq;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1593 xmlnode *query;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1594 GList *groups, *flds;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1595
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1596 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
1597 query = xmlnode_get_child(iq->node, "query");
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1598
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1599 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
1600 for(flds = gaim_request_field_group_get_fields(groups->data);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1601 flds; flds = flds->next) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1602 GaimRequestField *field = flds->data;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1603 const char *id = gaim_request_field_get_id(field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1604 const char *value = gaim_request_field_string_get_value(field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1605
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1606 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
1607 xmlnode *y = xmlnode_new_child(query, id);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1608 xmlnode_insert_data(y, value, -1);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1609 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1610 }
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
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1613 jabber_iq_set_callback(iq, user_search_result_cb, NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1614 xmlnode_set_attrib(iq->node, "to", usi->directory_server);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1615 jabber_iq_send(iq);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1616
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1617 g_free(usi->directory_server);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1618 g_free(usi);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1619 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1620
13616
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1621 #if 0
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1622 /* 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
1623
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1624 /*
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1625 * An incomplete list of server generated original language search
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1626 * comments for Jabber User Directories
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1627 *
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1628 * See discussion thread "Search comment for Jabber is not translatable"
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1629 * in gaim-i18n@lists.sourceforge.net (March 2006)
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1630 */
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1631 static const char * jabber_user_dir_comments [] = {
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1632 /* current comment from Jabber User Directory users.jabber.org */
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1633 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
1634 "Note: Each field supports wild card searches (%)"),
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1635 NULL
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1636 };
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1637 #endif
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1638
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1639 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
1640 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1641 xmlnode *query, *x;
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1642 const char *from, *type;
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1643
12284
ecd471d1eeec [gaim-migrate @ 14588]
Etan Reisner <pidgin@unreliablesource.net>
parents: 11675
diff changeset
1644 if(!(from = xmlnode_get_attrib(packet, "from")))
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1645 return;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1646
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1647 if(!(type = xmlnode_get_attrib(packet, "type")) || !strcmp(type, "error")) {
13633
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1648 char *msg = jabber_parse_error(js, packet);
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1649
13633
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1650 if(!msg)
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1651 msg = g_strdup(_("Unknown error"));
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1652
13617
513d0e06f35f [gaim-migrate @ 16003]
Richard Laager <rlaager@wiktel.com>
parents: 13616
diff changeset
1653 gaim_notify_error(js->gc, _("Directory Query Failed"),
13633
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1654 _("Could not query the directory server."), msg);
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1655 g_free(msg);
c86c6f0505ea [gaim-migrate @ 16031]
Richard Laager <rlaager@wiktel.com>
parents: 13618
diff changeset
1656
13344
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1657 return;
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1658 }
1c2f284986b7 [gaim-migrate @ 15714]
Nathan Walp <nwalp@pidgin.im>
parents: 13331
diff changeset
1659
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1660
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1661 if(!(query = xmlnode_get_child(packet, "query")))
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1662 return;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1663
13329
1d569233f257 [gaim-migrate @ 15699]
Nathan Walp <nwalp@pidgin.im>
parents: 13019
diff changeset
1664 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
1665 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
1666 return;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1667 } else {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1668 struct user_search_info *usi;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1669 xmlnode *instnode;
13616
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1670 char *instructions = NULL;
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1671 GaimRequestFields *fields;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1672 GaimRequestFieldGroup *group;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1673 GaimRequestField *field;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1674
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1675 /* old skool */
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1676 fields = gaim_request_fields_new();
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1677 group = gaim_request_field_group_new(NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1678 gaim_request_fields_add_group(fields, group);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1679
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1680 if((instnode = xmlnode_get_child(query, "instructions")))
13573
0b2e4a5a8e79 [gaim-migrate @ 15952]
Richard Laager <rlaager@wiktel.com>
parents: 13571
diff changeset
1681 {
0b2e4a5a8e79 [gaim-migrate @ 15952]
Richard Laager <rlaager@wiktel.com>
parents: 13571
diff changeset
1682 char *tmp = xmlnode_get_data(instnode);
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1683
13616
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1684 if(tmp)
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1685 {
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1686 /* Try to translate the message (see static message
13616
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1687 list in jabber_user_dir_comments[]) */
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1688 instructions = g_strdup_printf(_("Server Instructions: %s"), _(tmp));
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1689 g_free(tmp);
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1690 }
13573
0b2e4a5a8e79 [gaim-migrate @ 15952]
Richard Laager <rlaager@wiktel.com>
parents: 13571
diff changeset
1691 }
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1692
13616
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1693 if(!instructions)
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1694 {
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1695 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
1696 "for any matching Jabber users."));
ee7f92a706ac [gaim-migrate @ 16002]
Richard Laager <rlaager@wiktel.com>
parents: 13573
diff changeset
1697 }
11675
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1698
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1699 if(xmlnode_get_child(query, "first")) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1700 field = gaim_request_field_string_new("first", _("First Name"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1701 NULL, FALSE);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1702 gaim_request_field_group_add_field(group, field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1703 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1704 if(xmlnode_get_child(query, "last")) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1705 field = gaim_request_field_string_new("last", _("Last Name"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1706 NULL, FALSE);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1707 gaim_request_field_group_add_field(group, field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1708 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1709 if(xmlnode_get_child(query, "nick")) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1710 field = gaim_request_field_string_new("nick", _("Nickname"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1711 NULL, FALSE);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1712 gaim_request_field_group_add_field(group, field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1713 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1714 if(xmlnode_get_child(query, "email")) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1715 field = gaim_request_field_string_new("email", _("E-Mail Address"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1716 NULL, FALSE);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1717 gaim_request_field_group_add_field(group, field);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1718 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1719
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1720 usi = g_new0(struct user_search_info, 1);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1721 usi->js = js;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1722 usi->directory_server = g_strdup(from);
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 gaim_request_fields(js->gc, _("Search for Jabber users"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1725 _("Search for Jabber users"), instructions, fields,
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1726 _("Search"), G_CALLBACK(user_search_cb),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1727 _("Cancel"), G_CALLBACK(user_search_cancel_cb), usi);
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 g_free(instructions);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1730 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1731 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1732
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1733 static void jabber_user_search_ok(JabberStream *js, const char *directory)
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 JabberIq *iq;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1736
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1737 /* XXX: should probably better validate the directory we're given */
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1738 if(!directory || !*directory) {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1739 gaim_notify_error(js->gc, _("Invalid Directory"), _("Invalid Directory"), NULL);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1740 return;
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 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
1744 xmlnode_set_attrib(iq->node, "to", directory);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1745
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1746 jabber_iq_set_callback(iq, user_search_fields_result_cb, NULL);
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 jabber_iq_send(iq);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1749 }
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1750
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1751 void jabber_user_search_begin(GaimPluginAction *action)
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1752 {
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1753 GaimConnection *gc = (GaimConnection *) action->context;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1754 JabberStream *js = gc->proto_data;
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1755
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1756 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
1757 _("Select a user directory to search"),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1758 js->user_directories ? js->user_directories->data : "users.jabber.org",
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1759 FALSE, FALSE, NULL,
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1760 _("Search Directory"), GAIM_CALLBACK(jabber_user_search_ok),
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1761 _("Cancel"), NULL, js);
828802f2251b [gaim-migrate @ 13961]
Nathan Walp <nwalp@pidgin.im>
parents: 11540
diff changeset
1762 }
13792
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1763
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1764
02c7d18f5cc3 [gaim-migrate @ 16204]
Nathan Walp <nwalp@pidgin.im>
parents: 13785
diff changeset
1765