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
16921: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 {