Mercurial > pidgin.yaz
comparison libpurple/protocols/msn/user.c @ 20411:ed303260e05a
propagate of im.pidgin.pidgin to im.pidgin.cpw.khc.msnp14
author | Ka-Hing Cheung <khc@hxbc.us> |
---|---|
date | Sun, 06 May 2007 02:40:23 +0000 |
parents | 28251f5bcd6a 522ade544156 |
children | 5048651671e1 |
comparison
equal
deleted
inserted
replaced
16932:b668951121d8 | 20411:ed303260e05a |
---|---|
23 */ | 23 */ |
24 #include "msn.h" | 24 #include "msn.h" |
25 #include "user.h" | 25 #include "user.h" |
26 #include "slp.h" | 26 #include "slp.h" |
27 | 27 |
28 /*new a user object*/ | |
28 MsnUser * | 29 MsnUser * |
29 msn_user_new(MsnUserList *userlist, const char *passport, | 30 msn_user_new(MsnUserList *userlist, const char *passport, |
30 const char *store_name) | 31 const char *store_name) |
31 { | 32 { |
32 MsnUser *user; | 33 MsnUser *user; |
48 #endif | 49 #endif |
49 | 50 |
50 return user; | 51 return user; |
51 } | 52 } |
52 | 53 |
54 /*destroy a user object*/ | |
53 void | 55 void |
54 msn_user_destroy(MsnUser *user) | 56 msn_user_destroy(MsnUser *user) |
55 { | 57 { |
56 g_return_if_fail(user != NULL); | 58 g_return_if_fail(user != NULL); |
57 | 59 |
58 if (user->clientcaps != NULL) | 60 if (user->clientcaps != NULL) |
59 g_hash_table_destroy(user->clientcaps); | 61 g_hash_table_destroy(user->clientcaps); |
60 | 62 |
61 if (user->group_ids != NULL) | 63 if (user->group_ids != NULL){ |
64 GList *l; | |
65 for (l = user->group_ids; l != NULL; l = l->next){ | |
66 g_free(l->data); | |
67 } | |
62 g_list_free(user->group_ids); | 68 g_list_free(user->group_ids); |
69 } | |
63 | 70 |
64 if (user->msnobj != NULL) | 71 if (user->msnobj != NULL) |
65 msn_object_destroy(user->msnobj); | 72 msn_object_destroy(user->msnobj); |
66 | 73 |
67 g_free(user->passport); | 74 g_free(user->passport); |
68 g_free(user->friendly_name); | 75 g_free(user->friendly_name); |
69 g_free(user->store_name); | 76 g_free(user->store_name); |
77 g_free(user->uid); | |
70 g_free(user->phone.home); | 78 g_free(user->phone.home); |
71 g_free(user->phone.work); | 79 g_free(user->phone.work); |
72 g_free(user->phone.mobile); | 80 g_free(user->phone.mobile); |
73 | 81 |
74 g_free(user); | 82 g_free(user); |
79 { | 87 { |
80 PurpleAccount *account; | 88 PurpleAccount *account; |
81 | 89 |
82 account = user->userlist->session->account; | 90 account = user->userlist->session->account; |
83 | 91 |
84 if (user->status != NULL) { | 92 if (user->statusline != NULL && user->currentmedia != NULL) { |
93 purple_prpl_got_user_status(account, user->passport, user->status, | |
94 "message", user->statusline, | |
95 "currentmedia", user->currentmedia, NULL); | |
96 } else if (user->currentmedia != NULL) { | |
97 purple_prpl_got_user_status(account, user->passport, "currentmedia", | |
98 user->currentmedia, NULL); | |
99 } else if (user->statusline != NULL) { | |
100 //char *status = g_strdup_printf("%s - %s", user->status, user->statusline); | |
101 purple_prpl_got_user_status(account, user->passport, user->status, | |
102 "message", user->statusline, NULL); | |
103 } else if (user->status != NULL) { | |
85 if (!strcmp(user->status, "offline") && user->mobile) { | 104 if (!strcmp(user->status, "offline") && user->mobile) { |
86 purple_prpl_got_user_status(account, user->passport, "offline", NULL); | 105 purple_prpl_got_user_status(account, user->passport, "offline", NULL); |
87 purple_prpl_got_user_status(account, user->passport, "mobile", NULL); | 106 purple_prpl_got_user_status(account, user->passport, "mobile", NULL); |
88 } else { | 107 } else { |
89 purple_prpl_got_user_status(account, user->passport, user->status, NULL); | 108 purple_prpl_got_user_status(account, user->passport, user->status, NULL); |
140 g_free(user->friendly_name); | 159 g_free(user->friendly_name); |
141 user->friendly_name = g_strdup(name); | 160 user->friendly_name = g_strdup(name); |
142 } | 161 } |
143 | 162 |
144 void | 163 void |
164 msn_user_set_statusline(MsnUser *user, const char *statusline) | |
165 { | |
166 g_return_if_fail(user != NULL); | |
167 | |
168 g_free(user->statusline); | |
169 user->statusline = g_strdup(statusline); | |
170 } | |
171 | |
172 void | |
173 msn_user_set_currentmedia(MsnUser *user, const char *currentmedia) | |
174 { | |
175 g_return_if_fail(user != NULL); | |
176 | |
177 g_free(user->currentmedia); | |
178 user->currentmedia = g_strdup(currentmedia); | |
179 } | |
180 | |
181 void | |
145 msn_user_set_store_name(MsnUser *user, const char *name) | 182 msn_user_set_store_name(MsnUser *user, const char *name) |
146 { | 183 { |
147 g_return_if_fail(user != NULL); | 184 g_return_if_fail(user != NULL); |
148 | 185 |
149 g_free(user->store_name); | 186 if (name != NULL){ |
150 user->store_name = g_strdup(name); | 187 g_free(user->store_name); |
188 user->store_name = g_strdup(name); | |
189 } | |
190 } | |
191 | |
192 void | |
193 msn_user_set_uid(MsnUser *user, const char *uid) | |
194 { | |
195 g_return_if_fail(user != NULL); | |
196 | |
197 g_free(user->uid); | |
198 user->uid = g_strdup(uid); | |
199 } | |
200 | |
201 void | |
202 msn_user_set_type(MsnUser *user,int type) | |
203 { | |
204 g_return_if_fail(user != NULL); | |
205 | |
206 user->type = type; | |
207 } | |
208 | |
209 void | |
210 msn_user_set_op(MsnUser *user,int list_op) | |
211 { | |
212 g_return_if_fail(list_op != 0); | |
213 user->list_op |= list_op; | |
151 } | 214 } |
152 | 215 |
153 void | 216 void |
154 msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img) | 217 msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img) |
155 { | 218 { |
216 msn_object_set_sha1c(msnobj, base64); | 279 msn_object_set_sha1c(msnobj, base64); |
217 g_free(base64); | 280 g_free(base64); |
218 } | 281 } |
219 } | 282 } |
220 | 283 |
221 void | 284 /*add group id to User object*/ |
222 msn_user_add_group_id(MsnUser *user, int id) | 285 void |
286 msn_user_add_group_id(MsnUser *user, const char* id) | |
223 { | 287 { |
224 MsnUserList *userlist; | 288 MsnUserList *userlist; |
225 PurpleAccount *account; | 289 PurpleAccount *account; |
226 PurpleBuddy *b; | 290 PurpleBuddy *b; |
227 PurpleGroup *g; | 291 PurpleGroup *g; |
228 const char *passport; | 292 const char *passport; |
293 char *group_id; | |
229 const char *group_name; | 294 const char *group_name; |
230 | 295 |
231 g_return_if_fail(user != NULL); | 296 g_return_if_fail(user != NULL); |
232 g_return_if_fail(id >= 0); | 297 g_return_if_fail(id != NULL); |
233 | 298 |
234 user->group_ids = g_list_append(user->group_ids, GINT_TO_POINTER(id)); | 299 group_id = g_strdup(id); |
300 user->group_ids = g_list_append(user->group_ids, group_id); | |
235 | 301 |
236 userlist = user->userlist; | 302 userlist = user->userlist; |
237 account = userlist->session->account; | 303 account = userlist->session->account; |
238 passport = msn_user_get_passport(user); | 304 passport = msn_user_get_passport(user); |
239 | 305 |
240 group_name = msn_userlist_find_group_name(userlist, id); | 306 group_name = msn_userlist_find_group_name(userlist, group_id); |
307 | |
308 purple_debug_info("User","group id:%s,name:%s,user:%s\n",group_id,group_name,passport); | |
241 | 309 |
242 g = purple_find_group(group_name); | 310 g = purple_find_group(group_name); |
243 | 311 |
244 if ((id == 0) && (g == NULL)) | 312 if ((id == NULL) && (g == NULL)) |
245 { | 313 { |
246 g = purple_group_new(group_name); | 314 g = purple_group_new(group_name); |
247 purple_blist_add_group(g, NULL); | 315 purple_blist_add_group(g, NULL); |
248 } | 316 } |
249 | 317 |
250 b = purple_find_buddy_in_group(account, passport, g); | 318 b = purple_find_buddy_in_group(account, passport, g); |
251 | |
252 if (b == NULL) | 319 if (b == NULL) |
253 { | 320 { |
254 b = purple_buddy_new(account, passport, NULL); | 321 b = purple_buddy_new(account, passport, NULL); |
255 | |
256 purple_blist_add_buddy(b, NULL, g, NULL); | 322 purple_blist_add_buddy(b, NULL, g, NULL); |
257 } | 323 } |
258 | |
259 b->proto_data = user; | 324 b->proto_data = user; |
260 } | 325 /*Update the blist Node info*/ |
261 | 326 // purple_blist_node_set_string(&(b->node), "", ""); |
262 void | 327 } |
263 msn_user_remove_group_id(MsnUser *user, int id) | 328 |
264 { | 329 /*check if the msn user is online*/ |
265 g_return_if_fail(user != NULL); | 330 gboolean |
266 g_return_if_fail(id >= 0); | 331 msn_user_is_online(PurpleAccount *account, const char *name) |
267 | 332 { |
268 user->group_ids = g_list_remove(user->group_ids, GINT_TO_POINTER(id)); | 333 PurpleBuddy *buddy; |
334 | |
335 buddy =purple_find_buddy(account,name); | |
336 return PURPLE_BUDDY_IS_ONLINE(buddy); | |
337 } | |
338 | |
339 /*check to see if user is yahoo user? | |
340 * TODO: we need to identify it via contact parse | |
341 */ | |
342 gboolean | |
343 msn_user_is_yahoo(PurpleAccount *account ,const char *name) | |
344 { | |
345 return (strstr(name,"yahoo") != NULL); | |
346 } | |
347 | |
348 void | |
349 msn_user_remove_group_id(MsnUser *user, const char * id) | |
350 { | |
351 g_return_if_fail(user != NULL); | |
352 g_return_if_fail(id != NULL); | |
353 | |
354 user->group_ids = g_list_remove(user->group_ids, id); | |
355 /* khc need to use g_list_find_custom here to find the right link */ | |
356 //g_free(id); | |
269 } | 357 } |
270 | 358 |
271 void | 359 void |
272 msn_user_set_home_phone(MsnUser *user, const char *number) | 360 msn_user_set_home_phone(MsnUser *user, const char *number) |
273 { | 361 { |