libpurple/protocols/msn/user.c

branch
soc.2008.vv
changeset 26095
0eea4b8fd48c
parent 23830
1436e3de5d6c
child 23869
e650ca347f69
equal deleted inserted replaced
23754:e4022bc47232 26095:0eea4b8fd48c
26 #include "slp.h" 26 #include "slp.h"
27 27
28 /*new a user object*/ 28 /*new a user object*/
29 MsnUser * 29 MsnUser *
30 msn_user_new(MsnUserList *userlist, const char *passport, 30 msn_user_new(MsnUserList *userlist, const char *passport,
31 const char *store_name) 31 const char *friendly_name)
32 { 32 {
33 MsnUser *user; 33 MsnUser *user;
34 34
35 user = g_new0(MsnUser, 1); 35 user = g_new0(MsnUser, 1);
36 36
37 user->userlist = userlist; 37 user->userlist = userlist;
38 38
39 msn_user_set_passport(user, passport); 39 msn_user_set_passport(user, passport);
40 msn_user_set_store_name(user, store_name); 40 msn_user_set_friendly_name(user, friendly_name);
41
42 /*
43 * XXX This seems to reset the friendly name from what it should be
44 * to the passport when moving users. So, screw it :)
45 */
46 #if 0
47 if (name != NULL)
48 msn_user_set_name(user, name);
49 #endif
50 41
51 return user; 42 return user;
52 } 43 }
53 44
54 /*destroy a user object*/ 45 /*destroy a user object*/
73 if (user->msnobj != NULL) 64 if (user->msnobj != NULL)
74 msn_object_destroy(user->msnobj); 65 msn_object_destroy(user->msnobj);
75 66
76 g_free(user->passport); 67 g_free(user->passport);
77 g_free(user->friendly_name); 68 g_free(user->friendly_name);
78 g_free(user->store_name);
79 g_free(user->uid); 69 g_free(user->uid);
80 g_free(user->phone.home); 70 g_free(user->phone.home);
81 g_free(user->phone.work); 71 g_free(user->phone.work);
82 g_free(user->phone.mobile); 72 g_free(user->phone.mobile);
83 g_free(user->media.artist); 73 g_free(user->media.artist);
90 80
91 void 81 void
92 msn_user_update(MsnUser *user) 82 msn_user_update(MsnUser *user)
93 { 83 {
94 PurpleAccount *account; 84 PurpleAccount *account;
85 gboolean offline;
95 86
96 account = user->userlist->session->account; 87 account = user->userlist->session->account;
97 88
98 if (user->status != NULL) { 89 offline = (user->status == NULL);
99 gboolean offline = (strcmp(user->status, "offline") == 0); 90
100 91 if (!offline) {
101 if (!offline) { 92 purple_prpl_got_user_status(account, user->passport, user->status,
102 purple_prpl_got_user_status(account, user->passport, user->status, 93 "message", user->statusline, NULL);
103 "message", user->statusline, NULL); 94 } else {
95 if (user->mobile) {
96 purple_prpl_got_user_status(account, user->passport, "mobile", NULL);
97 purple_prpl_got_user_status(account, user->passport, "available", NULL);
104 } else { 98 } else {
105 if (user->mobile) { 99 purple_prpl_got_user_status(account, user->passport, "offline", NULL);
106 purple_prpl_got_user_status(account, user->passport, "mobile", NULL);
107 purple_prpl_got_user_status(account, user->passport, "available", NULL);
108 } else {
109 purple_prpl_got_user_status(account, user->passport, user->status, NULL);
110 }
111 } 100 }
112 101 }
113 if (!offline || !user->mobile) { 102
114 purple_prpl_got_user_status_deactive(account, user->passport, "mobile"); 103 if (!offline || !user->mobile) {
115 } 104 purple_prpl_got_user_status_deactive(account, user->passport, "mobile");
116 105 }
117 if (!offline && user->media.title) { 106
118 purple_prpl_got_user_status(account, user->passport, "tune", 107 if (!offline && user->media.title) {
119 PURPLE_TUNE_ARTIST, user->media.artist, 108 purple_prpl_got_user_status(account, user->passport, "tune",
120 PURPLE_TUNE_ALBUM, user->media.album, 109 PURPLE_TUNE_ARTIST, user->media.artist,
121 PURPLE_TUNE_TITLE, user->media.title, 110 PURPLE_TUNE_ALBUM, user->media.album,
122 NULL); 111 PURPLE_TUNE_TITLE, user->media.title,
123 } else { 112 NULL);
124 purple_prpl_got_user_status_deactive(account, user->passport, "tune"); 113 } else {
125 } 114 purple_prpl_got_user_status_deactive(account, user->passport, "tune");
126 } 115 }
127 116
128 if (user->idle) 117 if (user->idle)
129 purple_prpl_got_user_idle(account, user->passport, TRUE, -1); 118 purple_prpl_got_user_idle(account, user->passport, TRUE, -1);
130 else 119 else
133 122
134 void 123 void
135 msn_user_set_state(MsnUser *user, const char *state) 124 msn_user_set_state(MsnUser *user, const char *state)
136 { 125 {
137 const char *status; 126 const char *status;
127
128 if (state == NULL) {
129 user->status = NULL;
130 return;
131 }
138 132
139 if (!g_ascii_strcasecmp(state, "BSY")) 133 if (!g_ascii_strcasecmp(state, "BSY"))
140 status = "busy"; 134 status = "busy";
141 else if (!g_ascii_strcasecmp(state, "BRB")) 135 else if (!g_ascii_strcasecmp(state, "BRB"))
142 status = "brb"; 136 status = "brb";
197 user->media.artist = media ? g_strdup(media->artist) : NULL; 191 user->media.artist = media ? g_strdup(media->artist) : NULL;
198 user->media.album = media ? g_strdup(media->album) : NULL; 192 user->media.album = media ? g_strdup(media->album) : NULL;
199 } 193 }
200 194
201 void 195 void
202 msn_user_set_store_name(MsnUser *user, const char *name)
203 {
204 g_return_if_fail(user != NULL);
205
206 if (name != NULL)
207 {
208 g_free(user->store_name);
209 user->store_name = g_strdup(name);
210 }
211 }
212
213 void
214 msn_user_set_uid(MsnUser *user, const char *uid) 196 msn_user_set_uid(MsnUser *user, const char *uid)
215 { 197 {
216 g_return_if_fail(user != NULL); 198 g_return_if_fail(user != NULL);
217 199
218 g_free(user->uid); 200 g_free(user->uid);
219 user->uid = g_strdup(uid); 201 user->uid = g_strdup(uid);
220 }
221
222 void
223 msn_user_set_type(MsnUser *user, MsnUserType type)
224 {
225 g_return_if_fail(user != NULL);
226
227 user->type = type;
228 } 202 }
229 203
230 void 204 void
231 msn_user_set_op(MsnUser *user, int list_op) 205 msn_user_set_op(MsnUser *user, int list_op)
232 { 206 {
281 account = userlist->session->account; 255 account = userlist->session->account;
282 passport = msn_user_get_passport(user); 256 passport = msn_user_get_passport(user);
283 257
284 group_name = msn_userlist_find_group_name(userlist, group_id); 258 group_name = msn_userlist_find_group_name(userlist, group_id);
285 259
286 purple_debug_info("User","group id:%s,name:%s,user:%s\n", group_id, group_name, passport); 260 purple_debug_info("msn", "User: group id:%s,name:%s,user:%s\n", group_id, group_name, passport);
287 261
288 g = purple_find_group(group_name); 262 g = purple_find_group(group_name);
289 263
290 if ((id == NULL) && (g == NULL)) 264 if ((id == NULL) && (g == NULL))
291 { 265 {
323 297
324 gc = purple_account_get_connection(account); 298 gc = purple_account_get_connection(account);
325 if (gc != NULL) 299 if (gc != NULL)
326 session = gc->proto_data; 300 session = gc->proto_data;
327 301
328 if ((session != NULL) && (session->protocol_ver == WLM_PROT_VER))
329 return FALSE;
330
331 if ((session != NULL) && (user = msn_userlist_find_user(session->userlist, name)) != NULL) 302 if ((session != NULL) && (user = msn_userlist_find_user(session->userlist, name)) != NULL)
332 { 303 {
333 return (user->type == MSN_USER_TYPE_YAHOO); 304 return (user->networkid == MSN_NETWORK_YAHOO);
334 } 305 }
335 return (strstr(name,"@yahoo.") != NULL); 306 return (strstr(name,"@yahoo.") != NULL);
336 } 307 }
337 308
338 void 309 void
378 g_free(user->phone.mobile); 349 g_free(user->phone.mobile);
379 user->phone.mobile = g_strdup(number); 350 user->phone.mobile = g_strdup(number);
380 } 351 }
381 352
382 void 353 void
354 msn_user_set_clientid(MsnUser *user, guint clientid)
355 {
356 g_return_if_fail(user != NULL);
357
358 user->clientid = clientid;
359 }
360
361 void
362 msn_user_set_network(MsnUser *user, MsnNetwork network)
363 {
364 g_return_if_fail(user != NULL);
365
366 user->networkid = network;
367 }
368
369 void
383 msn_user_set_object(MsnUser *user, MsnObject *obj) 370 msn_user_set_object(MsnUser *user, MsnObject *obj)
384 { 371 {
385 g_return_if_fail(user != NULL); 372 g_return_if_fail(user != NULL);
386 373
387 if (user->msnobj != NULL) 374 if (user->msnobj != NULL)
420 407
421 return user->friendly_name; 408 return user->friendly_name;
422 } 409 }
423 410
424 const char * 411 const char *
425 msn_user_get_store_name(const MsnUser *user)
426 {
427 g_return_val_if_fail(user != NULL, NULL);
428
429 return user->store_name;
430 }
431
432 const char *
433 msn_user_get_home_phone(const MsnUser *user) 412 msn_user_get_home_phone(const MsnUser *user)
434 { 413 {
435 g_return_val_if_fail(user != NULL, NULL); 414 g_return_val_if_fail(user != NULL, NULL);
436 415
437 return user->phone.home; 416 return user->phone.home;
451 g_return_val_if_fail(user != NULL, NULL); 430 g_return_val_if_fail(user != NULL, NULL);
452 431
453 return user->phone.mobile; 432 return user->phone.mobile;
454 } 433 }
455 434
435 guint
436 msn_user_get_clientid(const MsnUser *user)
437 {
438 g_return_val_if_fail(user != NULL, 0);
439
440 return user->clientid;
441 }
442
456 MsnObject * 443 MsnObject *
457 msn_user_get_object(const MsnUser *user) 444 msn_user_get_object(const MsnUser *user)
458 { 445 {
459 g_return_val_if_fail(user != NULL, NULL); 446 g_return_val_if_fail(user != NULL, NULL);
460 447

mercurial