| 75 135, yd->jp ? YAHOO_CLIENT_VERSION : YAHOOJP_CLIENT_VERSION); |
75 135, yd->jp ? YAHOO_CLIENT_VERSION : YAHOOJP_CLIENT_VERSION); |
| 76 yahoo_packet_send_and_free(pkt, yd); |
76 yahoo_packet_send_and_free(pkt, yd); |
| 77 } |
77 } |
| 78 |
78 |
| 79 /* this is slow, and different from the purple_* version in that it (hopefully) won't add a user twice */ |
79 /* this is slow, and different from the purple_* version in that it (hopefully) won't add a user twice */ |
| 80 void yahoo_chat_add_users(PurpleConvChat *chat, GList *newusers) |
80 void yahoo_chat_add_users(PurpleChatConversation *chat, GList *newusers) |
| 81 { |
81 { |
| 82 GList *i; |
82 GList *i; |
| 83 |
83 |
| 84 for (i = newusers; i; i = i->next) { |
84 for (i = newusers; i; i = i->next) { |
| 85 if (purple_conv_chat_find_user(chat, i->data)) |
85 if (purple_chat_conversation_find_user(chat, i->data)) |
| 86 continue; |
86 continue; |
| 87 purple_conv_chat_add_user(chat, i->data, NULL, PURPLE_CBFLAGS_NONE, TRUE); |
87 purple_chat_conversation_add_user(chat, i->data, NULL, PURPLE_CHAT_CONVERSATION_BUDDY_NONE, TRUE); |
| 88 } |
88 } |
| 89 } |
89 } |
| 90 |
90 |
| 91 void yahoo_chat_add_user(PurpleConvChat *chat, const char *user, const char *reason) |
91 void yahoo_chat_add_user(PurpleChatConversation *chat, const char *user, const char *reason) |
| 92 { |
92 { |
| 93 if (purple_conv_chat_find_user(chat, user)) |
93 if (purple_chat_conversation_find_user(chat, user)) |
| 94 return; |
94 return; |
| 95 |
95 |
| 96 purple_conv_chat_add_user(chat, user, reason, PURPLE_CBFLAGS_NONE, TRUE); |
96 purple_chat_conversation_add_user(chat, user, reason, PURPLE_CHAT_CONVERSATION_BUDDY_NONE, TRUE); |
| 97 } |
97 } |
| 98 |
98 |
| 99 static PurpleConversation *yahoo_find_conference(PurpleConnection *gc, const char *name) |
99 static PurpleConversation *yahoo_find_conference(PurpleConnection *gc, const char *name) |
| 100 { |
100 { |
| 101 YahooData *yd; |
101 YahooData *yd; |
| 538 |
538 |
| 539 if (room && yd->chat_name && purple_utf8_strcasecmp(room, yd->chat_name)) |
539 if (room && yd->chat_name && purple_utf8_strcasecmp(room, yd->chat_name)) |
| 540 yahoo_chat_leave(gc, room, |
540 yahoo_chat_leave(gc, room, |
| 541 purple_connection_get_display_name(gc), FALSE); |
541 purple_connection_get_display_name(gc), FALSE); |
| 542 |
542 |
| 543 c = purple_find_chat(gc, YAHOO_CHAT_ID); |
543 c = purple_conversations_find_chat(gc, YAHOO_CHAT_ID); |
| 544 |
544 |
| 545 if (room && (!c || purple_conv_chat_has_left(PURPLE_CONV_CHAT(c))) && |
545 if (room && (!c || purple_chat_conversation_has_left(PURPLE_CONV_CHAT(c))) && |
| 546 members && (members->next || |
546 members && (members->next || |
| 547 !g_ascii_strcasecmp(members->data, purple_connection_get_display_name(gc)))) { |
547 !g_ascii_strcasecmp(members->data, purple_connection_get_display_name(gc)))) { |
| 548 GList *l; |
548 GList *l; |
| 549 GList *flags = NULL; |
549 GList *flags = NULL; |
| 550 for (l = members; l; l = l->next) |
550 for (l = members; l; l = l->next) |
| 551 flags = g_list_prepend(flags, GINT_TO_POINTER(PURPLE_CBFLAGS_NONE)); |
551 flags = g_list_prepend(flags, GINT_TO_POINTER(PURPLE_CHAT_CONVERSATION_BUDDY_NONE)); |
| 552 if (c && purple_conv_chat_has_left(PURPLE_CONV_CHAT(c))) { |
552 if (c && purple_chat_conversation_has_left(PURPLE_CONV_CHAT(c))) { |
| 553 /* this might be a hack, but oh well, it should nicely */ |
553 /* this might be a hack, but oh well, it should nicely */ |
| 554 char *tmpmsg; |
554 char *tmpmsg; |
| 555 |
555 |
| 556 purple_conversation_set_name(c, room); |
556 purple_conversation_set_name(c, room); |
| 557 |
557 |
| 558 c = serv_got_joined_chat(gc, YAHOO_CHAT_ID, room); |
558 c = serv_got_joined_chat(gc, YAHOO_CHAT_ID, room); |
| 559 if (topic) { |
559 if (topic) { |
| 560 purple_conv_chat_set_topic(PURPLE_CONV_CHAT(c), NULL, topic); |
560 purple_chat_conversation_set_topic(PURPLE_CONV_CHAT(c), NULL, topic); |
| 561 /* Also print the topic to the backlog so that the captcha link is clickable */ |
561 /* Also print the topic to the backlog so that the captcha link is clickable */ |
| 562 purple_conv_chat_write(PURPLE_CONV_CHAT(c), "", topic, PURPLE_MESSAGE_SYSTEM, time(NULL)); |
562 purple_chat_conversation_write_message(PURPLE_CONV_CHAT(c), "", topic, PURPLE_MESSAGE_SYSTEM, time(NULL)); |
| 563 } |
563 } |
| 564 yd->in_chat = 1; |
564 yd->in_chat = 1; |
| 565 yd->chat_name = g_strdup(room); |
565 yd->chat_name = g_strdup(room); |
| 566 purple_conv_chat_add_users(PURPLE_CONV_CHAT(c), members, NULL, flags, FALSE); |
566 purple_chat_conversation_add_users(PURPLE_CONV_CHAT(c), members, NULL, flags, FALSE); |
| 567 |
567 |
| 568 tmpmsg = g_strdup_printf(_("You are now chatting in %s."), room); |
568 tmpmsg = g_strdup_printf(_("You are now chatting in %s."), room); |
| 569 purple_conv_chat_write(PURPLE_CONV_CHAT(c), "", tmpmsg, PURPLE_MESSAGE_SYSTEM, time(NULL)); |
569 purple_chat_conversation_write_message(PURPLE_CONV_CHAT(c), "", tmpmsg, PURPLE_MESSAGE_SYSTEM, time(NULL)); |
| 570 g_free(tmpmsg); |
570 g_free(tmpmsg); |
| 571 } else { |
571 } else { |
| 572 c = serv_got_joined_chat(gc, YAHOO_CHAT_ID, room); |
572 c = serv_got_joined_chat(gc, YAHOO_CHAT_ID, room); |
| 573 if (topic) { |
573 if (topic) { |
| 574 purple_conv_chat_set_topic(PURPLE_CONV_CHAT(c), NULL, topic); |
574 purple_chat_conversation_set_topic(PURPLE_CONV_CHAT(c), NULL, topic); |
| 575 /* Also print the topic to the backlog so that the captcha link is clickable */ |
575 /* Also print the topic to the backlog so that the captcha link is clickable */ |
| 576 purple_conv_chat_write(PURPLE_CONV_CHAT(c), "", topic, PURPLE_MESSAGE_SYSTEM, time(NULL)); |
576 purple_chat_conversation_write_message(PURPLE_CONV_CHAT(c), "", topic, PURPLE_MESSAGE_SYSTEM, time(NULL)); |
| 577 } |
577 } |
| 578 yd->in_chat = 1; |
578 yd->in_chat = 1; |
| 579 yd->chat_name = g_strdup(room); |
579 yd->chat_name = g_strdup(room); |
| 580 purple_conv_chat_add_users(PURPLE_CONV_CHAT(c), members, NULL, flags, FALSE); |
580 purple_chat_conversation_add_users(PURPLE_CONV_CHAT(c), members, NULL, flags, FALSE); |
| 581 } |
581 } |
| 582 g_list_free(flags); |
582 g_list_free(flags); |
| 583 } else if (c) { |
583 } else if (c) { |
| 584 if (topic) { |
584 if (topic) { |
| 585 const char *cur_topic = purple_conv_chat_get_topic(PURPLE_CONV_CHAT(c)); |
585 const char *cur_topic = purple_chat_conversation_get_topic(PURPLE_CONV_CHAT(c)); |
| 586 if (cur_topic == NULL || strcmp(cur_topic, topic) != 0) |
586 if (cur_topic == NULL || strcmp(cur_topic, topic) != 0) |
| 587 purple_conv_chat_set_topic(PURPLE_CONV_CHAT(c), NULL, topic); |
587 purple_chat_conversation_set_topic(PURPLE_CONV_CHAT(c), NULL, topic); |
| 588 } |
588 } |
| 589 yahoo_chat_add_users(PURPLE_CONV_CHAT(c), members); |
589 yahoo_chat_add_users(PURPLE_CONV_CHAT(c), members); |
| 590 } |
590 } |
| 591 |
591 |
| 592 if (purple_account_privacy_get_denied(account) && c) { |
592 if (purple_account_privacy_get_denied(account) && c) { |
| 593 PurpleConversationUiOps *ops = purple_conversation_get_ui_ops(c); |
593 PurpleConversationUiOps *ops = purple_conversation_get_ui_ops(c); |
| 594 for (l = purple_account_privacy_get_denied(account); l != NULL; l = l->next) { |
594 for (l = purple_account_privacy_get_denied(account); l != NULL; l = l->next) { |
| 595 for (roomies = members; roomies; roomies = roomies->next) { |
595 for (roomies = members; roomies; roomies = roomies->next) { |
| 596 if (!purple_utf8_strcasecmp((char *)l->data, roomies->data)) { |
596 if (!purple_utf8_strcasecmp((char *)l->data, roomies->data)) { |
| 597 purple_debug_info("yahoo", "Ignoring room member %s in room %s\n" , (char *)roomies->data, room ? room : ""); |
597 purple_debug_info("yahoo", "Ignoring room member %s in room %s\n" , (char *)roomies->data, room ? room : ""); |
| 598 purple_conv_chat_ignore(PURPLE_CONV_CHAT(c),roomies->data); |
598 purple_chat_conversation_ignore(PURPLE_CONV_CHAT(c),roomies->data); |
| 599 ops->chat_update_user(c, roomies->data); |
599 ops->chat_update_user(c, roomies->data); |
| 600 } |
600 } |
| 601 } |
601 } |
| 602 } |
602 } |
| 603 } |
603 } |
| 792 |
792 |
| 793 pkt = yahoo_packet_new(YAHOO_SERVICE_CONFMSG, YAHOO_STATUS_AVAILABLE, yd->session_id); |
793 pkt = yahoo_packet_new(YAHOO_SERVICE_CONFMSG, YAHOO_STATUS_AVAILABLE, yd->session_id); |
| 794 |
794 |
| 795 yahoo_packet_hash_str(pkt, 1, dn); |
795 yahoo_packet_hash_str(pkt, 1, dn); |
| 796 for (who = members; who; who = who->next) { |
796 for (who = members; who; who = who->next) { |
| 797 const char *name = purple_conv_chat_cb_get_name(who->data); |
797 const char *name = purple_chat_conversation_cb_get_name(who->data); |
| 798 yahoo_packet_hash_str(pkt, 53, name); |
798 yahoo_packet_hash_str(pkt, 53, name); |
| 799 } |
799 } |
| 800 yahoo_packet_hash(pkt, "ss", 57, room, 14, msg2); |
800 yahoo_packet_hash(pkt, "ss", 57, room, 14, msg2); |
| 801 if (utf8) |
801 if (utf8) |
| 802 yahoo_packet_hash_str(pkt, 97, "1"); /* utf-8 */ |
802 yahoo_packet_hash_str(pkt, 97, "1"); /* utf-8 */ |
| 844 char *msg2 = NULL; |
844 char *msg2 = NULL; |
| 845 |
845 |
| 846 if (msg) |
846 if (msg) |
| 847 msg2 = yahoo_string_encode(gc, msg, NULL); |
847 msg2 = yahoo_string_encode(gc, msg, NULL); |
| 848 |
848 |
| 849 members = purple_conv_chat_get_users(PURPLE_CONV_CHAT(c)); |
849 members = purple_chat_conversation_get_users(PURPLE_CONV_CHAT(c)); |
| 850 |
850 |
| 851 pkt = yahoo_packet_new(YAHOO_SERVICE_CONFADDINVITE, YAHOO_STATUS_AVAILABLE, yd->session_id); |
851 pkt = yahoo_packet_new(YAHOO_SERVICE_CONFADDINVITE, YAHOO_STATUS_AVAILABLE, yd->session_id); |
| 852 |
852 |
| 853 yahoo_packet_hash(pkt, "sssss", 1, dn, 51, buddy, 57, room, 58, msg?msg2:"", 13, "0"); |
853 yahoo_packet_hash(pkt, "sssss", 1, dn, 51, buddy, 57, room, 58, msg?msg2:"", 13, "0"); |
| 854 for(; members; members = members->next) { |
854 for(; members; members = members->next) { |
| 855 const char *name = purple_conv_chat_cb_get_name(members->data); |
855 const char *name = purple_chat_conversation_cb_get_name(members->data); |
| 856 if (!strcmp(name, dn)) |
856 if (!strcmp(name, dn)) |
| 857 continue; |
857 continue; |
| 858 yahoo_packet_hash(pkt, "ss", 52, name, 53, name); |
858 yahoo_packet_hash(pkt, "ss", 52, name, 53, name); |
| 859 } |
859 } |
| 860 |
860 |
| 1053 |
1053 |
| 1054 yd = purple_connection_get_protocol_data(gc); |
1054 yd = purple_connection_get_protocol_data(gc); |
| 1055 if (!yd) |
1055 if (!yd) |
| 1056 return -1; |
1056 return -1; |
| 1057 |
1057 |
| 1058 c = purple_find_chat(gc, id); |
1058 c = purple_conversations_find_chat(gc, id); |
| 1059 if (!c) |
1059 if (!c) |
| 1060 return -1; |
1060 return -1; |
| 1061 |
1061 |
| 1062 if (id != YAHOO_CHAT_ID) { |
1062 if (id != YAHOO_CHAT_ID) { |
| 1063 ret = yahoo_conf_send(gc, purple_connection_get_display_name(gc), |
1063 ret = yahoo_conf_send(gc, purple_connection_get_display_name(gc), |
| 1064 purple_conversation_get_name(c), purple_conv_chat_get_users(PURPLE_CONV_CHAT(c)), what); |
1064 purple_conversation_get_name(c), purple_chat_conversation_get_users(PURPLE_CONV_CHAT(c)), what); |
| 1065 } else { |
1065 } else { |
| 1066 ret = yahoo_chat_send(gc, purple_connection_get_display_name(gc), |
1066 ret = yahoo_chat_send(gc, purple_connection_get_display_name(gc), |
| 1067 purple_conversation_get_name(c), what, flags); |
1067 purple_conversation_get_name(c), what, flags); |
| 1068 if (!ret) |
1068 if (!ret) |
| 1069 serv_got_chat_in(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(c)), |
1069 serv_got_chat_in(gc, purple_chat_conversation_get_id(PURPLE_CONV_CHAT(c)), |
| 1070 purple_connection_get_display_name(gc), flags, what, time(NULL)); |
1070 purple_connection_get_display_name(gc), flags, what, time(NULL)); |
| 1071 } |
1071 } |
| 1072 return ret; |
1072 return ret; |
| 1073 } |
1073 } |
| 1074 |
1074 |