Mercurial > pidgin.yaz
changeset 21707:9ef51d894456
This fixes some idle-related behavior with the MySpace prpl, most particularly
the loss of status messages and statuses whenever idle activates and deactivates. It also ensures that idle trumps other statuses (besides invisible), since
it's an exclusive state on this protocol.
author | Kevin Stange <kevin@simguy.net> |
---|---|
date | Sat, 01 Dec 2007 08:49:27 +0000 |
parents | bc4afc8ea960 |
children | 12303201511e |
files | libpurple/protocols/myspace/myspace.c |
diffstat | 1 files changed, 36 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/protocols/myspace/myspace.c Sat Dec 01 05:46:49 2007 +0000 +++ b/libpurple/protocols/myspace/myspace.c Sat Dec 01 08:49:27 2007 +0000 @@ -1047,15 +1047,18 @@ msim_set_status(PurpleAccount *account, PurpleStatus *status) { PurpleStatusType *type; + PurplePresence *pres; MsimSession *session; guint status_code; - gchar *statstring; + const gchar *message; + gchar *stripped; session = (MsimSession *)account->gc->proto_data; g_return_if_fail(MSIM_SESSION_VALID(session)); type = purple_status_get_type(status); + pres = purple_status_get_presence(status); switch (purple_status_type_get_primitive(type)) { case PURPLE_STATUS_AVAILABLE: @@ -1083,16 +1086,20 @@ break; } - statstring = (gchar *)purple_status_get_attr_string(status, "message"); - - if (!statstring) { - statstring = ""; - } + message = (gchar *)purple_status_get_attr_string(status, "message"); /* Status strings are plain text. */ - statstring = purple_markup_strip_html(statstring); - - msim_set_status_code(session, status_code, statstring); + if (message != NULL) + stripped = purple_markup_strip_html(message); + else + stripped = g_strdup(""); + + msim_set_status_code(session, status_code, stripped); + + /* If we should be idle, set that status. Time is irrelevant here. */ + if (purple_presence_is_idle(pres) && status_code != MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN) + msim_set_idle(account->gc, 1); + } /** Go idle. */ @@ -1100,6 +1107,7 @@ msim_set_idle(PurpleConnection *gc, int time) { MsimSession *session; + PurpleStatus *status; g_return_if_fail(gc != NULL); @@ -1107,16 +1115,30 @@ g_return_if_fail(MSIM_SESSION_VALID(session)); + status = purple_account_get_active_status(session->account); + 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. + * both, for example), so by going non-idle I go back to what + * libpurple says I should be. */ - /* TODO: find out how to keep old status string? */ - msim_set_status_code(session, MSIM_STATUS_CODE_ONLINE, g_strdup("")); + msim_set_status(session->account, status); } else { + const gchar *message; + gchar *stripped; + + /* Set the idle message to the status message from the real + * current status. + */ + message = purple_status_get_attr_string(status, "message"); + if (message != NULL) + stripped = purple_markup_strip_html(message); + else + stripped = g_strdup(""); + /* msim doesn't support idle time, so just go idle */ - msim_set_status_code(session, MSIM_STATUS_CODE_IDLE, g_strdup("")); + msim_set_status_code(session, MSIM_STATUS_CODE_IDLE, stripped); } } @@ -1894,7 +1916,7 @@ purple_debug_info("msim", "msim_status: found buddy %s\n", username); } - if (status_headline) { + if (status_headline && strcmp(status_headline, "") != 0) { /* The status headline is plaintext, but libpurple treats it as HTML, * so escape any HTML characters to their entity equivalents. */ status_headline_escaped = g_markup_escape_text(status_headline, strlen(status_headline));