| 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 |
| 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) |