Mercurial > pidgin
comparison libpurple/protocols/myspace/myspace.c @ 17670:7e4e3f6582d2
Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
one's own user account always being online. This is needed because msim does
not allow adding yourself to your buddy list. (Other prpls do this too, btw.)
author | Jeffrey Connelly <jaconnel@calpoly.edu> |
---|---|
date | Tue, 26 Jun 2007 05:53:52 +0000 |
parents | d727fda5a8e1 |
children | d43314277ccc |
comparison
equal
deleted
inserted
replaced
17669:d727fda5a8e1 | 17670:7e4e3f6582d2 |
---|---|
1428 | 1428 |
1429 if (msim_msg_get(msg, "nc")) | 1429 if (msim_msg_get(msg, "nc")) |
1430 { | 1430 { |
1431 return msim_login_challenge(session, msg); | 1431 return msim_login_challenge(session, msg); |
1432 } else if (msim_msg_get(msg, "sesskey")) { | 1432 } else if (msim_msg_get(msg, "sesskey")) { |
1433 | |
1434 purple_connection_update_progress(session->gc, _("Connected"), 3, 4); | 1433 purple_connection_update_progress(session->gc, _("Connected"), 3, 4); |
1435 | 1434 |
1436 session->sesskey = msim_msg_get_integer(msg, "sesskey"); | 1435 session->sesskey = msim_msg_get_integer(msg, "sesskey"); |
1437 purple_debug_info("msim", "SESSKEY=<%d>\n", session->sesskey); | 1436 purple_debug_info("msim", "SESSKEY=<%d>\n", session->sesskey); |
1438 | 1437 |
1439 /* Comes with: proof,profileid,userid,uniquenick -- all same values | 1438 /* Comes with: proof,profileid,userid,uniquenick -- all same values |
1440 * some of the time, but can vary. This is our own user ID. */ | 1439 * some of the time, but can vary. This is our own user ID. */ |
1441 session->userid = msim_msg_get_integer(msg, "userid"); | 1440 session->userid = msim_msg_get_integer(msg, "userid"); |
1442 | 1441 |
1443 /* TODO: fake our own userid being online */ | |
1444 | 1442 |
1445 purple_connection_set_state(session->gc, PURPLE_CONNECTED); | 1443 purple_connection_set_state(session->gc, PURPLE_CONNECTED); |
1444 | |
1445 | |
1446 /* We now know are our own username, only after we're logged in.. | |
1447 * which is weird, but happens because you login with your email | |
1448 * address and not username. Will be freed in msim_session_destroy(). */ | |
1449 session->username = msim_msg_get_string(msg, "uniquenick"); | |
1450 | |
1451 #ifdef MSIM_FAKE_SELF_ONLINE | |
1452 /* Fake our self coming online. */ | |
1453 purple_prpl_got_user_status(session->account, session->username, purple_primitive_get_id_from_type(PURPLE_STATUS_AVAILABLE), NULL); | |
1454 #endif | |
1446 | 1455 |
1447 return TRUE; | 1456 return TRUE; |
1448 } else if (msim_msg_get(msg, "bm")) { | 1457 } else if (msim_msg_get(msg, "bm")) { |
1449 guint bm; | 1458 guint bm; |
1450 | 1459 |
1734 default: | 1743 default: |
1735 purple_debug_info("msim", "msim_status_cb for %s, unknown status code %d\n", | 1744 purple_debug_info("msim", "msim_status_cb for %s, unknown status code %d\n", |
1736 username, status_code); | 1745 username, status_code); |
1737 purple_status_code = PURPLE_STATUS_AVAILABLE; | 1746 purple_status_code = PURPLE_STATUS_AVAILABLE; |
1738 } | 1747 } |
1739 purple_prpl_got_user_status(session->account, username, purple_primitive_get_id_from_type(purple_status_code), NULL); | 1748 |
1749 #ifdef MSIM_FAKE_SELF_ONLINE | |
1750 if (!strcmp(username, session->username) && purple_status_code == PURPLE_STATUS_OFFLINE) | |
1751 { | |
1752 /* Hack to ignore offline status notices on self. */ | |
1753 } else { | |
1754 #endif | |
1755 purple_prpl_got_user_status(session->account, username, purple_primitive_get_id_from_type(purple_status_code), NULL); | |
1756 #ifdef MSIM_FAKE_SELF_ONLINE | |
1757 } | |
1758 #endif | |
1740 | 1759 |
1741 g_strfreev(status_array); | 1760 g_strfreev(status_array); |
1742 g_free(status_str); | 1761 g_free(status_str); |
1743 g_free(username); | 1762 g_free(username); |
1744 g_list_free(list); | 1763 g_list_free(list); |
2228 } | 2247 } |
2229 | 2248 |
2230 session->fd = source; | 2249 session->fd = source; |
2231 | 2250 |
2232 gc->inpa = purple_input_add(source, PURPLE_INPUT_READ, msim_input_cb, gc); | 2251 gc->inpa = purple_input_add(source, PURPLE_INPUT_READ, msim_input_cb, gc); |
2252 | |
2253 | |
2233 } | 2254 } |
2234 | 2255 |
2235 /* Session methods */ | 2256 /* Session methods */ |
2236 | 2257 |
2237 /** | 2258 /** |
2251 session = g_new0(MsimSession, 1); | 2272 session = g_new0(MsimSession, 1); |
2252 | 2273 |
2253 session->magic = MSIM_SESSION_STRUCT_MAGIC; | 2274 session->magic = MSIM_SESSION_STRUCT_MAGIC; |
2254 session->account = acct; | 2275 session->account = acct; |
2255 session->gc = purple_account_get_connection(acct); | 2276 session->gc = purple_account_get_connection(acct); |
2277 session->sesskey = 0; | |
2278 session->userid = 0; | |
2279 session->username = NULL; | |
2256 session->fd = -1; | 2280 session->fd = -1; |
2257 | 2281 |
2258 /* TODO: Remove. */ | 2282 /* TODO: Remove. */ |
2259 session->user_lookup_cb = g_hash_table_new_full(g_direct_hash, | 2283 session->user_lookup_cb = g_hash_table_new_full(g_direct_hash, |
2260 g_direct_equal, NULL, NULL); /* do NOT free function pointers! (values) */ | 2284 g_direct_equal, NULL, NULL); /* do NOT free function pointers! (values) */ |
2281 g_return_if_fail(MSIM_SESSION_VALID(session)); | 2305 g_return_if_fail(MSIM_SESSION_VALID(session)); |
2282 | 2306 |
2283 session->magic = -1; | 2307 session->magic = -1; |
2284 | 2308 |
2285 g_free(session->rxbuf); | 2309 g_free(session->rxbuf); |
2310 g_free(session->username); | |
2286 | 2311 |
2287 /* TODO: Remove. */ | 2312 /* TODO: Remove. */ |
2288 g_hash_table_destroy(session->user_lookup_cb); | 2313 g_hash_table_destroy(session->user_lookup_cb); |
2289 g_hash_table_destroy(session->user_lookup_cb_data); | 2314 g_hash_table_destroy(session->user_lookup_cb_data); |
2290 | 2315 |