# HG changeset patch # User Jeffrey Connelly # Date 1183575921 0 # Node ID 87b77f1ea086970909f405cf0753a4021f57fd94 # Parent ea5258b0f67d216b369543ba89789d2c6bd3f873 Add support for idle. diff -r ea5258b0f67d -r 87b77f1ea086 libpurple/protocols/myspace/CHANGES --- a/libpurple/protocols/myspace/CHANGES Wed Jul 04 06:37:08 2007 +0000 +++ b/libpurple/protocols/myspace/CHANGES Wed Jul 04 19:05:21 2007 +0000 @@ -1,3 +1,7 @@ +2007-07-xx Jeff Connelly - 0.11 +* Allow going idle (tested with I'dle Ma'ker) and viewing idle status of buddies + (thanks to Scott Ellis for finding the idle status code.) + 2007-07-03 Jeff Connelly - 0.10 * On incoming instant messages, add support for: * Text color diff -r ea5258b0f67d -r 87b77f1ea086 libpurple/protocols/myspace/myspace.c --- a/libpurple/protocols/myspace/myspace.c Wed Jul 04 06:37:08 2007 +0000 +++ b/libpurple/protocols/myspace/myspace.c Wed Jul 04 19:05:21 2007 +0000 @@ -1162,21 +1162,13 @@ { PurpleStatusType *type; MsimSession *session; + guint status_code; session = (MsimSession *)account->gc->proto_data; type = purple_status_get_type(status); - msim_set_status_primitive(session, purple_status_type_get_primitive(type)); -} - -/** Set status using a status primitive type. */ -void -msim_set_status_primitive(MsimSession *session, guint code) -{ - guint status_code; - - switch (code) + switch (purple_status_type_get_primitive(type)) { case PURPLE_STATUS_AVAILABLE: status_code = MSIM_STATUS_CODE_ONLINE; @@ -1197,6 +1189,35 @@ break; } + + msim_set_status_code(session, status_code); +} + +/** Go idle. */ +void +msim_set_idle(PurpleConnection *gc, int time) +{ + MsimSession *session; + + session = (MsimSession *)gc->proto_data; + + if (time == 0) + { + /* Going back from idle. In msim, idle is mutually exclusive + * from the other states (you can only be away or idle, but not + * both, for example), so by going non-idle I go online. + */ + msim_set_status_code(session, MSIM_STATUS_CODE_ONLINE); + } else { + /* msim doesn't support idle time */ + msim_set_status_code(session, MSIM_STATUS_CODE_IDLE); + } +} + +/** Set status using an MSIM_STATUS_CODE_* value. (TODO: also set message) */ +void +msim_set_status_code(MsimSession *session, guint status_code) +{ if (!msim_send(session, "status", MSIM_TYPE_INTEGER, status_code, "sesskey", MSIM_TYPE_INTEGER, session->sesskey, @@ -1428,7 +1449,7 @@ #endif /* Set status depending on preference. */ - msim_set_status_primitive(session, + msim_set_status_code(session, purple_account_get_bool(session->account, "hidden", FALSE) ? PURPLE_STATUS_INVISIBLE : PURPLE_STATUS_AVAILABLE); @@ -1756,6 +1777,11 @@ purple_status_code = PURPLE_STATUS_AWAY; break; + case MSIM_STATUS_CODE_IDLE: + /* will be handled below */ + purple_status_code = -1; + break; + default: purple_debug_info("msim", "msim_status_cb for %s, unknown status code %d, treating as available\n", username, status_code); @@ -1766,13 +1792,22 @@ if (!strcmp(username, session->username) && purple_status_code == PURPLE_STATUS_OFFLINE) { /* Hack to ignore offline status notices on self. */ - } else { + } else if (status_code != MSIM_STATUS_CODE_IDLE) { #endif purple_prpl_got_user_status(session->account, username, purple_primitive_get_id_from_type(purple_status_code), NULL); #ifdef MSIM_FAKE_SELF_ONLINE } #endif + if (status_code == MSIM_STATUS_CODE_IDLE) + { + purple_debug_info("msim", "msim_status: got idle: %s\n", username); + purple_prpl_got_user_idle(session->account, username, TRUE, time(NULL)); + } else { + /* All other statuses indicate going back to non-idle. */ + purple_prpl_got_user_idle(session->account, username, FALSE, time(NULL)); + } + g_strfreev(status_array); g_free(status_str); g_free(username); @@ -2605,7 +2640,7 @@ msim_send_typing, /* send_typing */ msim_get_info, /* get_info */ msim_set_status, /* set_status */ - NULL, /* set_idle */ + msim_set_idle, /* set_idle */ NULL, /* change_passwd */ msim_add_buddy, /* add_buddy */ NULL, /* add_buddies */ diff -r ea5258b0f67d -r 87b77f1ea086 libpurple/protocols/myspace/myspace.h --- a/libpurple/protocols/myspace/myspace.h Wed Jul 04 06:37:08 2007 +0000 +++ b/libpurple/protocols/myspace/myspace.h Wed Jul 04 19:05:21 2007 +0000 @@ -131,6 +131,7 @@ /* Status codes - states a buddy (or you!) can be in. */ #define MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN 0 #define MSIM_STATUS_CODE_ONLINE 1 +#define MSIM_STATUS_CODE_IDLE 2 #define MSIM_STATUS_CODE_AWAY 5 /* TODO: hidden */ @@ -203,7 +204,8 @@ void msim_get_info(PurpleConnection *gc, const gchar *name); void msim_set_status(PurpleAccount *account, PurpleStatus *status); -void msim_set_status_primitive(MsimSession *session, guint code); +void msim_set_idle(PurpleConnection *gc, int time); +void msim_set_status_code(MsimSession *session, guint code); void msim_store_buddy_info_each(gpointer key, gpointer value, gpointer user_data); gboolean msim_store_buddy_info(MsimSession *session, MsimMessage *msg);