Mercurial > pidgin.yaz
changeset 6847:7de1b559cbbb
[gaim-migrate @ 7392]
Tim Ringenbach (marv_sf) writes:
" This fixes a bug where SMS users who aren't anymore
would still be.
It also truncates status message for the yahoo server,
because for some reason if it has to do it itself, it
clears the away flag.
Finally, it tries to do (our) statuses and idleness
better. I think we're now sending the right thing in
the regard now (as opposed to before, when we didn't
bother letting the server know we were idle if we were
also in a predefined status). For some reason we still
don't show as idle on our own list while in those
states, but i think that's a seperate bug in process
status that i need to look into."
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Mon, 15 Sep 2003 13:29:22 +0000 |
parents | 8ab95f4c9800 |
children | 060aa79a733e |
files | src/protocols/yahoo/yahoo.c src/protocols/yahoo/yahoo.h |
diffstat | 2 files changed, 24 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/protocols/yahoo/yahoo.c Mon Sep 15 07:35:49 2003 +0000 +++ b/src/protocols/yahoo/yahoo.c Mon Sep 15 13:29:22 2003 +0000 @@ -371,8 +371,8 @@ g_free(f->msg); f->msg = NULL; } - if (f->status == YAHOO_STATUS_AVAILABLE) - f->idle = 0; + + f->sms = 0; break; case 19: /* custom message */ if (f) { @@ -1697,13 +1697,11 @@ if (msg) { yd->current_status = YAHOO_STATUS_CUSTOM; - gc->away = g_strdup(msg); + gc->away = g_strndup(msg, YAHOO_MAX_STATUS_MESSAGE_LENGTH); } else if (state) { gc->away = g_strdup(""); if (!strcmp(state, _("Available"))) { yd->current_status = YAHOO_STATUS_AVAILABLE; - g_free(gc->away); - gc->away = NULL; } else if (!strcmp(state, _("Be Right Back"))) { yd->current_status = YAHOO_STATUS_BRB; } else if (!strcmp(state, _("Busy"))) { @@ -1724,14 +1722,12 @@ yd->current_status = YAHOO_STATUS_STEPPEDOUT; } else if (!strcmp(state, _("Invisible"))) { yd->current_status = YAHOO_STATUS_INVISIBLE; - } else if (!strcmp(state, GAIM_AWAY_CUSTOM)) { + } else if (!strcmp(state, GAIM_AWAY_CUSTOM)) { /* this should never happen? */ if (gc->is_idle) { yd->current_status = YAHOO_STATUS_IDLE; } else { yd->current_status = YAHOO_STATUS_AVAILABLE; } - g_free(gc->away); - gc->away = NULL; } } else if (gc->is_idle) { yd->current_status = YAHOO_STATUS_IDLE; @@ -1743,11 +1739,16 @@ service = YAHOO_SERVICE_ISBACK; else service = YAHOO_SERVICE_ISAWAY; - pkt = yahoo_packet_new(service, yd->current_status, 0); + + pkt = yahoo_packet_new(service, YAHOO_STATUS_AVAILABLE, 0); g_snprintf(s, sizeof(s), "%d", yd->current_status); yahoo_packet_hash(pkt, 10, s); - if (yd->current_status == YAHOO_STATUS_CUSTOM) { - yahoo_packet_hash(pkt, 19, msg); + + if ((yd->current_status == YAHOO_STATUS_CUSTOM) && gc->away) + yahoo_packet_hash(pkt, 19, gc->away); + + if ((yd->current_status != YAHOO_STATUS_AVAILABLE) && + (yd->current_status != YAHOO_STATUS_IDLE)) { if (gc->is_idle) yahoo_packet_hash(pkt, 47, "2"); else @@ -1764,14 +1765,12 @@ struct yahoo_packet *pkt = NULL; if (idle && yd->current_status == YAHOO_STATUS_AVAILABLE) { - pkt = yahoo_packet_new(YAHOO_SERVICE_ISAWAY, YAHOO_STATUS_IDLE, 0); + pkt = yahoo_packet_new(YAHOO_SERVICE_ISAWAY, YAHOO_STATUS_AVAILABLE, 0); yd->current_status = YAHOO_STATUS_IDLE; } else if (!idle && yd->current_status == YAHOO_STATUS_IDLE) { pkt = yahoo_packet_new(YAHOO_SERVICE_ISAWAY, YAHOO_STATUS_AVAILABLE, 0); yd->current_status = YAHOO_STATUS_AVAILABLE; - } else if (idle && gc->away && yd->current_status == YAHOO_STATUS_CUSTOM) { - pkt = yahoo_packet_new(YAHOO_SERVICE_ISAWAY, YAHOO_STATUS_IDLE, 0); - } else if (!idle && gc->away && yd->current_status == YAHOO_STATUS_CUSTOM) { + } else { pkt = yahoo_packet_new(YAHOO_SERVICE_ISAWAY, YAHOO_STATUS_AVAILABLE, 0); } @@ -1785,7 +1784,14 @@ yahoo_packet_hash(pkt, 47, "2"); else yahoo_packet_hash(pkt, 47, "1"); /* fixme when available messages are possible */ + } else if (idle && (yd->current_status != YAHOO_STATUS_AVAILABLE) && + (yd->current_status != YAHOO_STATUS_IDLE)) { + yahoo_packet_hash(pkt, 47, "2"); + } else if (!idle && (yd->current_status != YAHOO_STATUS_AVAILABLE) && + (yd->current_status != YAHOO_STATUS_IDLE)) { + yahoo_packet_hash(pkt, 47, "1"); } + yahoo_send_packet(yd, pkt); yahoo_packet_free(pkt); }
--- a/src/protocols/yahoo/yahoo.h Mon Sep 15 07:35:49 2003 +0000 +++ b/src/protocols/yahoo/yahoo.h Mon Sep 15 13:29:22 2003 +0000 @@ -74,6 +74,7 @@ YAHOO_SERVICE_IGNORECONTACT, /* > 1, 7, 13 < 1, 66, 13, 0*/ YAHOO_SERVICE_REJECTCONTACT, YAHOO_SERVICE_GROUPRENAME = 0x89, /* > 1, 65(new), 66(0), 67(old) */ + /* YAHOO_SERVICE_??? = 0x8A, */ YAHOO_SERVICE_CHATONLINE = 0x96, /* > 109(id), 1, 6(abcde) < 0,1*/ YAHOO_SERVICE_CHATGOTO, YAHOO_SERVICE_CHATJOIN, /* > 1 104-room 129-1600326591 62-2 */ @@ -139,6 +140,8 @@ gboolean sms; }; +#define YAHOO_MAX_STATUS_MESSAGE_LENGTH (56) + struct yahoo_packet *yahoo_packet_new(enum yahoo_service service, enum yahoo_status status, int id); void yahoo_packet_hash(struct yahoo_packet *pkt, int key, const char *value); int yahoo_send_packet(struct yahoo_data *yd, struct yahoo_packet *pkt);