comparison libpurple/protocols/yahoo/libymsg.c @ 28429:ea6e571ebe4d

Fixes #7722. When unsetting idle while invisible, send status as available instead of invisible. This makes sure that server sends available status to buddies we have set "show online". Hence unsets idle for such buddies.
author Sulabh Mahajan <sulabh@soc.pidgin.im>
date Sun, 23 Aug 2009 10:07:21 +0000
parents 74958cad186d
children 4a2adf413aaa 0400ef272c46 15b1cc2e8b74 7925bb7f2aa7
comparison
equal deleted inserted replaced
28428:afa79877d972 28429:ea6e571ebe4d
4498 4498
4499 g_free(conv_msg); 4499 g_free(conv_msg);
4500 4500
4501 if (purple_presence_is_idle(presence)) 4501 if (purple_presence_is_idle(presence))
4502 yahoo_packet_hash_str(pkt, 47, "2"); 4502 yahoo_packet_hash_str(pkt, 47, "2");
4503 else if (!purple_status_is_available(status))
4504 yahoo_packet_hash_str(pkt, 47, "1");
4505 4503
4506 yahoo_packet_send_and_free(pkt, yd); 4504 yahoo_packet_send_and_free(pkt, yd);
4507 4505
4508 if (old_status == YAHOO_STATUS_INVISIBLE) { 4506 if (old_status == YAHOO_STATUS_INVISIBLE) {
4509 pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_VISIBLE_TOGGLE, YAHOO_STATUS_AVAILABLE, yd->session_id); 4507 pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_VISIBLE_TOGGLE, YAHOO_STATUS_AVAILABLE, yd->session_id);
4520 { 4518 {
4521 YahooData *yd = gc->proto_data; 4519 YahooData *yd = gc->proto_data;
4522 struct yahoo_packet *pkt = NULL; 4520 struct yahoo_packet *pkt = NULL;
4523 char *msg = NULL, *msg2 = NULL; 4521 char *msg = NULL, *msg2 = NULL;
4524 PurpleStatus *status = NULL; 4522 PurpleStatus *status = NULL;
4523 gboolean invisible = FALSE;
4525 4524
4526 if (idle && yd->current_status != YAHOO_STATUS_CUSTOM) 4525 if (idle && yd->current_status != YAHOO_STATUS_CUSTOM)
4527 yd->current_status = YAHOO_STATUS_IDLE; 4526 yd->current_status = YAHOO_STATUS_IDLE;
4528 else if (!idle && yd->current_status == YAHOO_STATUS_IDLE) { 4527 else if (!idle && yd->current_status == YAHOO_STATUS_IDLE) {
4529 status = purple_presence_get_active_status(purple_account_get_presence(purple_connection_get_account(gc))); 4528 status = purple_presence_get_active_status(purple_account_get_presence(purple_connection_get_account(gc)));
4530 yd->current_status = get_yahoo_status_from_purple_status(status); 4529 yd->current_status = get_yahoo_status_from_purple_status(status);
4531 } 4530 }
4532 4531
4532 invisible = !( purple_presence_is_available(purple_account_get_presence(purple_connection_get_account(gc))) );
4533
4533 pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_STATUS_UPDATE, YAHOO_STATUS_AVAILABLE, yd->session_id); 4534 pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_STATUS_UPDATE, YAHOO_STATUS_AVAILABLE, yd->session_id);
4534 4535
4535 yahoo_packet_hash_int(pkt, 10, yd->current_status); 4536 if (!idle && invisible)
4537 yahoo_packet_hash_int(pkt, 10, YAHOO_STATUS_AVAILABLE);
4538 else
4539 yahoo_packet_hash_int(pkt, 10, yd->current_status);
4540
4536 if (yd->current_status == YAHOO_STATUS_CUSTOM) { 4541 if (yd->current_status == YAHOO_STATUS_CUSTOM) {
4537 const char *tmp; 4542 const char *tmp;
4538 if (status == NULL) 4543 if (status == NULL)
4539 status = purple_presence_get_active_status(purple_account_get_presence(purple_connection_get_account(gc))); 4544 status = purple_presence_get_active_status(purple_account_get_presence(purple_connection_get_account(gc)));
4540 tmp = purple_status_get_attr_string(status, "message"); 4545 tmp = purple_status_get_attr_string(status, "message");
4553 yahoo_packet_hash_str(pkt, 19, ""); 4558 yahoo_packet_hash_str(pkt, 19, "");
4554 } 4559 }
4555 4560
4556 if (idle) 4561 if (idle)
4557 yahoo_packet_hash_str(pkt, 47, "2"); 4562 yahoo_packet_hash_str(pkt, 47, "2");
4558 else if (!purple_presence_is_available(purple_account_get_presence(purple_connection_get_account(gc))))
4559 yahoo_packet_hash_str(pkt, 47, "1");
4560 4563
4561 yahoo_packet_send_and_free(pkt, yd); 4564 yahoo_packet_send_and_free(pkt, yd);
4562 4565
4563 g_free(msg); 4566 g_free(msg);
4564 g_free(msg2); 4567 g_free(msg2);