| 396 buddy->name = g_strdup(name); |
396 buddy->name = g_strdup(name); |
| 397 buddy->state = state; |
397 buddy->state = state; |
| 398 buddy->msg = msg ? g_strdup(msg) : NULL; |
398 buddy->msg = msg ? g_strdup(msg) : NULL; |
| 399 yd->login = g_slist_append(yd->login, buddy); |
399 yd->login = g_slist_append(yd->login, buddy); |
| 400 break; |
400 break; |
| |
401 case 60: /* uh */ |
| |
402 while (yd->login) { |
| |
403 buddy = yd->login->data; |
| |
404 state = buddy->state; |
| |
405 yd->login = g_slist_remove(yd->login, buddy); |
| |
406 if (state == YAHOO_STATUS_AVAILABLE) |
| |
407 serv_got_update(gc, buddy->name, 1, 0, 0, 0, 0, 0); |
| |
408 else if (state == YAHOO_STATUS_IDLE) |
| |
409 serv_got_update(gc, buddy->name, 1, 0, 0, time(NULL) - 600, |
| |
410 (state << 1), 0); |
| |
411 else |
| |
412 serv_got_update(gc, buddy->name, 1, 0, 0, 0, |
| |
413 (state << 1) | UC_UNAVAILABLE, 0); |
| |
414 if (state == YAHOO_STATUS_CUSTOM) { |
| |
415 gpointer val = g_hash_table_lookup(yd->hash, buddy->name); |
| |
416 if (val) { |
| |
417 g_free(val); |
| |
418 g_hash_table_insert(yd->hash, buddy->name, |
| |
419 g_strdup(buddy->msg)); |
| |
420 } else |
| |
421 g_hash_table_insert(yd->hash, g_strdup(buddy->name), |
| |
422 g_strdup(buddy->msg)); |
| |
423 } |
| |
424 g_free(buddy->msg); |
| |
425 g_free(buddy->name); |
| |
426 g_free(buddy); |
| |
427 } |
| |
428 break; |
| 401 default: |
429 default: |
| 402 debug_printf("unknown login key %d\n", pair->key); |
430 debug_printf("unknown login key %d\n", pair->key); |
| 403 break; |
431 break; |
| 404 } |
432 } |
| 405 |
433 |
| 639 switch (pkt->service) |
667 switch (pkt->service) |
| 640 { |
668 { |
| 641 case YAHOO_SERVICE_LOGON: |
669 case YAHOO_SERVICE_LOGON: |
| 642 yahoo_process_logon(gc, pkt); |
670 yahoo_process_logon(gc, pkt); |
| 643 break; |
671 break; |
| |
672 case YAHOO_SERVICE_LOGOFF: |
| 644 case YAHOO_SERVICE_ISAWAY: |
673 case YAHOO_SERVICE_ISAWAY: |
| 645 case YAHOO_SERVICE_ISBACK: |
674 case YAHOO_SERVICE_ISBACK: |
| 646 yahoo_process_status(gc, pkt); |
675 yahoo_process_status(gc, pkt); |
| 647 break; |
676 break; |
| 648 case YAHOO_SERVICE_MESSAGE: |
677 case YAHOO_SERVICE_MESSAGE: |