Mercurial > pidgin.yaz
annotate libgaim/protocols/msn/userlist.c @ 20397:6ac7e33fdabf
propagate from branch 'im.pidgin.rlaager.merging.msnp13-and-sf-1621854-1-rlaager-whitespace' (head 5083cfbc09503360bacf3ff0ebf528700770e6af)
to branch 'im.pidgin.rlaager.merging.msnp13-and-sf-1621854-4-rlaager-whitespace' (head 4d82c29e56bd33cd6f94302e343dfeb5d68ab3eb)
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Sun, 15 Apr 2007 03:04:05 +0000 |
parents | 9ba7dee775e1 9755b2f7bb0f |
children |
rev | line source |
---|---|
14192 | 1 /** |
2 * @file userlist.c MSN user list support | |
3 * | |
4 * gaim | |
5 * | |
6 * Gaim is the legal property of its developers, whose names are too numerous | |
7 * to list here. Please refer to the COPYRIGHT file distributed with this | |
8 * source distribution. | |
9 * | |
10 * This program is free software; you can redistribute it and/or modify | |
11 * it under the terms of the GNU General Public License as published by | |
12 * the Free Software Foundation; either version 2 of the License, or | |
13 * (at your option) any later version. | |
14 * | |
15 * This program is distributed in the hope that it will be useful, | |
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 * GNU General Public License for more details. | |
19 * | |
20 * You should have received a copy of the GNU General Public License | |
21 * along with this program; if not, write to the Free Software | |
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
23 */ | |
24 #include "msn.h" | |
25 #include "userlist.h" | |
26 | |
27 const char *lists[] = { "FL", "AL", "BL", "RL" }; | |
28 | |
29 typedef struct | |
30 { | |
31 GaimConnection *gc; | |
32 char *who; | |
33 char *friendly; | |
34 | |
35 } MsnPermitAdd; | |
36 | |
37 /************************************************************************** | |
38 * Callbacks | |
39 **************************************************************************/ | |
40 static void | |
41 msn_accept_add_cb(MsnPermitAdd *pa) | |
42 { | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
43 MsnSession *session = pa->gc->proto_data; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
44 MsnUserList *userlist = session->userlist; |
14192 | 45 |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
46 msn_userlist_add_buddy(userlist, pa->who, MSN_LIST_AL, NULL); |
14192 | 47 |
48 g_free(pa->who); | |
49 g_free(pa->friendly); | |
50 g_free(pa); | |
51 } | |
52 | |
53 static void | |
54 msn_cancel_add_cb(MsnPermitAdd *pa) | |
55 { | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
56 if (g_list_find(gaim_connections_get_all(), pa->gc) != NULL) |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
57 { |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
58 MsnSession *session = pa->gc->proto_data; |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
59 MsnUserList *userlist = session->userlist; |
14192 | 60 |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
61 msn_userlist_add_buddy(userlist, pa->who, MSN_LIST_BL, NULL); |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
62 } |
14192 | 63 |
64 g_free(pa->who); | |
65 g_free(pa->friendly); | |
66 g_free(pa); | |
67 } | |
68 | |
69 static void | |
70 got_new_entry(GaimConnection *gc, const char *passport, const char *friendly) | |
71 { | |
72 MsnPermitAdd *pa; | |
73 | |
74 pa = g_new0(MsnPermitAdd, 1); | |
75 pa->who = g_strdup(passport); | |
76 pa->friendly = g_strdup(friendly); | |
77 pa->gc = gc; | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
78 |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
79 gaim_account_request_authorization(gaim_connection_get_account(gc), passport, NULL, friendly, NULL, |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
80 gaim_find_buddy(gaim_connection_get_account(gc), passport) != NULL, |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
81 G_CALLBACK(msn_accept_add_cb), G_CALLBACK(msn_cancel_add_cb), pa); |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
82 |
14192 | 83 } |
84 | |
85 /************************************************************************** | |
86 * Utility functions | |
87 **************************************************************************/ | |
88 | |
89 static gboolean | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
90 user_is_in_group(MsnUser *user, const char * group_id) |
14192 | 91 { |
92 if (user == NULL) | |
93 return FALSE; | |
94 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
95 if (group_id == NULL) |
14192 | 96 return FALSE; |
97 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
98 if (g_list_find(user->group_ids, group_id)) |
14192 | 99 return TRUE; |
100 | |
101 return FALSE; | |
102 } | |
103 | |
104 static gboolean | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
105 user_is_there(MsnUser *user, int list_id, const char * group_id) |
14192 | 106 { |
107 int list_op; | |
108 | |
109 if (user == NULL) | |
110 return FALSE; | |
111 | |
112 list_op = 1 << list_id; | |
113 | |
114 if (!(user->list_op & list_op)) | |
115 return FALSE; | |
116 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
117 if (list_id == MSN_LIST_FL){ |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
118 if (group_id != NULL) |
14192 | 119 return user_is_in_group(user, group_id); |
120 } | |
121 | |
122 return TRUE; | |
123 } | |
124 | |
125 static const char* | |
126 get_store_name(MsnUser *user) | |
127 { | |
128 const char *store_name; | |
129 | |
130 g_return_val_if_fail(user != NULL, NULL); | |
131 | |
132 store_name = msn_user_get_store_name(user); | |
133 | |
134 if (store_name != NULL) | |
135 store_name = gaim_url_encode(store_name); | |
136 else | |
137 store_name = msn_user_get_passport(user); | |
138 | |
139 /* this might be a bit of a hack, but it should prevent notification server | |
140 * disconnections for people who have buddies with insane friendly names | |
141 * who added you to their buddy list from being disconnected. Stu. */ | |
142 /* Shx: What? Isn't the store_name obtained from the server, and hence it's | |
143 * below the BUDDY_ALIAS_MAXLEN ? */ | |
144 /* Stu: yeah, that's why it's a bit of a hack, as you pointed out, we're | |
145 * probably decoding the incoming store_name wrong, or something. bleh. */ | |
146 | |
147 if (strlen(store_name) > BUDDY_ALIAS_MAXLEN) | |
148 store_name = msn_user_get_passport(user); | |
149 | |
150 return store_name; | |
151 } | |
152 | |
153 static void | |
154 msn_request_add_group(MsnUserList *userlist, const char *who, | |
155 const char *old_group_name, const char *new_group_name) | |
156 { | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
157 MsnSession *session; |
14192 | 158 MsnCmdProc *cmdproc; |
159 MsnMoveBuddy *data; | |
160 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
161 session = userlist->session; |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
162 cmdproc = session->notification->cmdproc; |
14192 | 163 data = g_new0(MsnMoveBuddy, 1); |
164 | |
165 data->who = g_strdup(who); | |
166 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
167 if (old_group_name){ |
14192 | 168 data->old_group_name = g_strdup(old_group_name); |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
169 /*delete the old group via SOAP action*/ |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
170 msn_del_group(session,old_group_name); |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
171 } |
14192 | 172 |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
173 /*add new group via SOAP action*/ |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
174 msn_add_group(session, new_group_name); |
14192 | 175 |
176 } | |
177 | |
178 /************************************************************************** | |
179 * Server functions | |
180 **************************************************************************/ | |
181 | |
182 MsnListId | |
183 msn_get_list_id(const char *list) | |
184 { | |
185 if (list[0] == 'F') | |
186 return MSN_LIST_FL; | |
187 else if (list[0] == 'A') | |
188 return MSN_LIST_AL; | |
189 else if (list[0] == 'B') | |
190 return MSN_LIST_BL; | |
191 else if (list[0] == 'R') | |
192 return MSN_LIST_RL; | |
193 | |
194 return -1; | |
195 } | |
196 | |
197 void | |
198 msn_got_add_user(MsnSession *session, MsnUser *user, | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
199 MsnListId list_id, const char * group_id) |
14192 | 200 { |
201 GaimAccount *account; | |
202 const char *passport; | |
203 const char *friendly; | |
204 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
205 gaim_debug_info("MaYuan","got add user...\n"); |
14192 | 206 account = session->account; |
207 | |
208 passport = msn_user_get_passport(user); | |
209 friendly = msn_user_get_friendly_name(user); | |
210 | |
211 if (list_id == MSN_LIST_FL) | |
212 { | |
213 GaimConnection *gc; | |
214 | |
215 gc = gaim_account_get_connection(account); | |
216 | |
217 serv_got_alias(gc, passport, friendly); | |
218 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
219 if (group_id != NULL) |
14192 | 220 { |
221 msn_user_add_group_id(user, group_id); | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
222 }else{ |
14192 | 223 /* session->sync->fl_users_count++; */ |
224 } | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
225 } |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
226 else if (list_id == MSN_LIST_AL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
227 { |
14192 | 228 gaim_privacy_permit_add(account, passport, TRUE); |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
229 } |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
230 else if (list_id == MSN_LIST_BL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
231 { |
14192 | 232 gaim_privacy_deny_add(account, passport, TRUE); |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
233 } |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
234 else if (list_id == MSN_LIST_RL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
235 { |
14192 | 236 GaimConnection *gc; |
237 GaimConversation *convo; | |
238 | |
239 gc = gaim_account_get_connection(account); | |
240 | |
241 gaim_debug_info("msn", | |
242 "%s has added you to his or her buddy list.\n", | |
243 passport); | |
244 | |
245 convo = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, passport, account); | |
246 if (convo) { | |
247 GaimBuddy *buddy; | |
248 char *msg; | |
249 | |
250 buddy = gaim_find_buddy(account, passport); | |
251 msg = g_strdup_printf( | |
252 _("%s has added you to his or her buddy list."), | |
253 buddy ? gaim_buddy_get_contact_alias(buddy) : passport); | |
254 gaim_conv_im_write(GAIM_CONV_IM(convo), passport, msg, | |
255 GAIM_MESSAGE_SYSTEM, time(NULL)); | |
256 g_free(msg); | |
257 } | |
258 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
259 if (!(user->list_op & (MSN_LIST_AL_OP | MSN_LIST_BL_OP))){ |
14192 | 260 /* |
261 * TODO: The friendly name was NULL for me when I | |
262 * looked at this. Maybe we should use the store | |
263 * name instead? --KingAnt | |
264 */ | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
265 // got_new_entry(gc, passport, friendly); |
14192 | 266 } |
267 } | |
268 | |
269 user->list_op |= (1 << list_id); | |
270 /* gaim_user_add_list_id (user, list_id); */ | |
271 } | |
272 | |
273 void | |
274 msn_got_rem_user(MsnSession *session, MsnUser *user, | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
275 MsnListId list_id, const char * group_id) |
14192 | 276 { |
277 GaimAccount *account; | |
278 const char *passport; | |
279 | |
280 account = session->account; | |
281 | |
282 passport = msn_user_get_passport(user); | |
283 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
284 if (list_id == MSN_LIST_FL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
285 { |
14192 | 286 /* TODO: When is the user totally removed? */ |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
287 if (group_id != NULL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
288 { |
14192 | 289 msn_user_remove_group_id(user, group_id); |
290 return; | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
291 } |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
292 else |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
293 { |
14192 | 294 /* session->sync->fl_users_count--; */ |
295 } | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
296 } |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
297 else if (list_id == MSN_LIST_AL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
298 { |
14192 | 299 gaim_privacy_permit_remove(account, passport, TRUE); |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
300 } |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
301 else if (list_id == MSN_LIST_BL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
302 { |
14192 | 303 gaim_privacy_deny_remove(account, passport, TRUE); |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
304 } |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
305 else if (list_id == MSN_LIST_RL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
306 { |
14192 | 307 GaimConversation *convo; |
308 | |
309 gaim_debug_info("msn", | |
310 "%s has removed you from his or her buddy list.\n", | |
311 passport); | |
312 | |
313 convo = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, passport, account); | |
314 if (convo) { | |
315 GaimBuddy *buddy; | |
316 char *msg; | |
317 | |
318 buddy = gaim_find_buddy(account, passport); | |
319 msg = g_strdup_printf( | |
320 _("%s has removed you from his or her buddy list."), | |
321 buddy ? gaim_buddy_get_contact_alias(buddy) : passport); | |
322 gaim_conv_im_write(GAIM_CONV_IM(convo), passport, msg, | |
323 GAIM_MESSAGE_SYSTEM, time(NULL)); | |
324 g_free(msg); | |
325 } | |
326 } | |
327 | |
328 user->list_op &= ~(1 << list_id); | |
329 /* gaim_user_remove_list_id (user, list_id); */ | |
330 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
331 if (user->list_op == 0){ |
14192 | 332 gaim_debug_info("msn", "Buddy '%s' shall be deleted?.\n", |
333 passport); | |
334 } | |
335 } | |
336 | |
337 void | |
338 msn_got_lst_user(MsnSession *session, MsnUser *user, | |
339 int list_op, GSList *group_ids) | |
340 { | |
341 GaimConnection *gc; | |
342 GaimAccount *account; | |
343 const char *passport; | |
344 const char *store; | |
345 | |
346 account = session->account; | |
347 gc = gaim_account_get_connection(account); | |
348 | |
349 passport = msn_user_get_passport(user); | |
350 store = msn_user_get_store_name(user); | |
351 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
352 if (list_op & MSN_LIST_FL_OP) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
353 { |
14192 | 354 GSList *c; |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
355 for (c = group_ids; c != NULL; c = g_slist_next(c)) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
356 { |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
357 char *group_id; |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
358 group_id = c->data; |
14192 | 359 msn_user_add_group_id(user, group_id); |
360 } | |
361 | |
362 /* FIXME: It might be a real alias */ | |
363 /* Umm, what? This might fix bug #1385130 */ | |
364 serv_got_alias(gc, passport, store); | |
365 } | |
366 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
367 if (list_op & MSN_LIST_AL_OP) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
368 { |
14192 | 369 /* These are users who are allowed to see our status. */ |
370 gaim_privacy_deny_remove(account, passport, TRUE); | |
371 gaim_privacy_permit_add(account, passport, TRUE); | |
372 } | |
373 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
374 if (list_op & MSN_LIST_BL_OP) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
375 { |
14192 | 376 /* These are users who are not allowed to see our status. */ |
377 gaim_privacy_permit_remove(account, passport, TRUE); | |
378 gaim_privacy_deny_add(account, passport, TRUE); | |
379 } | |
380 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
381 if (list_op & MSN_LIST_RL_OP) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
382 { |
14192 | 383 /* These are users who have us on their buddy list. */ |
384 /* | |
385 * TODO: What is store name set to when this happens? | |
386 * For one of my accounts "something@hotmail.com" | |
387 * the store name was "something." Maybe we | |
388 * should use the friendly name, instead? --KingAnt | |
389 */ | |
390 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
391 if (!(list_op & (MSN_LIST_AL_OP | MSN_LIST_BL_OP))) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
392 { |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
393 // got_new_entry(gc, passport, store); |
14192 | 394 } |
395 } | |
396 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
397 user->list_op |= list_op; |
14192 | 398 } |
399 | |
400 /************************************************************************** | |
401 * UserList functions | |
402 **************************************************************************/ | |
403 | |
404 MsnUserList* | |
405 msn_userlist_new(MsnSession *session) | |
406 { | |
407 MsnUserList *userlist; | |
408 | |
409 userlist = g_new0(MsnUserList, 1); | |
410 | |
411 userlist->session = session; | |
412 userlist->buddy_icon_requests = g_queue_new(); | |
413 | |
414 /* buddy_icon_window is the number of allowed simultaneous buddy icon requests. | |
415 * XXX With smarter rate limiting code, we could allow more at once... 5 was the limit set when | |
416 * we weren't retrieiving any more than 5 per MSN session. */ | |
417 userlist->buddy_icon_window = 1; | |
418 | |
419 return userlist; | |
420 } | |
421 | |
422 void | |
423 msn_userlist_destroy(MsnUserList *userlist) | |
424 { | |
425 GList *l; | |
426 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
427 /*destroy userlist*/ |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
428 for (l = userlist->users; l != NULL; l = l->next) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
429 { |
14192 | 430 msn_user_destroy(l->data); |
431 } | |
432 g_list_free(userlist->users); | |
433 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
434 /*destroy group list*/ |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
435 for (l = userlist->groups; l != NULL; l = l->next) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
436 { |
14192 | 437 msn_group_destroy(l->data); |
438 } | |
439 g_list_free(userlist->groups); | |
440 | |
441 g_queue_free(userlist->buddy_icon_requests); | |
442 | |
443 if (userlist->buddy_icon_request_timer) | |
444 gaim_timeout_remove(userlist->buddy_icon_request_timer); | |
445 | |
446 g_free(userlist); | |
447 } | |
448 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
449 MsnUser * |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
450 msn_userlist_find_add_user(MsnUserList *userlist,const char *passport,const char *userName) |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
451 { |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
452 MsnUser *user; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
453 |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
454 user = msn_userlist_find_user(userlist, passport); |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
455 if (user == NULL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
456 { |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
457 user = msn_user_new(userlist, passport, userName); |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
458 msn_userlist_add_user(userlist, user); |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
459 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
460 msn_user_set_store_name(user, userName); |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
461 return user; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
462 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
463 |
14192 | 464 void |
465 msn_userlist_add_user(MsnUserList *userlist, MsnUser *user) | |
466 { | |
467 userlist->users = g_list_append(userlist->users, user); | |
468 } | |
469 | |
470 void | |
471 msn_userlist_remove_user(MsnUserList *userlist, MsnUser *user) | |
472 { | |
473 userlist->users = g_list_remove(userlist->users, user); | |
474 } | |
475 | |
476 MsnUser * | |
477 msn_userlist_find_user(MsnUserList *userlist, const char *passport) | |
478 { | |
479 GList *l; | |
480 | |
481 g_return_val_if_fail(passport != NULL, NULL); | |
482 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
483 for (l = userlist->users; l != NULL; l = l->next) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
484 { |
14192 | 485 MsnUser *user = (MsnUser *)l->data; |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
486 // gaim_debug_info("MsnUserList","user passport:%s,passport:%s\n",user->passport,passport); |
14192 | 487 g_return_val_if_fail(user->passport != NULL, NULL); |
488 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
489 if (!g_strcasecmp(passport, user->passport)) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
490 { |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
491 // gaim_debug_info("MsnUserList","return:%p\n",user); |
14192 | 492 return user; |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
493 } |
14192 | 494 } |
495 | |
496 return NULL; | |
497 } | |
498 | |
499 void | |
500 msn_userlist_add_group(MsnUserList *userlist, MsnGroup *group) | |
501 { | |
502 userlist->groups = g_list_append(userlist->groups, group); | |
503 } | |
504 | |
505 void | |
506 msn_userlist_remove_group(MsnUserList *userlist, MsnGroup *group) | |
507 { | |
508 userlist->groups = g_list_remove(userlist->groups, group); | |
509 } | |
510 | |
511 MsnGroup * | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
512 msn_userlist_find_group_with_id(MsnUserList *userlist, const char * id) |
14192 | 513 { |
514 GList *l; | |
515 | |
516 g_return_val_if_fail(userlist != NULL, NULL); | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
517 g_return_val_if_fail(id != NULL, NULL); |
14192 | 518 |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
519 for (l = userlist->groups; l != NULL; l = l->next) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
520 { |
14192 | 521 MsnGroup *group = l->data; |
522 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
523 if (!g_strcasecmp(group->id, id)) |
14192 | 524 return group; |
525 } | |
526 | |
527 return NULL; | |
528 } | |
529 | |
530 MsnGroup * | |
531 msn_userlist_find_group_with_name(MsnUserList *userlist, const char *name) | |
532 { | |
533 GList *l; | |
534 | |
535 g_return_val_if_fail(userlist != NULL, NULL); | |
536 g_return_val_if_fail(name != NULL, NULL); | |
537 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
538 for (l = userlist->groups; l != NULL; l = l->next) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
539 { |
14192 | 540 MsnGroup *group = l->data; |
541 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
542 if ((group->name != NULL) && !g_strcasecmp(name, group->name)) |
14192 | 543 return group; |
544 } | |
545 | |
546 return NULL; | |
547 } | |
548 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
549 const char * |
14192 | 550 msn_userlist_find_group_id(MsnUserList *userlist, const char *group_name) |
551 { | |
552 MsnGroup *group; | |
553 | |
554 group = msn_userlist_find_group_with_name(userlist, group_name); | |
555 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
556 if (group != NULL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
557 { |
14192 | 558 return msn_group_get_id(group); |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
559 } |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
560 else |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
561 { |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
562 return NULL; |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
563 } |
14192 | 564 } |
565 | |
566 const char * | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
567 msn_userlist_find_group_name(MsnUserList *userlist, const char * group_id) |
14192 | 568 { |
569 MsnGroup *group; | |
570 | |
571 group = msn_userlist_find_group_with_id(userlist, group_id); | |
572 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
573 if (group != NULL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
574 { |
14192 | 575 return msn_group_get_name(group); |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
576 } |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
577 else |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
578 { |
14192 | 579 return NULL; |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
580 } |
14192 | 581 } |
582 | |
583 void | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
584 msn_userlist_rename_group_id(MsnUserList *userlist, const char * group_id, |
14192 | 585 const char *new_name) |
586 { | |
587 MsnGroup *group; | |
588 | |
589 group = msn_userlist_find_group_with_id(userlist, group_id); | |
590 | |
591 if (group != NULL) | |
592 msn_group_set_name(group, new_name); | |
593 } | |
594 | |
595 void | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
596 msn_userlist_remove_group_id(MsnUserList *userlist, const char * group_id) |
14192 | 597 { |
598 MsnGroup *group; | |
599 | |
600 group = msn_userlist_find_group_with_id(userlist, group_id); | |
601 | |
602 if (group != NULL) | |
603 { | |
604 msn_userlist_remove_group(userlist, group); | |
605 msn_group_destroy(group); | |
606 } | |
607 } | |
608 | |
609 void | |
610 msn_userlist_rem_buddy(MsnUserList *userlist, | |
611 const char *who, int list_id, const char *group_name) | |
612 { | |
613 MsnUser *user; | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
614 const char *group_id; |
14192 | 615 const char *list; |
616 | |
617 user = msn_userlist_find_user(userlist, who); | |
618 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
619 g_return_if_fail(user != NULL); |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
620 |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
621 /*delete the contact from address book via soap action*/ |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
622 msn_delete_contact(userlist->session->contact,user->uid); |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
623 |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
624 group_id = NULL; |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
625 |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
626 if (group_name != NULL){ |
14192 | 627 group_id = msn_userlist_find_group_id(userlist, group_name); |
628 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
629 if (group_id == NULL){ |
14192 | 630 /* Whoa, there is no such group. */ |
631 gaim_debug_error("msn", "Group doesn't exist: %s\n", group_name); | |
632 return; | |
633 } | |
634 } | |
635 | |
636 /* First we're going to check if not there. */ | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
637 if (!(user_is_there(user, list_id, group_id))) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
638 { |
14192 | 639 list = lists[list_id]; |
640 gaim_debug_error("msn", "User '%s' is not there: %s\n", | |
641 who, list); | |
642 return; | |
643 } | |
644 | |
645 /* Then request the rem to the server. */ | |
646 list = lists[list_id]; | |
647 | |
648 msn_notification_rem_buddy(userlist->session->notification, list, who, group_id); | |
649 } | |
650 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
651 /*add buddy*/ |
14192 | 652 void |
653 msn_userlist_add_buddy(MsnUserList *userlist, | |
654 const char *who, int list_id, | |
655 const char *group_name) | |
656 { | |
657 MsnUser *user; | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
658 const char *group_id; |
14192 | 659 const char *list; |
660 const char *store_name; | |
661 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
662 gaim_debug_info("MaYuan", "userlist add buddy,name:{%s},group:{%s}\n",who ,group_name); |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
663 group_id = NULL; |
14192 | 664 |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
665 if (!gaim_email_is_valid(who)) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
666 { |
14192 | 667 /* only notify the user about problems adding to the friends list |
668 * maybe we should do something else for other lists, but it probably | |
669 * won't cause too many problems if we just ignore it */ | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
670 if (list_id == MSN_LIST_FL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
671 { |
14192 | 672 char *str = g_strdup_printf(_("Unable to add \"%s\"."), who); |
673 gaim_notify_error(NULL, NULL, str, | |
674 _("The screen name specified is invalid.")); | |
675 g_free(str); | |
676 } | |
677 | |
678 return; | |
679 } | |
680 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
681 if (group_name != NULL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
682 { |
14192 | 683 group_id = msn_userlist_find_group_id(userlist, group_name); |
684 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
685 if (group_id == NULL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
686 { |
14192 | 687 /* Whoa, we must add that group first. */ |
688 msn_request_add_group(userlist, who, NULL, group_name); | |
689 return; | |
690 } | |
691 } | |
692 | |
693 user = msn_userlist_find_user(userlist, who); | |
694 | |
695 /* First we're going to check if it's already there. */ | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
696 if (user_is_there(user, list_id, group_id)) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
697 { |
14192 | 698 list = lists[list_id]; |
699 gaim_debug_error("msn", "User '%s' is already there: %s\n", who, list); | |
700 return; | |
701 } | |
702 | |
703 store_name = (user != NULL) ? get_store_name(user) : who; | |
704 | |
705 /* Then request the add to the server. */ | |
706 list = lists[list_id]; | |
707 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
708 gaim_debug_info("MaYuan", "add user:{%s} to group id {%s}\n",store_name ,group_id); |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
709 msn_add_contact(userlist->session->contact,who,group_id); |
14192 | 710 msn_notification_add_buddy(userlist->session->notification, list, who, |
711 store_name, group_id); | |
712 } | |
713 | |
714 void | |
715 msn_userlist_move_buddy(MsnUserList *userlist, const char *who, | |
716 const char *old_group_name, const char *new_group_name) | |
717 { | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
718 const char *new_group_id; |
14192 | 719 |
720 new_group_id = msn_userlist_find_group_id(userlist, new_group_name); | |
721 | |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
722 if (new_group_id == NULL) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
723 { |
14192 | 724 msn_request_add_group(userlist, who, old_group_name, new_group_name); |
725 return; | |
726 } | |
727 | |
728 msn_userlist_add_buddy(userlist, who, MSN_LIST_FL, new_group_name); | |
729 msn_userlist_rem_buddy(userlist, who, MSN_LIST_FL, old_group_name); | |
730 } | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
731 |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
732 /*load userlist from the Blist file cache*/ |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
733 void |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
734 msn_userlist_load(MsnSession *session) |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
735 { |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
736 GaimBlistNode *gnode, *cnode, *bnode; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
737 GaimConnection *gc = gaim_account_get_connection(session->account); |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
738 GSList *l; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
739 MsnUser * user; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
740 |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
741 g_return_if_fail(gc != NULL); |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
742 |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
743 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
744 { |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
745 if (!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
746 continue; |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
747 for (cnode = gnode->child; cnode; cnode = cnode->next) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
748 { |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
749 if (!GAIM_BLIST_NODE_IS_CONTACT(cnode)) |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
750 continue; |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
751 for (bnode = cnode->child; bnode; bnode = bnode->next) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
752 { |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
753 GaimBuddy *b; |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
754 if (!GAIM_BLIST_NODE_IS_BUDDY(bnode)) |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
755 continue; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
756 b = (GaimBuddy *)bnode; |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
757 if (b->account == gc->account) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
758 { |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
759 user = msn_userlist_find_add_user(session->userlist, |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
760 b->name,NULL); |
20392
9ba7dee775e1
The first msn-p13-merge-head.diff.gz from SF Patch #1621854 from Ka-Hing Cheung.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
761 b->proto_data = user; |
9ba7dee775e1
The first msn-p13-merge-head.diff.gz from SF Patch #1621854 from Ka-Hing Cheung.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
762 msn_user_set_op(user, MSN_LIST_FL_OP); |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
763 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
764 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
765 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
766 } |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
767 for (l = session->account->permit; l != NULL; l = l->next) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
768 { |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
769 user = msn_userlist_find_add_user(session->userlist, |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
770 (char *)l->data,NULL); |
20392
9ba7dee775e1
The first msn-p13-merge-head.diff.gz from SF Patch #1621854 from Ka-Hing Cheung.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
771 msn_user_set_op(user, MSN_LIST_AL_OP); |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
772 } |
20396
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
773 for (l = session->account->deny; l != NULL; l = l->next) |
9755b2f7bb0f
Revert some whitespace changes.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
774 { |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
775 user = msn_userlist_find_add_user(session->userlist, |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
776 (char *)l->data,NULL); |
20392
9ba7dee775e1
The first msn-p13-merge-head.diff.gz from SF Patch #1621854 from Ka-Hing Cheung.
Richard Laager <rlaager@wiktel.com>
parents:
20390
diff
changeset
|
777 msn_user_set_op(user, MSN_LIST_BL_OP); |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
778 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
779 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
780 |