Mercurial > pidgin.yaz
annotate libgaim/protocols/msn/userlist.c @ 20390:d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
"This tarball brings soc-2006-msnp13 up to head. In addition to that it also
fixes a crash with sending offline messages.
I wasn't able to generate a diff against that branch, svn seems to insist
on diff'ing against HEAD after I run the merge command. After running `svn
merge -r 16309:HEAD https://gaim.svn.sourceforge.net/svnroot/gaim/trunk` on
the soc-2006-msnp13 you can replace the msn directory with the attached
tarball. The fix for offline messaging is on msn.c:901:
if (!session->oim)
session->oim = msn_oim_new(session)"
committer: Richard Laager <rlaager@wiktel.com>
author | Ka-Hing Cheung <khc@hxbc.us> |
---|---|
date | Sun, 15 Apr 2007 02:18:17 +0000 |
parents | e354528c4163 |
children | 9ba7dee775e1 9755b2f7bb0f |
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 } | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
225 }else if (list_id == MSN_LIST_AL){ |
14192 | 226 gaim_privacy_permit_add(account, passport, TRUE); |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
227 }else if (list_id == MSN_LIST_BL){ |
14192 | 228 gaim_privacy_deny_add(account, passport, TRUE); |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
229 }else if (list_id == MSN_LIST_RL){ |
14192 | 230 GaimConnection *gc; |
231 GaimConversation *convo; | |
232 | |
233 gc = gaim_account_get_connection(account); | |
234 | |
235 gaim_debug_info("msn", | |
236 "%s has added you to his or her buddy list.\n", | |
237 passport); | |
238 | |
239 convo = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, passport, account); | |
240 if (convo) { | |
241 GaimBuddy *buddy; | |
242 char *msg; | |
243 | |
244 buddy = gaim_find_buddy(account, passport); | |
245 msg = g_strdup_printf( | |
246 _("%s has added you to his or her buddy list."), | |
247 buddy ? gaim_buddy_get_contact_alias(buddy) : passport); | |
248 gaim_conv_im_write(GAIM_CONV_IM(convo), passport, msg, | |
249 GAIM_MESSAGE_SYSTEM, time(NULL)); | |
250 g_free(msg); | |
251 } | |
252 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
253 if (!(user->list_op & (MSN_LIST_AL_OP | MSN_LIST_BL_OP))){ |
14192 | 254 /* |
255 * TODO: The friendly name was NULL for me when I | |
256 * looked at this. Maybe we should use the store | |
257 * name instead? --KingAnt | |
258 */ | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
259 // got_new_entry(gc, passport, friendly); |
14192 | 260 } |
261 } | |
262 | |
263 user->list_op |= (1 << list_id); | |
264 /* gaim_user_add_list_id (user, list_id); */ | |
265 } | |
266 | |
267 void | |
268 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
|
269 MsnListId list_id, const char * group_id) |
14192 | 270 { |
271 GaimAccount *account; | |
272 const char *passport; | |
273 | |
274 account = session->account; | |
275 | |
276 passport = msn_user_get_passport(user); | |
277 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
278 if (list_id == MSN_LIST_FL){ |
14192 | 279 /* TODO: When is the user totally removed? */ |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
280 if (group_id != NULL){ |
14192 | 281 msn_user_remove_group_id(user, group_id); |
282 return; | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
283 }else{ |
14192 | 284 /* session->sync->fl_users_count--; */ |
285 } | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
286 }else if (list_id == MSN_LIST_AL){ |
14192 | 287 gaim_privacy_permit_remove(account, passport, TRUE); |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
288 }else if (list_id == MSN_LIST_BL){ |
14192 | 289 gaim_privacy_deny_remove(account, passport, TRUE); |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
290 }else if (list_id == MSN_LIST_RL){ |
14192 | 291 GaimConversation *convo; |
292 | |
293 gaim_debug_info("msn", | |
294 "%s has removed you from his or her buddy list.\n", | |
295 passport); | |
296 | |
297 convo = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, passport, account); | |
298 if (convo) { | |
299 GaimBuddy *buddy; | |
300 char *msg; | |
301 | |
302 buddy = gaim_find_buddy(account, passport); | |
303 msg = g_strdup_printf( | |
304 _("%s has removed you from his or her buddy list."), | |
305 buddy ? gaim_buddy_get_contact_alias(buddy) : passport); | |
306 gaim_conv_im_write(GAIM_CONV_IM(convo), passport, msg, | |
307 GAIM_MESSAGE_SYSTEM, time(NULL)); | |
308 g_free(msg); | |
309 } | |
310 } | |
311 | |
312 user->list_op &= ~(1 << list_id); | |
313 /* gaim_user_remove_list_id (user, list_id); */ | |
314 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
315 if (user->list_op == 0){ |
14192 | 316 gaim_debug_info("msn", "Buddy '%s' shall be deleted?.\n", |
317 passport); | |
318 } | |
319 } | |
320 | |
321 void | |
322 msn_got_lst_user(MsnSession *session, MsnUser *user, | |
323 int list_op, GSList *group_ids) | |
324 { | |
325 GaimConnection *gc; | |
326 GaimAccount *account; | |
327 const char *passport; | |
328 const char *store; | |
329 | |
330 account = session->account; | |
331 gc = gaim_account_get_connection(account); | |
332 | |
333 passport = msn_user_get_passport(user); | |
334 store = msn_user_get_store_name(user); | |
335 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
336 if (list_op & MSN_LIST_FL_OP){ |
14192 | 337 GSList *c; |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
338 for (c = group_ids; c != NULL; c = g_slist_next(c)) { |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
339 char *group_id; |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
340 group_id = c->data; |
14192 | 341 msn_user_add_group_id(user, group_id); |
342 } | |
343 | |
344 /* FIXME: It might be a real alias */ | |
345 /* Umm, what? This might fix bug #1385130 */ | |
346 serv_got_alias(gc, passport, store); | |
347 } | |
348 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
349 if (list_op & MSN_LIST_AL_OP){ |
14192 | 350 /* These are users who are allowed to see our status. */ |
351 gaim_privacy_deny_remove(account, passport, TRUE); | |
352 gaim_privacy_permit_add(account, passport, TRUE); | |
353 } | |
354 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
355 if (list_op & MSN_LIST_BL_OP){ |
14192 | 356 /* These are users who are not allowed to see our status. */ |
357 gaim_privacy_permit_remove(account, passport, TRUE); | |
358 gaim_privacy_deny_add(account, passport, TRUE); | |
359 } | |
360 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
361 if (list_op & MSN_LIST_RL_OP){ |
14192 | 362 /* These are users who have us on their buddy list. */ |
363 /* | |
364 * TODO: What is store name set to when this happens? | |
365 * For one of my accounts "something@hotmail.com" | |
366 * the store name was "something." Maybe we | |
367 * should use the friendly name, instead? --KingAnt | |
368 */ | |
369 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
370 if (!(list_op & (MSN_LIST_AL_OP | MSN_LIST_BL_OP))){ |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
371 // got_new_entry(gc, passport, store); |
14192 | 372 } |
373 } | |
374 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
375 user->list_op |= list_op; |
14192 | 376 } |
377 | |
378 /************************************************************************** | |
379 * UserList functions | |
380 **************************************************************************/ | |
381 | |
382 MsnUserList* | |
383 msn_userlist_new(MsnSession *session) | |
384 { | |
385 MsnUserList *userlist; | |
386 | |
387 userlist = g_new0(MsnUserList, 1); | |
388 | |
389 userlist->session = session; | |
390 userlist->buddy_icon_requests = g_queue_new(); | |
391 | |
392 /* buddy_icon_window is the number of allowed simultaneous buddy icon requests. | |
393 * XXX With smarter rate limiting code, we could allow more at once... 5 was the limit set when | |
394 * we weren't retrieiving any more than 5 per MSN session. */ | |
395 userlist->buddy_icon_window = 1; | |
396 | |
397 return userlist; | |
398 } | |
399 | |
400 void | |
401 msn_userlist_destroy(MsnUserList *userlist) | |
402 { | |
403 GList *l; | |
404 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
405 /*destroy userlist*/ |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
406 for (l = userlist->users; l != NULL; l = l->next){ |
14192 | 407 msn_user_destroy(l->data); |
408 } | |
409 g_list_free(userlist->users); | |
410 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
411 /*destroy group list*/ |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
412 for (l = userlist->groups; l != NULL; l = l->next){ |
14192 | 413 msn_group_destroy(l->data); |
414 } | |
415 g_list_free(userlist->groups); | |
416 | |
417 g_queue_free(userlist->buddy_icon_requests); | |
418 | |
419 if (userlist->buddy_icon_request_timer) | |
420 gaim_timeout_remove(userlist->buddy_icon_request_timer); | |
421 | |
422 g_free(userlist); | |
423 } | |
424 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
425 MsnUser * |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
426 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
|
427 { |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
428 MsnUser *user; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
429 |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
430 user = msn_userlist_find_user(userlist, passport); |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
431 if (user == NULL){ |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
432 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
|
433 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
|
434 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
435 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
|
436 return user; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
437 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
438 |
14192 | 439 void |
440 msn_userlist_add_user(MsnUserList *userlist, MsnUser *user) | |
441 { | |
442 userlist->users = g_list_append(userlist->users, user); | |
443 } | |
444 | |
445 void | |
446 msn_userlist_remove_user(MsnUserList *userlist, MsnUser *user) | |
447 { | |
448 userlist->users = g_list_remove(userlist->users, user); | |
449 } | |
450 | |
451 MsnUser * | |
452 msn_userlist_find_user(MsnUserList *userlist, const char *passport) | |
453 { | |
454 GList *l; | |
455 | |
456 g_return_val_if_fail(passport != NULL, NULL); | |
457 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
458 for (l = userlist->users; l != NULL; l = l->next){ |
14192 | 459 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
|
460 // gaim_debug_info("MsnUserList","user passport:%s,passport:%s\n",user->passport,passport); |
14192 | 461 g_return_val_if_fail(user->passport != NULL, NULL); |
462 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
463 if (!g_strcasecmp(passport, user->passport)){ |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
464 // gaim_debug_info("MsnUserList","return:%p\n",user); |
14192 | 465 return user; |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
466 } |
14192 | 467 } |
468 | |
469 return NULL; | |
470 } | |
471 | |
472 void | |
473 msn_userlist_add_group(MsnUserList *userlist, MsnGroup *group) | |
474 { | |
475 userlist->groups = g_list_append(userlist->groups, group); | |
476 } | |
477 | |
478 void | |
479 msn_userlist_remove_group(MsnUserList *userlist, MsnGroup *group) | |
480 { | |
481 userlist->groups = g_list_remove(userlist->groups, group); | |
482 } | |
483 | |
484 MsnGroup * | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
485 msn_userlist_find_group_with_id(MsnUserList *userlist, const char * id) |
14192 | 486 { |
487 GList *l; | |
488 | |
489 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
|
490 g_return_val_if_fail(id != NULL, NULL); |
14192 | 491 |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
492 for (l = userlist->groups; l != NULL; l = l->next){ |
14192 | 493 MsnGroup *group = l->data; |
494 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
495 if (!g_strcasecmp(group->id,id)) |
14192 | 496 return group; |
497 } | |
498 | |
499 return NULL; | |
500 } | |
501 | |
502 MsnGroup * | |
503 msn_userlist_find_group_with_name(MsnUserList *userlist, const char *name) | |
504 { | |
505 GList *l; | |
506 | |
507 g_return_val_if_fail(userlist != NULL, NULL); | |
508 g_return_val_if_fail(name != NULL, NULL); | |
509 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
510 for (l = userlist->groups; l != NULL; l = l->next){ |
14192 | 511 MsnGroup *group = l->data; |
512 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
513 if ((group->name != NULL) && !g_strcasecmp(name, group->name)) |
14192 | 514 return group; |
515 } | |
516 | |
517 return NULL; | |
518 } | |
519 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
520 const char * |
14192 | 521 msn_userlist_find_group_id(MsnUserList *userlist, const char *group_name) |
522 { | |
523 MsnGroup *group; | |
524 | |
525 group = msn_userlist_find_group_with_name(userlist, group_name); | |
526 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
527 if (group != NULL){ |
14192 | 528 return msn_group_get_id(group); |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
529 }else{ |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
530 return NULL; |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
531 } |
14192 | 532 } |
533 | |
534 const char * | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
535 msn_userlist_find_group_name(MsnUserList *userlist, const char * group_id) |
14192 | 536 { |
537 MsnGroup *group; | |
538 | |
539 group = msn_userlist_find_group_with_id(userlist, group_id); | |
540 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
541 if (group != NULL){ |
14192 | 542 return msn_group_get_name(group); |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
543 }else{ |
14192 | 544 return NULL; |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
545 } |
14192 | 546 } |
547 | |
548 void | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
549 msn_userlist_rename_group_id(MsnUserList *userlist, const char * group_id, |
14192 | 550 const char *new_name) |
551 { | |
552 MsnGroup *group; | |
553 | |
554 group = msn_userlist_find_group_with_id(userlist, group_id); | |
555 | |
556 if (group != NULL) | |
557 msn_group_set_name(group, new_name); | |
558 } | |
559 | |
560 void | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
561 msn_userlist_remove_group_id(MsnUserList *userlist, const char * group_id) |
14192 | 562 { |
563 MsnGroup *group; | |
564 | |
565 group = msn_userlist_find_group_with_id(userlist, group_id); | |
566 | |
567 if (group != NULL) | |
568 { | |
569 msn_userlist_remove_group(userlist, group); | |
570 msn_group_destroy(group); | |
571 } | |
572 } | |
573 | |
574 void | |
575 msn_userlist_rem_buddy(MsnUserList *userlist, | |
576 const char *who, int list_id, const char *group_name) | |
577 { | |
578 MsnUser *user; | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
579 const char *group_id; |
14192 | 580 const char *list; |
581 | |
582 user = msn_userlist_find_user(userlist, who); | |
583 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
584 g_return_if_fail(user != NULL); |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
585 |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
586 /*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
|
587 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
|
588 |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
589 group_id = NULL; |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
590 |
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
591 if (group_name != NULL){ |
14192 | 592 group_id = msn_userlist_find_group_id(userlist, group_name); |
593 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
594 if (group_id == NULL){ |
14192 | 595 /* Whoa, there is no such group. */ |
596 gaim_debug_error("msn", "Group doesn't exist: %s\n", group_name); | |
597 return; | |
598 } | |
599 } | |
600 | |
601 /* First we're going to check if not there. */ | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
602 if (!(user_is_there(user, list_id, group_id))){ |
14192 | 603 list = lists[list_id]; |
604 gaim_debug_error("msn", "User '%s' is not there: %s\n", | |
605 who, list); | |
606 return; | |
607 } | |
608 | |
609 /* Then request the rem to the server. */ | |
610 list = lists[list_id]; | |
611 | |
612 msn_notification_rem_buddy(userlist->session->notification, list, who, group_id); | |
613 } | |
614 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
615 /*add buddy*/ |
14192 | 616 void |
617 msn_userlist_add_buddy(MsnUserList *userlist, | |
618 const char *who, int list_id, | |
619 const char *group_name) | |
620 { | |
621 MsnUser *user; | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
622 const char *group_id; |
14192 | 623 const char *list; |
624 const char *store_name; | |
625 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
626 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
|
627 group_id = NULL; |
14192 | 628 |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
629 if (!gaim_email_is_valid(who)){ |
14192 | 630 /* only notify the user about problems adding to the friends list |
631 * maybe we should do something else for other lists, but it probably | |
632 * won't cause too many problems if we just ignore it */ | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
633 if (list_id == MSN_LIST_FL) { |
14192 | 634 char *str = g_strdup_printf(_("Unable to add \"%s\"."), who); |
635 gaim_notify_error(NULL, NULL, str, | |
636 _("The screen name specified is invalid.")); | |
637 g_free(str); | |
638 } | |
639 | |
640 return; | |
641 } | |
642 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
643 if (group_name != NULL){ |
14192 | 644 group_id = msn_userlist_find_group_id(userlist, group_name); |
645 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
646 if (group_id == NULL){ |
14192 | 647 /* Whoa, we must add that group first. */ |
648 msn_request_add_group(userlist, who, NULL, group_name); | |
649 return; | |
650 } | |
651 } | |
652 | |
653 user = msn_userlist_find_user(userlist, who); | |
654 | |
655 /* First we're going to check if it's already there. */ | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
656 if (user_is_there(user, list_id, group_id)){ |
14192 | 657 list = lists[list_id]; |
658 gaim_debug_error("msn", "User '%s' is already there: %s\n", who, list); | |
659 return; | |
660 } | |
661 | |
662 store_name = (user != NULL) ? get_store_name(user) : who; | |
663 | |
664 /* Then request the add to the server. */ | |
665 list = lists[list_id]; | |
666 | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
667 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
|
668 msn_add_contact(userlist->session->contact,who,group_id); |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
669 #if 1 |
14192 | 670 msn_notification_add_buddy(userlist->session->notification, list, who, |
671 store_name, group_id); | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
672 #endif |
14192 | 673 } |
674 | |
675 void | |
676 msn_userlist_move_buddy(MsnUserList *userlist, const char *who, | |
677 const char *old_group_name, const char *new_group_name) | |
678 { | |
20389
e354528c4163
propagate from branch 'im.pidgin.gaim' (head 70ac931e4936c7916eec18a07fe46a0af0fd7403)
Richard Laager <rlaager@wiktel.com>
parents:
15143
diff
changeset
|
679 const char *new_group_id; |
14192 | 680 |
681 new_group_id = msn_userlist_find_group_id(userlist, new_group_name); | |
682 | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
683 if (new_group_id == NULL){ |
14192 | 684 msn_request_add_group(userlist, who, old_group_name, new_group_name); |
685 return; | |
686 } | |
687 | |
688 msn_userlist_add_buddy(userlist, who, MSN_LIST_FL, new_group_name); | |
689 msn_userlist_rem_buddy(userlist, who, MSN_LIST_FL, old_group_name); | |
690 } | |
20390
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
691 |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
692 /*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
|
693 void |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
694 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
|
695 { |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
696 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
|
697 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
|
698 GSList *l; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
699 MsnUser * user; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
700 |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
701 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
|
702 |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
703 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next){ |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
704 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
705 continue; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
706 for(cnode = gnode->child; cnode; cnode = cnode->next) { |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
707 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
708 continue; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
709 for(bnode = cnode->child; bnode; bnode = bnode->next) { |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
710 GaimBuddy *b; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
711 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
712 continue; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
713 b = (GaimBuddy *)bnode; |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
714 if(b->account == gc->account){ |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
715 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
|
716 b->name,NULL); |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
717 msn_user_set_op(user,MSN_LIST_FL_OP); |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
718 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
719 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
720 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
721 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
722 for (l = session->account->permit; l != NULL; l = l->next) { |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
723 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
|
724 (char *)l->data,NULL); |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
725 msn_user_set_op(user,MSN_LIST_AL_OP); |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
726 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
727 for (l = session->account->deny; l != NULL; l = l->next) { |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
728 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
|
729 (char *)l->data,NULL); |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
730 msn_user_set_op(user,MSN_LIST_BL_OP); |
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 |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
733 } |
d634f88e25d8
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@hxbc.us>
parents:
20389
diff
changeset
|
734 |