annotate src/protocols/jabber/buddy.c @ 13967:99b9b58b19dd

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