src/protocols/yahoo/yahoochat.c

Thu, 30 Jun 2005 05:41:43 +0000

author
Peter Lawler <pidgin@bleeter.id.au>
date
Thu, 30 Jun 2005 05:41:43 +0000
changeset 11044
d6f32a4f0947
parent 11043
763427cecd21
child 11318
13fa1d5134f3
permissions
-rw-r--r--

[gaim-migrate @ 12958]
Patch #1229320 from Bleeter

"I couldn't get anyone to confirm that doing this is correct, however to me it would seem that I'm leaking on a couple of the privacy_checks inside the yahoo prpl. Here's a fix. This also includes privacy wrapper for the conference decline function, used in some booters."

(00:37:39) Bleeter: ... we're returning out of the function, and those things are freed further down if the function isn't returned
(00:38:18) Bleeter: so it makes sense to free them before the return. I'm just unsure because they'reprevious patches which were applied without these checks being picked up

That makes sense to me. It looks good.

committer: Richard Laager <rlaager@pidgin.im>

6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1 /*
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
2 * gaim
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
3 *
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7868
diff changeset
4 * Gaim is the legal property of its developers, whose names are too numerous
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7868
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7868
diff changeset
6 * source distribution.
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7868
diff changeset
7 *
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
8 * Some code copyright 2003 Tim Ringenbach <omarvo@hotmail.com>
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
9 * (marv on irc.freenode.net)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
10 * Some code borrowed from libyahoo2, copyright (C) 2002, Philip
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
11 * S Tellis <philip . tellis AT gmx . net>
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
12 *
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
13 * This program is free software; you can redistribute it and/or modify
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
14 * it under the terms of the GNU General Public License as published by
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
15 * the Free Software Foundation; either version 2 of the License, or
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
16 * (at your option) any later version.
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
17 *
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
18 * This program is distributed in the hope that it will be useful,
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
21 * GNU General Public License for more details.
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
22 *
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
23 * You should have received a copy of the GNU General Public License
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
24 * along with this program; if not, write to the Free Software
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
26 *
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
27 */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
28
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
29 #ifdef HAVE_CONFIG_H
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
30 #include "config.h"
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
31 #endif
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
32
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
33 #include "debug.h"
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
34 #include "privacy.h"
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
35 #include "prpl.h"
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
36
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
37 #include "conversation.h"
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
38 #include "notify.h"
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
39 #include "util.h"
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
40 #include "internal.h"
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
41
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
42 #include "yahoo.h"
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
43 #include "yahoo_packet.h"
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
44 #include "yahoochat.h"
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
45 #include "ycht.h"
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
46
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
47 #define YAHOO_CHAT_ID (1)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
48
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
49 /* prototype(s) */
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
50 static void yahoo_chat_leave(GaimConnection *gc, const char *room, const char *dn, gboolean logout);
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
51
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
52 /* special function to log us on to the yahoo chat service */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
53 static void yahoo_chat_online(GaimConnection *gc)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
54 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
55 struct yahoo_data *yd = gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
56 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
57
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
58 if (yd->wm) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
59 ycht_connection_open(gc);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
60 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
61 }
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
62
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
63 pkt = yahoo_packet_new(YAHOO_SERVICE_CHATONLINE, YAHOO_STATUS_AVAILABLE,0);
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
64 yahoo_packet_hash(pkt, "sss", 1, gaim_connection_get_display_name(gc),
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
65 109, gaim_connection_get_display_name(gc), 6, "abcde");
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
66 yahoo_packet_send_and_free(pkt, yd);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
67 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
68
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
69 /* this is slow, and different from the gaim_* version in that it (hopefully) won't add a user twice */
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
70 void yahoo_chat_add_users(GaimConvChat *chat, GList *newusers)
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
71 {
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
72 GList *i;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
73
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
74 for (i = newusers; i; i = i->next) {
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
75 if (gaim_conv_chat_find_user(chat, i->data))
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
76 continue;
9846
61f7349c153a [gaim-migrate @ 10724]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9782
diff changeset
77 gaim_conv_chat_add_user(chat, i->data, NULL, GAIM_CBFLAGS_NONE, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
78 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
79 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
80
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
81 void yahoo_chat_add_user(GaimConvChat *chat, const char *user, const char *reason)
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
82 {
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
83 if (gaim_conv_chat_find_user(chat, user))
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
84 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
85
9846
61f7349c153a [gaim-migrate @ 10724]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9782
diff changeset
86 gaim_conv_chat_add_user(chat, user, reason, GAIM_CBFLAGS_NONE, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
87 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
88
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
89 static GaimConversation *yahoo_find_conference(GaimConnection *gc, const char *name)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
90 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
91 struct yahoo_data *yd;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
92 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
93
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
94 yd = gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
95
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
96 for (l = yd->confs; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
97 GaimConversation *c = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
98 if (!gaim_utf8_strcasecmp(gaim_conversation_get_name(c), name))
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
99 return c;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
100 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
101 return NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
102 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
103
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
104
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
105 void yahoo_process_conference_invite(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
106 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
107 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
108 char *room = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
109 char *who = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
110 char *msg = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
111 GString *members = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
112 GHashTable *components;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
113
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
114
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
115 if (pkt->status == 2)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
116 return; /* XXX */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
117
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
118 members = g_string_sized_new(512);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
119
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
120 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
121 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
122
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
123 switch (pair->key) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
124 case 1: /* us, but we already know who we are */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
125 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
126 case 57:
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
127 room = yahoo_string_decode(gc, pair->value, FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
128 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
129 case 50: /* inviter */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
130 who = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
131 g_string_append_printf(members, "%s\n", who);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
132 break;
9780
99680462fa73 [gaim-migrate @ 10648]
Peter Lawler <pidgin@bleeter.id.au>
parents: 9768
diff changeset
133 case 52: /* invitee (me) */
99680462fa73 [gaim-migrate @ 10648]
Peter Lawler <pidgin@bleeter.id.au>
parents: 9768
diff changeset
134 case 53: /* members */
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
135 g_string_append_printf(members, "%s\n", pair->value);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
136 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
137 case 58:
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
138 msg = yahoo_string_decode(gc, pair->value, FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
139 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
140 case 13: /* ? */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
141 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
142 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
143 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
144
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
145 if (!room) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
146 g_string_free(members, TRUE);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
147 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
148 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
149
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
150 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
151 g_hash_table_replace(components, g_strdup("room"), room);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
152 if (msg)
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
153 g_hash_table_replace(components, g_strdup("topic"), msg);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
154 g_hash_table_replace(components, g_strdup("type"), g_strdup("Conference"));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
155 if (members) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
156 g_hash_table_replace(components, g_strdup("members"), g_strdup(members->str));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
157 }
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
158 if (!yahoo_privacy_check(gc, who)) {
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
159 gaim_debug_info("yahoo",
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
160 "Invite to conference %s from %s has been dropped.\n", room, who);
11044
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
161 g_string_free(members, TRUE);
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
162 return;
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
163 }
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
164 serv_got_chat_invite(gc, room, who, msg, components);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
165
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
166 g_string_free(members, TRUE);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
167 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
168
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
169 void yahoo_process_conference_decline(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
170 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
171 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
172 char *room = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
173 char *who = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
174 char *msg = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
175
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
176 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
177 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
178
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
179 switch (pair->key) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
180 case 57:
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
181 room = yahoo_string_decode(gc, pair->value, FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
182 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
183 case 54:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
184 who = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
185 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
186 case 14:
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
187 msg = yahoo_string_decode(gc, pair->value, FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
188 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
189 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
190 }
11044
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
191 if (!yahoo_privacy_check(gc, who)) {
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
192 g_free(room);
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
193 if (msg != NULL)
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
194 g_free(msg);
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
195 return;
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
196 }
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
197
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
198 if (who && room) {
9575
05d67cceb912 [gaim-migrate @ 10418]
Tim Ringenbach <marv@pidgin.im>
parents: 9554
diff changeset
199 /* make sure we're in the room before we process a decline message for it */
9576
262264707447 [gaim-migrate @ 10419]
Tim Ringenbach <marv@pidgin.im>
parents: 9575
diff changeset
200 if(yahoo_find_conference(gc, room)) {
9575
05d67cceb912 [gaim-migrate @ 10418]
Tim Ringenbach <marv@pidgin.im>
parents: 9554
diff changeset
201 char *tmp;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
202
9575
05d67cceb912 [gaim-migrate @ 10418]
Tim Ringenbach <marv@pidgin.im>
parents: 9554
diff changeset
203 tmp = g_strdup_printf(_("%s declined your conference invitation to room \"%s\" because \"%s\"."),
05d67cceb912 [gaim-migrate @ 10418]
Tim Ringenbach <marv@pidgin.im>
parents: 9554
diff changeset
204 who, room, msg?msg:"");
05d67cceb912 [gaim-migrate @ 10418]
Tim Ringenbach <marv@pidgin.im>
parents: 9554
diff changeset
205 gaim_notify_info(gc, NULL, _("Invitation Rejected"), tmp);
05d67cceb912 [gaim-migrate @ 10418]
Tim Ringenbach <marv@pidgin.im>
parents: 9554
diff changeset
206 g_free(tmp);
05d67cceb912 [gaim-migrate @ 10418]
Tim Ringenbach <marv@pidgin.im>
parents: 9554
diff changeset
207 }
05d67cceb912 [gaim-migrate @ 10418]
Tim Ringenbach <marv@pidgin.im>
parents: 9554
diff changeset
208
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
209 g_free(room);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
210 if (msg)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
211 g_free(msg);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
212 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
213 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
214
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
215 void yahoo_process_conference_logon(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
216 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
217 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
218 char *room = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
219 char *who = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
220 GaimConversation *c;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
221
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
222 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
223 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
224
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
225 switch (pair->key) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
226 case 57:
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
227 room = yahoo_string_decode(gc, pair->value, FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
228 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
229 case 53:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
230 who = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
231 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
232 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
233 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
234
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
235 if (who && room) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
236 c = yahoo_find_conference(gc, room);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
237 if (c)
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
238 yahoo_chat_add_user(GAIM_CONV_CHAT(c), who, NULL);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
239 g_free(room);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
240 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
241 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
242
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
243 void yahoo_process_conference_logoff(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
244 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
245 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
246 char *room = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
247 char *who = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
248 GaimConversation *c;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
249
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
250 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
251 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
252
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
253 switch (pair->key) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
254 case 57:
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
255 room = yahoo_string_decode(gc, pair->value, FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
256 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
257 case 56:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
258 who = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
259 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
260 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
261 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
262
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
263 if (who && room) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
264 c = yahoo_find_conference(gc, room);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
265 if (c)
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
266 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(c), who, NULL);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
267 g_free(room);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
268 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
269 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
270
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
271 void yahoo_process_conference_message(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
272 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
273 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
274 char *room = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
275 char *who = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
276 char *msg = NULL;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
277 char *msg2;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
278 int utf8 = 0;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
279 GaimConversation *c;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
280
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
281 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
282 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
283
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
284 switch (pair->key) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
285 case 57:
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
286 room = yahoo_string_decode(gc, pair->value, FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
287 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
288 case 3:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
289 who = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
290 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
291 case 14:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
292 msg = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
293 break;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
294 case 97:
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
295 utf8 = strtol(pair->value, NULL, 10);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
296 break;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
297 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
298 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
299
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
300 if (room && who && msg) {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
301 msg2 = yahoo_string_decode(gc, msg, utf8);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
302 c = yahoo_find_conference(gc, room);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
303 if (!c)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
304 return;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
305 msg = yahoo_codes_to_html(msg2);
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
306 serv_got_chat_in(gc, gaim_conv_chat_get_id(GAIM_CONV_CHAT(c)), who, 0, msg, time(NULL));
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
307 g_free(msg);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
308 g_free(msg2);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
309 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
310 if (room)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
311 g_free(room);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
312 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
313
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
314
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8584
diff changeset
315 /* this is a confirmation of yahoo_chat_online(); */
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
316 void yahoo_process_chat_online(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
317 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
318 struct yahoo_data *yd = (struct yahoo_data *) gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
319
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
320 if (pkt->status == 1)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
321 yd->chat_online = 1;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
322 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
323
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
324 /* this is basicly the opposite of chat_online */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
325 void yahoo_process_chat_logout(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
326 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
327 struct yahoo_data *yd = (struct yahoo_data *) gc->proto_data;
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
328 GSList *l;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
329
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
330 for (l = pkt->hash; l; l = l->next) {
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
331 struct yahoo_pair *pair = l->data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
332
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
333 if (pair->key == 1)
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
334 if (g_ascii_strcasecmp(pair->value,
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
335 gaim_connection_get_display_name(gc)))
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
336 return;
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
337 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
338
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
339 if (pkt->status == 1) {
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
340 yd->chat_online = 0;
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
341 if (yd->in_chat)
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
342 yahoo_c_leave(gc, YAHOO_CHAT_ID);
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
343 }
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
344 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
345
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
346 void yahoo_process_chat_join(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
347 {
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
348 GaimAccount *account = gaim_connection_get_account(gc);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
349 struct yahoo_data *yd = (struct yahoo_data *) gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
350 GaimConversation *c = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
351 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
352 GList *members = NULL;
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
353 GList *roomies = NULL;
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
354 GaimConversationUiOps *ops;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
355 char *room = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
356 char *topic = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
357 char *someid, *someotherid, *somebase64orhashosomething, *somenegativenumber;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
358
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
359 if (pkt->status == -1) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
360 gaim_notify_error(gc, NULL, _("Failed to join chat"), _("Maybe the room is full?"));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
361 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
362 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
363
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
364 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
365 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
366
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
367 switch (pair->key) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
368
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
369 case 104:
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
370 room = yahoo_string_decode(gc, pair->value, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
371 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
372 case 105:
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
373 topic = yahoo_string_decode(gc, pair->value, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
374 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
375 case 128:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
376 someid = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
377 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
378 case 108: /* number of joiners */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
379 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
380 case 129:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
381 someotherid = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
382 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
383 case 130:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
384 somebase64orhashosomething = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
385 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
386 case 126:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
387 somenegativenumber = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
388 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
389 case 13: /* this is 1. maybe its the type of room? (normal, user created, private, etc?) */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
390 break;
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8584
diff changeset
391 case 61: /*this looks similar to 130 */
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
392 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
393
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
394 /* the previous section was just room info. this next section is
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
395 info about individual room members, (including us) */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
396
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
397 case 109: /* the yahoo id */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
398 members = g_list_append(members, pair->value);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
399 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
400 case 110: /* age */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
401 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
402 case 141: /* nickname */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
403 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
404 case 142: /* location */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
405 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
406 case 113: /* bitmask */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
407 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
408 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
409 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
410
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
411
9329
443126edd567 [gaim-migrate @ 10137]
Tim Ringenbach <marv@pidgin.im>
parents: 9227
diff changeset
412 if (room && yd->chat_name && gaim_utf8_strcasecmp(room, yd->chat_name))
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
413 yahoo_chat_leave(gc, room,
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
414 gaim_connection_get_display_name(gc), FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
415
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
416 c = gaim_find_chat(gc, YAHOO_CHAT_ID);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
417
9329
443126edd567 [gaim-migrate @ 10137]
Tim Ringenbach <marv@pidgin.im>
parents: 9227
diff changeset
418 if (room && (!c || gaim_conv_chat_has_left(GAIM_CONV_CHAT(c))) && members &&
8357
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
419 ((g_list_length(members) > 1) ||
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
420 !g_ascii_strcasecmp(members->data, gaim_connection_get_display_name(gc)))) {
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
421 int i;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
422 GList *flags = NULL;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
423 for (i = 0; i < g_list_length(members); i++)
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
424 flags = g_list_append(flags, GINT_TO_POINTER(GAIM_CBFLAGS_NONE));
8357
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
425 if (c && gaim_conv_chat_has_left(GAIM_CONV_CHAT(c))) {
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
426 /* this might be a hack, but oh well, it should nicely */
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
427 char *tmpmsg;
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
428
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
429 gaim_conversation_set_name(c, room);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
430
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
431 c = serv_got_joined_chat(gc, YAHOO_CHAT_ID, room);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
432 if (topic)
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
433 gaim_conv_chat_set_topic(GAIM_CONV_CHAT(c), NULL, topic);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
434 yd->in_chat = 1;
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
435 yd->chat_name = g_strdup(room);
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
436 gaim_conv_chat_add_users(GAIM_CONV_CHAT(c), members, flags);
8357
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
437
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
438 tmpmsg = g_strdup_printf(_("You are now chatting in %s."), room);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
439 gaim_conv_chat_write(GAIM_CONV_CHAT(c), "", tmpmsg, GAIM_MESSAGE_SYSTEM, time(NULL));
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
440 g_free(tmpmsg);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
441 } else {
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
442 c = serv_got_joined_chat(gc, YAHOO_CHAT_ID, room);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
443 if (topic)
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
444 gaim_conv_chat_set_topic(GAIM_CONV_CHAT(c), NULL, topic);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
445 yd->in_chat = 1;
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
446 yd->chat_name = g_strdup(room);
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
447 gaim_conv_chat_add_users(GAIM_CONV_CHAT(c), members, flags);
8357
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
448 }
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
449 } else if (c) {
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
450 yahoo_chat_add_users(GAIM_CONV_CHAT(c), members);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
451 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
452
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
453 ops = gaim_conversation_get_ui_ops(c);
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
454
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
455 for (l = account->deny; l != NULL; l = l->next) {
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
456 for (roomies = members; roomies; roomies = roomies->next) {
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
457 if (!gaim_utf8_strcasecmp((char *)l->data, roomies->data)) {
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
458 gaim_debug_info("yahoo", "Ignoring room member %s in room %s\n" ,roomies->data, room);
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
459 gaim_conv_chat_ignore(GAIM_CONV_CHAT(c),roomies->data);
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
460 ops->chat_update_user((c), roomies->data);
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
461 }
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
462 }
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
463 }
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
464 g_list_free(roomies);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
465 g_list_free(members);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
466 g_free(room);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
467 if (topic)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
468 g_free(topic);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
469 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
470
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
471 void yahoo_process_chat_exit(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
472 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
473 char *who = NULL;
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
474 char *room = NULL;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
475 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
476 struct yahoo_data *yd;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
477
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
478 yd = gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
479
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
480 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
481 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
482
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
483 if (pair->key == 104)
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
484 room = yahoo_string_decode(gc, pair->value, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
485 if (pair->key == 109)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
486 who = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
487 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
488
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
489
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
490 if (who && room) {
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
491 GaimConversation *c = gaim_find_chat(gc, YAHOO_CHAT_ID);
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
492 if (c && !gaim_utf8_strcasecmp(gaim_conversation_get_name(c), room))
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
493 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(c), who, NULL);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
494
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
495 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
496 if (room)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
497 g_free(room);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
498 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
499
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
500 void yahoo_process_chat_message(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
501 {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
502 char *room = NULL, *who = NULL, *msg = NULL, *msg2;
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
503 int msgtype = 1, utf8 = 1; /* default to utf8 */
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
504 GaimConversation *c = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
505 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
506
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
507 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
508 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
509
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
510 switch (pair->key) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
511
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
512 case 97:
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
513 utf8 = strtol(pair->value, NULL, 10);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
514 break;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
515 case 104:
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
516 room = yahoo_string_decode(gc, pair->value, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
517 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
518 case 109:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
519 who = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
520 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
521 case 117:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
522 msg = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
523 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
524 case 124:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
525 msgtype = strtol(pair->value, NULL, 10);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
526 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
527 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
528 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
529
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
530
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
531 c = gaim_find_chat(gc, YAHOO_CHAT_ID);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
532 if (!who || !c) {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
533 if (room)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
534 g_free(room);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
535 /* we still get messages after we part, funny that */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
536 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
537 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
538
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
539 if (!msg) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
540 gaim_debug(GAIM_DEBUG_MISC, "yahoo", "Got a message packet with no message.\nThis probably means something important, but we're ignoring it.\n");
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
541 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
542 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
543 msg2 = yahoo_string_decode(gc, msg, utf8);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
544 msg = yahoo_codes_to_html(msg2);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
545 g_free(msg2);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
546
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
547 if (msgtype == 2 || msgtype == 3) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
548 char *tmp;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
549 tmp = g_strdup_printf("/me %s", msg);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
550 g_free(msg);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
551 msg = tmp;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
552 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
553
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
554 serv_got_chat_in(gc, YAHOO_CHAT_ID, who, 0, msg, time(NULL));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
555 g_free(msg);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
556 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
557
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
558 void yahoo_process_chat_addinvite(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
559 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
560 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
561 char *room = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
562 char *msg = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
563 char *who = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
564
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
565
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
566 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
567 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
568
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
569 switch (pair->key) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
570 case 104:
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
571 room = yahoo_string_decode(gc, pair->value, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
572 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
573 case 129: /* room id? */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
574 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
575 case 126: /* ??? */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
576 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
577 case 117:
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
578 msg = yahoo_string_decode(gc, pair->value, FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
579 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
580 case 119:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
581 who = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
582 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
583 case 118: /* us */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
584 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
585 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
586 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
587
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
588 if (room && who) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
589 GHashTable *components;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
590
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
591 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
592 g_hash_table_replace(components, g_strdup("room"), g_strdup(room));
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
593 if (!yahoo_privacy_check(gc, who)) {
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
594 gaim_debug_info("yahoo",
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
595 "Invite to room %s from %s has been dropped.\n", room, who);
11044
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
596 if (room != NULL)
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
597 g_free(room);
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
598 if (msg != NULL)
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
599 g_free(msg);
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
600 return;
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
601 }
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
602 serv_got_chat_invite(gc, room, who, msg, components);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
603 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
604 if (room)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
605 g_free(room);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
606 if (msg)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
607 g_free(msg);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
608 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
609
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
610 void yahoo_process_chat_goto(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
611 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
612 if (pkt->status == -1)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
613 gaim_notify_error(gc, NULL, _("Failed to join buddy in chat"),
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
614 _("Maybe they're not in a chat?"));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
615 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
616
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
617
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
618 /*
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
619 * Functions dealing with conferences
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
620 * I think conference names are always ascii.
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
621 */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
622
9782
4f0e4049d3f4 [gaim-migrate @ 10650]
Tim Ringenbach <marv@pidgin.im>
parents: 9780
diff changeset
623 void yahoo_conf_leave(struct yahoo_data *yd, const char *room, const char *dn, GList *who)
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
624 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
625 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
626 GList *w;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
627
9782
4f0e4049d3f4 [gaim-migrate @ 10650]
Tim Ringenbach <marv@pidgin.im>
parents: 9780
diff changeset
628 gaim_debug_misc("yahoo", "leaving conference %s\n", room);
4f0e4049d3f4 [gaim-migrate @ 10650]
Tim Ringenbach <marv@pidgin.im>
parents: 9780
diff changeset
629
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
630 pkt = yahoo_packet_new(YAHOO_SERVICE_CONFLOGOFF, YAHOO_STATUS_AVAILABLE, 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
631
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
632 yahoo_packet_hash_str(pkt, 1, dn);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
633 for (w = who; w; w = w->next) {
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
634 const char *name = gaim_conv_chat_cb_get_name(w->data);
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
635 yahoo_packet_hash_str(pkt, 3, name);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
636 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
637
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
638 yahoo_packet_hash_str(pkt, 57, room);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
639
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
640 yahoo_packet_send_and_free(pkt, yd);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
641 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
642
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
643 static int yahoo_conf_send(GaimConnection *gc, const char *dn, const char *room,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
644 GList *members, const char *what)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
645 {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
646 struct yahoo_data *yd = gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
647 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
648 GList *who;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
649 char *msg, *msg2;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
650 int utf8 = 1;
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
651
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
652 msg = yahoo_html_to_codes(what);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
653 msg2 = yahoo_string_encode(gc, msg, &utf8);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
654
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
655
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
656 pkt = yahoo_packet_new(YAHOO_SERVICE_CONFMSG, YAHOO_STATUS_AVAILABLE, 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
657
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
658 yahoo_packet_hash_str(pkt, 1, dn);
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
659 for (who = members; who; who = who->next) {
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
660 const char *name = gaim_conv_chat_cb_get_name(who->data);
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
661 yahoo_packet_hash_str(pkt, 53, name);
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
662 }
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
663 yahoo_packet_hash(pkt, "ss", 57, room, 14, msg2);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
664 if (utf8)
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
665 yahoo_packet_hash_str(pkt, 97, "1"); /* utf-8 */
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
666
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
667 yahoo_packet_send_and_free(pkt, yd);
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
668 g_free(msg);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
669 g_free(msg2);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
670
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
671 return 0;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
672 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
673
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
674 static void yahoo_conf_join(struct yahoo_data *yd, GaimConversation *c, const char *dn, const char *room,
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
675 const char *topic, const char *members)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
676 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
677 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
678 char **memarr = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
679 int i;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
680
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
681 if (members)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
682 memarr = g_strsplit(members, "\n", 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
683
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
684
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
685 pkt = yahoo_packet_new(YAHOO_SERVICE_CONFLOGON, YAHOO_STATUS_AVAILABLE, 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
686
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
687 yahoo_packet_hash(pkt, "sss", 1, dn, 3, dn, 57, room);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
688 if (memarr) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
689 for(i = 0 ; memarr[i]; i++) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
690 if (!strcmp(memarr[i], "") || !strcmp(memarr[i], dn))
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
691 continue;
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
692 yahoo_packet_hash_str(pkt, 3, memarr[i]);
9846
61f7349c153a [gaim-migrate @ 10724]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9782
diff changeset
693 gaim_conv_chat_add_user(GAIM_CONV_CHAT(c), memarr[i], NULL, GAIM_CBFLAGS_NONE, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
694 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
695 }
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
696 yahoo_packet_send_and_free(pkt, yd);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
697
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
698 if (memarr)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
699 g_strfreev(memarr);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
700 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
701
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
702 static void yahoo_conf_invite(GaimConnection *gc, GaimConversation *c,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
703 const char *dn, const char *buddy, const char *room, const char *msg)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
704 {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
705 struct yahoo_data *yd = gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
706 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
707 GList *members;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
708 char *msg2 = NULL;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
709
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
710 if (msg)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
711 msg2 = yahoo_string_encode(gc, msg, NULL);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
712
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
713 members = gaim_conv_chat_get_users(GAIM_CONV_CHAT(c));
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
714
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
715 pkt = yahoo_packet_new(YAHOO_SERVICE_CONFADDINVITE, YAHOO_STATUS_AVAILABLE, 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
716
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
717 yahoo_packet_hash(pkt, "sssss", 1, dn, 51, buddy, 57, room, 58, msg?msg2:"", 13, "0");
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
718 for(; members; members = members->next) {
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
719 const char *name = gaim_conv_chat_cb_get_name(members->data);
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
720 if (!strcmp(name, dn))
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
721 continue;
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
722 yahoo_packet_hash(pkt, "ss", 52, name, 53, name);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
723 }
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
724
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
725 yahoo_packet_send_and_free(pkt, yd);
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
726 g_free(msg2);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
727 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
728
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
729 /*
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
730 * Functions dealing with chats
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
731 */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
732
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
733 static void yahoo_chat_leave(GaimConnection *gc, const char *room, const char *dn, gboolean logout)
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
734 {
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
735 struct yahoo_data *yd = gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
736 struct yahoo_packet *pkt;
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
737 GaimConversation *c;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
738 char *eroom;
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
739 gboolean utf8 = 1;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
740
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
741 if (yd->wm) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
742 g_return_if_fail(yd->ycht != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
743
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
744 ycht_chat_leave(yd->ycht, room, logout);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
745 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
746 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
747
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
748 eroom = yahoo_string_encode(gc, room, &utf8);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
749
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
750 pkt = yahoo_packet_new(YAHOO_SERVICE_CHATEXIT, YAHOO_STATUS_AVAILABLE, 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
751
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
752 yahoo_packet_hash(pkt, "sss", 104, eroom, 109, dn, 108, "1");
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
753 yahoo_packet_hash_str(pkt, 112, "0"); /* what does this one mean? */
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
754
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
755 yahoo_packet_send_and_free(pkt, yd);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
756
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
757 yd->in_chat = 0;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
758 if (yd->chat_name) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
759 g_free(yd->chat_name);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
760 yd->chat_name = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
761 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
762
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
763 if ((c = gaim_find_chat(gc, YAHOO_CHAT_ID)))
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
764 serv_got_chat_left(gc, YAHOO_CHAT_ID);
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
765
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
766 if (!logout)
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
767 return;
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
768
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
769 pkt = yahoo_packet_new(YAHOO_SERVICE_CHATLOGOUT,
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
770 YAHOO_STATUS_AVAILABLE, 0);
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
771 yahoo_packet_hash_str(pkt, 1, dn);
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
772 yahoo_packet_send_and_free(pkt, yd);
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
773
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
774 yd->chat_online = 0;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
775 g_free(eroom);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
776 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
777
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
778 /* borrowed from gtkconv.c */
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
779 static gboolean
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
780 meify(char *message, size_t len)
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
781 {
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
782 /*
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
783 * Read /me-ify: If the message (post-HTML) starts with /me,
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
784 * remove the "/me " part of it (including that space) and return TRUE.
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
785 */
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
786 char *c;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
787 gboolean inside_html = 0;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
788
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
789 /* Umm.. this would be very bad if this happens. */
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
790 g_return_val_if_fail(message != NULL, FALSE);
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
791
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
792 if (len == -1)
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
793 len = strlen(message);
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
794
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
795 for (c = message; *c != '\0'; c++, len--) {
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
796 if (inside_html) {
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
797 if (*c == '>')
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
798 inside_html = FALSE;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
799 }
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
800 else {
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
801 if (*c == '<')
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
802 inside_html = TRUE;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
803 else
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
804 break;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
805 }
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
806 }
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
807
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
808 if (*c != '\0' && !g_ascii_strncasecmp(c, "/me ", 4)) {
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
809 memmove(c, c + 4, len - 3);
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
810
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
811 return TRUE;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
812 }
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
813
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
814 return FALSE;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
815 }
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
816
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
817 static int yahoo_chat_send(GaimConnection *gc, const char *dn, const char *room, const char *what)
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
818 {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
819 struct yahoo_data *yd = gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
820 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
821 int me = 0;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
822 char *msg1, *msg2, *room2;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
823 gboolean utf8 = TRUE;
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
824
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
825 if (yd->wm) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
826 g_return_val_if_fail(yd->ycht != NULL, 1);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
827
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
828 return ycht_chat_send(yd->ycht, room, what);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
829 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
830
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
831 msg1 = g_strdup(what);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
832
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
833 if (meify(msg1, -1))
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
834 me = 1;
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
835
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
836 msg2 = yahoo_html_to_codes(msg1);
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
837 g_free(msg1);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
838 msg1 = yahoo_string_encode(gc, msg2, &utf8);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
839 g_free(msg2);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
840 room2 = yahoo_string_encode(gc, room, NULL);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
841
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
842 pkt = yahoo_packet_new(YAHOO_SERVICE_COMMENT, YAHOO_STATUS_AVAILABLE, 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
843
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
844 yahoo_packet_hash(pkt, "sss", 1, dn, 104, room2, 117, msg1);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
845 if (me)
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
846 yahoo_packet_hash_str(pkt, 124, "2");
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
847 else
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
848 yahoo_packet_hash_str(pkt, 124, "1");
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
849 /* fixme: what about /think? (124=3) */
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
850 if (utf8)
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
851 yahoo_packet_hash_str(pkt, 97, "1");
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
852
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
853 yahoo_packet_send_and_free(pkt, yd);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
854 g_free(msg1);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
855 g_free(room2);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
856
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
857 return 0;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
858 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
859
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
860 static void yahoo_chat_join(GaimConnection *gc, const char *dn, const char *room, const char *topic)
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
861 {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
862 struct yahoo_data *yd = gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
863 struct yahoo_packet *pkt;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
864 char *room2;
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
865 gboolean utf8 = TRUE;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
866
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
867 if (yd->wm) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
868 g_return_if_fail(yd->ycht != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
869
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
870 ycht_chat_join(yd->ycht, room);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
871 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
872 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
873
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
874 /* apparently room names are always utf8, or else always not utf8,
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
875 * so we don't have to actually pass the flag in the packet. Or something. */
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
876 room2 = yahoo_string_encode(gc, room, &utf8);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
877
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
878 pkt = yahoo_packet_new(YAHOO_SERVICE_CHATJOIN, YAHOO_STATUS_AVAILABLE, 0);
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
879 yahoo_packet_hash(pkt, "ssss", 1, gaim_connection_get_display_name(gc),
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
880 62, "2", 104, room2, 129, "0");
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
881 yahoo_packet_send_and_free(pkt, yd);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
882 g_free(room2);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
883 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
884
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
885 static void yahoo_chat_invite(GaimConnection *gc, const char *dn, const char *buddy,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
886 const char *room, const char *msg)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
887 {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
888 struct yahoo_data *yd = gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
889 struct yahoo_packet *pkt;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
890 char *room2, *msg2 = NULL;
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
891 gboolean utf8 = TRUE;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
892
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
893 if (yd->wm) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
894 g_return_if_fail(yd->ycht != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
895
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
896 ycht_chat_send_invite(yd->ycht, room, buddy, msg);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
897 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
898 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
899
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
900 room2 = yahoo_string_encode(gc, room, &utf8);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
901 if (msg)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
902 msg2 = yahoo_string_encode(gc, msg, NULL);
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
903
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
904 pkt = yahoo_packet_new(YAHOO_SERVICE_CHATADDINVITE, YAHOO_STATUS_AVAILABLE, 0);
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
905 yahoo_packet_hash(pkt, "sssss", 1, dn, 118, buddy, 104, room2, 117, (msg2?msg2:""), 129, "0");
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
906 yahoo_packet_send_and_free(pkt, yd);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
907
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
908 g_free(room2);
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
909 g_free(msg2);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
910 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
911
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
912 void yahoo_chat_goto(GaimConnection *gc, const char *name)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
913 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
914 struct yahoo_data *yd;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
915 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
916
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
917 yd = gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
918
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
919 if (yd->wm) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
920 g_return_if_fail(yd->ycht != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
921
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
922 ycht_chat_goto_user(yd->ycht, name);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
923 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
924 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
925
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
926 if (!yd->chat_online)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
927 yahoo_chat_online(gc);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
928
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
929 pkt = yahoo_packet_new(YAHOO_SERVICE_CHATGOTO, YAHOO_STATUS_AVAILABLE, 0);
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
930 yahoo_packet_hash(pkt, "sss", 109, name, 1, gaim_connection_get_display_name(gc), 62, "2");
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
931 yahoo_packet_send_and_free(pkt, yd);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
932 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
933 /*
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
934 * These are the functions registered with the core
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
935 * which get called for both chats and conferences.
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
936 */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
937
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
938 void yahoo_c_leave(GaimConnection *gc, int id)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
939 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
940 struct yahoo_data *yd = (struct yahoo_data *) gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
941 GaimConversation *c;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
942
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
943 if (!yd)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
944 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
945
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
946
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
947 c = gaim_find_chat(gc, id);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
948 if (!c)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
949 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
950
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
951 if (id != YAHOO_CHAT_ID) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
952 yahoo_conf_leave(yd, gaim_conversation_get_name(c),
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
953 gaim_connection_get_display_name(gc), gaim_conv_chat_get_users(GAIM_CONV_CHAT(c)));
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
954 yd->confs = g_slist_remove(yd->confs, c);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
955 } else {
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
956 yahoo_chat_leave(gc, gaim_conversation_get_name(c), gaim_connection_get_display_name(gc), TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
957 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
958
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
959 serv_got_chat_left(gc, id);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
960 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
961
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
962 int yahoo_c_send(GaimConnection *gc, int id, const char *what)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
963 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
964 GaimConversation *c;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
965 int ret;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
966 struct yahoo_data *yd;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
967
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
968 yd = (struct yahoo_data *) gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
969 if (!yd)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
970 return -1;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
971
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
972 c = gaim_find_chat(gc, id);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
973 if (!c)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
974 return -1;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
975
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
976 if (id != YAHOO_CHAT_ID) {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
977 ret = yahoo_conf_send(gc, gaim_connection_get_display_name(gc),
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
978 gaim_conversation_get_name(c), gaim_conv_chat_get_users(GAIM_CONV_CHAT(c)), what);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
979 } else {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
980 ret = yahoo_chat_send(gc, gaim_connection_get_display_name(gc),
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
981 gaim_conversation_get_name(c), what);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
982 if (!ret)
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
983 serv_got_chat_in(gc, gaim_conv_chat_get_id(GAIM_CONV_CHAT(c)),
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
984 gaim_connection_get_display_name(gc), 0, what, time(NULL));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
985 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
986 return ret;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
987 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
988
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
989 GList *yahoo_c_info(GaimConnection *gc)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
990 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
991 GList *m = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
992 struct proto_chat_entry *pce;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
993
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
994 pce = g_new0(struct proto_chat_entry, 1);
7841
0000a4c68bf8 [gaim-migrate @ 8494]
Mark Doliner <markdoliner@pidgin.im>
parents: 7827
diff changeset
995 pce->label = _("_Room:");
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
996 pce->identifier = "room";
10954
cd5771cb6cf8 [gaim-migrate @ 12754]
Richard Laager <rlaager@pidgin.im>
parents: 10937
diff changeset
997 pce->required = TRUE;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
998 m = g_list_append(m, pce);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
999
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1000 return m;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1001 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1002
9768
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1003 GHashTable *yahoo_c_info_defaults(GaimConnection *gc, const char *chat_name)
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1004 {
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1005 GHashTable *defaults;
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1006
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1007 defaults = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1008
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1009 if (chat_name != NULL)
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1010 g_hash_table_insert(defaults, "room", g_strdup(chat_name));
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1011
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1012 return defaults;
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1013 }
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1014
9917
2fbb3c9fab2b [gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents: 9846
diff changeset
1015 char *yahoo_get_chat_name(GHashTable *data)
2fbb3c9fab2b [gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents: 9846
diff changeset
1016 {
2fbb3c9fab2b [gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents: 9846
diff changeset
1017 return g_strdup(g_hash_table_lookup(data, "room"));
2fbb3c9fab2b [gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents: 9846
diff changeset
1018 }
2fbb3c9fab2b [gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents: 9846
diff changeset
1019
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1020 void yahoo_c_join(GaimConnection *gc, GHashTable *data)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1021 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1022 struct yahoo_data *yd;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1023 char *room, *topic, *members, *type;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1024 int id;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1025 GaimConversation *c;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1026
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1027 yd = (struct yahoo_data *) gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1028 if (!yd)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1029 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1030
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1031 room = g_hash_table_lookup(data, "room");
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1032 if (!room)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1033 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1034
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1035 topic = g_hash_table_lookup(data, "topic");
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1036 if (!topic)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1037 topic = "";
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1038
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1039 members = g_hash_table_lookup(data, "members");
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1040
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1041
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1042 if ((type = g_hash_table_lookup(data, "type")) && !strcmp(type, "Conference")) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1043 id = yd->conf_id++;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1044 c = serv_got_joined_chat(gc, id, room);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1045 yd->confs = g_slist_prepend(yd->confs, c);
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
1046 gaim_conv_chat_set_topic(GAIM_CONV_CHAT(c), gaim_connection_get_display_name(gc), topic);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1047 yahoo_conf_join(yd, c, gaim_connection_get_display_name(gc), room, topic, members);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1048 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1049 } else {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1050 if (yd->in_chat)
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
1051 yahoo_chat_leave(gc, room,
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
1052 gaim_connection_get_display_name(gc),
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
1053 FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1054 if (!yd->chat_online)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1055 yahoo_chat_online(gc);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
1056 yahoo_chat_join(gc, gaim_connection_get_display_name(gc), room, topic);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1057 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1058 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1059 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1060
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1061 void yahoo_c_invite(GaimConnection *gc, int id, const char *msg, const char *name)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1062 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1063 GaimConversation *c;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1064
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1065 c = gaim_find_chat(gc, id);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1066 if (!c || !c->name)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1067 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1068
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1069 if (id != YAHOO_CHAT_ID) {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
1070 yahoo_conf_invite(gc, c, gaim_connection_get_display_name(gc), name,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1071 gaim_conversation_get_name(c), msg);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1072 } else {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
1073 yahoo_chat_invite(gc, gaim_connection_get_display_name(gc), name,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1074 gaim_conversation_get_name(c), msg);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1075 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1076 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1077
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1078
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1079 struct yahoo_roomlist {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1080 int fd;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1081 int inpa;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1082 guchar *rxqueue;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1083 int rxlen;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1084 gboolean started;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1085 char *path;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1086 char *host;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1087 GaimRoomlist *list;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1088 GaimRoomlistRoom *cat;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1089 GaimRoomlistRoom *ucat;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1090 GMarkupParseContext *parse;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1091
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1092 };
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1093
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1094 static void yahoo_roomlist_destroy(struct yahoo_roomlist *yrl)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1095 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1096 if (yrl->inpa)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1097 gaim_input_remove(yrl->inpa);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1098 if (yrl->rxqueue)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1099 g_free(yrl->rxqueue);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1100 if (yrl->path)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1101 g_free(yrl->path);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1102 if (yrl->host)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1103 g_free(yrl->host);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1104 if (yrl->parse)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1105 g_markup_parse_context_free(yrl->parse);
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10394
diff changeset
1106 g_free(yrl);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1107 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1108
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1109 enum yahoo_room_type {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1110 yrt_yahoo,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1111 yrt_user,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1112 };
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1114 struct yahoo_chatxml_state {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1115 GaimRoomlist *list;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1116 struct yahoo_roomlist *yrl;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1117 GQueue *q;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1118 struct {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1119 enum yahoo_room_type type;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1120 char *name;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1121 char *topic;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1122 char *id;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1123 int users, voices, webcams;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1124 } room;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1125 };
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1126
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1127 struct yahoo_lobby {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1128 int count, users, voices, webcams;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1129 };
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1130
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1131 static struct yahoo_chatxml_state *yahoo_chatxml_state_new(GaimRoomlist *list, struct yahoo_roomlist *yrl)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1132 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1133 struct yahoo_chatxml_state *s;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1134
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1135 s = g_new0(struct yahoo_chatxml_state, 1);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1136
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1137 s->list = list;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1138 s->yrl = yrl;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1139 s->q = g_queue_new();
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1140
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1141 return s;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1142 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1143
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1144 static void yahoo_chatxml_state_destroy(struct yahoo_chatxml_state *s)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1145 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1146 g_queue_free(s->q);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1147 if (s->room.name)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1148 g_free(s->room.name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1149 if (s->room.topic)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1150 g_free(s->room.topic);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1151 if (s->room.id)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1152 g_free(s->room.id);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1153 g_free(s);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1154 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1155
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1156 static void yahoo_chatlist_start_element(GMarkupParseContext *context, const gchar *ename,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1157 const gchar **anames, const gchar **avalues,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1158 gpointer user_data, GError **error)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1159 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1160 struct yahoo_chatxml_state *s = user_data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1161 GaimRoomlist *list = s->list;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1162 GaimRoomlistRoom *r;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1163 GaimRoomlistRoom *parent;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1164 int i;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1165
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1166 if (!strcmp(ename, "category")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1167 const gchar *name = NULL, *id = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1168
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1169 for (i = 0; anames[i]; i++) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1170 if (!strcmp(anames[i], "id"))
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1171 id = avalues[i];
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1172 if (!strcmp(anames[i], "name"))
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1173 name = avalues[i];
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1174 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1175 if (!name || !id)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1176 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1177
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1178 parent = g_queue_peek_head(s->q);
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1179 r = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_CATEGORY, name, parent);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1180 gaim_roomlist_room_add_field(list, r, (gpointer)name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1181 gaim_roomlist_room_add_field(list, r, (gpointer)id);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1182 gaim_roomlist_room_add(list, r);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1183 g_queue_push_head(s->q, r);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1184 } else if (!strcmp(ename, "room")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1185 s->room.users = s->room.voices = s->room.webcams = 0;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1186
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1187 for (i = 0; anames[i]; i++) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1188 if (!strcmp(anames[i], "id")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1189 if (s->room.id)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1190 g_free(s->room.id);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1191 s->room.id = g_strdup(avalues[i]);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1192 } else if (!strcmp(anames[i], "name")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1193 if (s->room.name)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1194 g_free(s->room.name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1195 s->room.name = g_strdup(avalues[i]);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1196 } else if (!strcmp(anames[i], "topic")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1197 if (s->room.topic)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1198 g_free(s->room.topic);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1199 s->room.topic = g_strdup(avalues[i]);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1200 } else if (!strcmp(anames[i], "type")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1201 if (!strcmp("yahoo", avalues[i]))
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1202 s->room.type = yrt_yahoo;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1203 else
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1204 s->room.type = yrt_user;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1205 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1206 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1207
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1208 } else if (!strcmp(ename, "lobby")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1209 struct yahoo_lobby *lob = g_new0(struct yahoo_lobby, 1);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1210
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1211 for (i = 0; anames[i]; i++) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1212 if (!strcmp(anames[i], "count")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1213 lob->count = strtol(avalues[i], NULL, 10);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1214 } else if (!strcmp(anames[i], "users")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1215 s->room.users += lob->users = strtol(avalues[i], NULL, 10);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1216 } else if (!strcmp(anames[i], "voices")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1217 s->room.voices += lob->voices = strtol(avalues[i], NULL, 10);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1218 } else if (!strcmp(anames[i], "webcams")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1219 s->room.webcams += lob->webcams = strtol(avalues[i], NULL, 10);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1220 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1221 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1222
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1223 g_queue_push_head(s->q, lob);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1224 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1225
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1226 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1227
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1228 static void yahoo_chatlist_end_element(GMarkupParseContext *context, const gchar *ename,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1229 gpointer user_data, GError **error)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1230 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1231 struct yahoo_chatxml_state *s = user_data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1232
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1233 if (!strcmp(ename, "category")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1234 g_queue_pop_head(s->q);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1235 } else if (!strcmp(ename, "room")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1236 struct yahoo_lobby *lob;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1237 GaimRoomlistRoom *r, *l;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1238
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1239 if (s->room.type == yrt_yahoo)
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1240 r = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_CATEGORY|GAIM_ROOMLIST_ROOMTYPE_ROOM,
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1241 s->room.name, s->yrl->cat);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1242 else
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1243 r = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_CATEGORY|GAIM_ROOMLIST_ROOMTYPE_ROOM,
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1244 s->room.name, s->yrl->ucat);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1245
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1246 gaim_roomlist_room_add_field(s->list, r, s->room.name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1247 gaim_roomlist_room_add_field(s->list, r, s->room.id);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1248 gaim_roomlist_room_add_field(s->list, r, GINT_TO_POINTER(s->room.users));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1249 gaim_roomlist_room_add_field(s->list, r, GINT_TO_POINTER(s->room.voices));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1250 gaim_roomlist_room_add_field(s->list, r, GINT_TO_POINTER(s->room.webcams));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1251 gaim_roomlist_room_add_field(s->list, r, s->room.topic);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1252 gaim_roomlist_room_add(s->list, r);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1253
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1254 while ((lob = g_queue_pop_head(s->q))) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1255 char *name = g_strdup_printf("%s:%d", s->room.name, lob->count);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1256 l = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_ROOM, name, r);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1257
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1258 gaim_roomlist_room_add_field(s->list, l, name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1259 gaim_roomlist_room_add_field(s->list, l, s->room.id);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1260 gaim_roomlist_room_add_field(s->list, l, GINT_TO_POINTER(lob->users));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1261 gaim_roomlist_room_add_field(s->list, l, GINT_TO_POINTER(lob->voices));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1262 gaim_roomlist_room_add_field(s->list, l, GINT_TO_POINTER(lob->webcams));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1263 gaim_roomlist_room_add_field(s->list, l, s->room.topic);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1264 gaim_roomlist_room_add(s->list, l);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1265
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1266 g_free(name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1267 g_free(lob);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1268 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1269
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1270 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1271
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1272 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1273
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1274 static GMarkupParser parser = {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1275 yahoo_chatlist_start_element,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1276 yahoo_chatlist_end_element,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1277 NULL,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1278 NULL,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1279 NULL
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1280 };
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1281
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1282 static void yahoo_roomlist_cleanup(GaimRoomlist *list, struct yahoo_roomlist *yrl)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1283 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1284 gaim_roomlist_set_in_progress(list, FALSE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1285
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1286 if (yrl) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1287 list->proto_data = g_list_remove(list->proto_data, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1288 yahoo_roomlist_destroy(yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1289 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1290
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1291 gaim_roomlist_unref(list);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1292 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1293
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1294 static void yahoo_roomlist_pending(gpointer data, gint source, GaimInputCondition cond)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1295 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1296 struct yahoo_roomlist *yrl = data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1297 GaimRoomlist *list = yrl->list;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1298 char buf[1024];
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1299 int len;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1300 guchar *start;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1301 struct yahoo_chatxml_state *s;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1302
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1303 len = read(yrl->fd, buf, sizeof(buf));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1304
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1305 if (len <= 0) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1306 if (yrl->parse)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1307 g_markup_parse_context_end_parse(yrl->parse, NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1308 yahoo_roomlist_cleanup(list, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1309 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1310 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1311
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1312
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1313 yrl->rxqueue = g_realloc(yrl->rxqueue, len + yrl->rxlen);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1314 memcpy(yrl->rxqueue + yrl->rxlen, buf, len);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1315 yrl->rxlen += len;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1316
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1317 if (!yrl->started) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1318 yrl->started = TRUE;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1319 start = g_strstr_len(yrl->rxqueue, yrl->rxlen, "\r\n\r\n");
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1320 if (!start || (start - yrl->rxqueue + 4) >= yrl->rxlen)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1321 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1322 start += 4;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1323 } else {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1324 start = yrl->rxqueue;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1325 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1326
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1327 if (yrl->parse == NULL) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1328 s = yahoo_chatxml_state_new(list, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1329 yrl->parse = g_markup_parse_context_new(&parser, 0, s,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1330 (GDestroyNotify)yahoo_chatxml_state_destroy);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1331 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1332
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1333 if (!g_markup_parse_context_parse(yrl->parse, start, (yrl->rxlen - (start - yrl->rxqueue)), NULL)) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1334
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1335 yahoo_roomlist_cleanup(list, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1336 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1337 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1338
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1339 yrl->rxlen = 0;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1340 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1341
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1342 static void yahoo_roomlist_got_connected(gpointer data, gint source, GaimInputCondition cond)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1343 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1344 struct yahoo_roomlist *yrl = data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1345 GaimRoomlist *list = yrl->list;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1346 char *buf, *cookie;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1347 struct yahoo_data *yd = gaim_account_get_connection(list->account)->proto_data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1348
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1349 if (source < 0) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1350 gaim_notify_error(gaim_account_get_connection(list->account), NULL, _("Unable to connect"), _("Fetching the room list failed."));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1351 yahoo_roomlist_cleanup(list, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1352 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1353 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1354
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1355 yrl->fd = source;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1356
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1357 cookie = g_strdup_printf("Y=%s; T=%s", yd->cookie_y, yd->cookie_t);
10575
f360d2dc8a1c [gaim-migrate @ 11968]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
1358 buf = g_strdup_printf("GET http://%s/%s HTTP/1.0\r\nHost: %s\r\nCookie: %s\r\n\r\n",
f360d2dc8a1c [gaim-migrate @ 11968]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10504
diff changeset
1359 yrl->host, yrl->path, yrl->host, cookie);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1360 write(yrl->fd, buf, strlen(buf));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1361 g_free(cookie);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1362 g_free(buf);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1363 yrl->inpa = gaim_input_add(yrl->fd, GAIM_INPUT_READ, yahoo_roomlist_pending, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1364
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1365 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1366
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1367 GaimRoomlist *yahoo_roomlist_get_list(GaimConnection *gc)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1368 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1369 struct yahoo_roomlist *yrl;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1370 GaimRoomlist *rl;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1371 char *url;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1372 GList *fields = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1373 GaimRoomlistField *f;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1374
11043
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1375 if (YAHOO_ROOMLIST_LOCALE) {
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1376 url = g_strdup_printf("%s?chatcat=0&intl=%s",
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1377 gaim_account_get_string(gaim_connection_get_account(gc),
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1378 "room_list", YAHOO_ROOMLIST_URL),
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1379 gaim_account_get_string(gaim_connection_get_account(gc),
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1380 "room_list_locale", YAHOO_ROOMLIST_LOCALE));
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1381 } else {
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1382 url = g_strdup_printf("%s?chatcat=0",
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1383 gaim_account_get_string(gaim_connection_get_account(gc),
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1384 "room_list", YAHOO_ROOMLIST_URL));
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1385 }
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1386
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1387 yrl = g_new0(struct yahoo_roomlist, 1);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1388 rl = gaim_roomlist_new(gaim_connection_get_account(gc));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1389 yrl->list = rl;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1390
9227
95c28297b72c [gaim-migrate @ 10023]
Don Seiler <rizzo@gentoo.org>
parents: 8735
diff changeset
1391 gaim_url_parse(url, &(yrl->host), NULL, &(yrl->path), NULL, NULL);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1392 g_free(url);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1393
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1394 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", "room", TRUE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1395 fields = g_list_append(fields, f);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1396
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1397 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", "id", TRUE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1398 fields = g_list_append(fields, f);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1399
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1400 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_INT, _("Users"), "users", FALSE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1401 fields = g_list_append(fields, f);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1402
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1403 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_INT, _("Voices"), "voices", FALSE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1404 fields = g_list_append(fields, f);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1405
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1406 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_INT, _("Webcams"), "webcams", FALSE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1407 fields = g_list_append(fields, f);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1408
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1409 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, _("Topic"), "topic", FALSE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1410 fields = g_list_append(fields, f);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1411
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1412 gaim_roomlist_set_fields(rl, fields);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1413
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1414 if (gaim_proxy_connect(gaim_connection_get_account(gc),
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1415 yrl->host, 80, yahoo_roomlist_got_connected, yrl) != 0)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1416 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1417 gaim_notify_error(gc, NULL, _("Connection problem"), _("Unable to fetch room list."));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1418 yahoo_roomlist_cleanup(rl, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1419 return NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1420 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1421
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1422 rl->proto_data = g_list_append(rl->proto_data, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1423
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1424 gaim_roomlist_set_in_progress(rl, TRUE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1425 return rl;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1426 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1427
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1428 void yahoo_roomlist_cancel(GaimRoomlist *list)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1429 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1430 GList *l, *k;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1431
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1432 k = l = list->proto_data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1433 list->proto_data = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1434
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1435 gaim_roomlist_set_in_progress(list, FALSE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1436
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1437 for (; l; l = l->next) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1438 yahoo_roomlist_destroy(l->data);
10647
e9ad21c11fcc [gaim-migrate @ 12163]
Daniel Atallah <datallah@pidgin.im>
parents: 10575
diff changeset
1439 gaim_roomlist_unref(list);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1440 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1441 g_list_free(k);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1442 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1443
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1444 void yahoo_roomlist_expand_category(GaimRoomlist *list, GaimRoomlistRoom *category)
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1445 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1446 struct yahoo_roomlist *yrl;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1447 char *url;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1448 char *id;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1449
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1450 if (category->type != GAIM_ROOMLIST_ROOMTYPE_CATEGORY)
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1451 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1452
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1453 if (!(id = g_list_nth_data(category->fields, 1))) {
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1454 gaim_roomlist_set_in_progress(list, FALSE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1455 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1456 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1457
11043
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1458 if (YAHOO_ROOMLIST_LOCALE) {
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1459 url = g_strdup_printf("%s?chatroom_%s=0&intl=%s",
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1460 gaim_account_get_string(list->account,"room_list",
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1461 YAHOO_ROOMLIST_URL), id, gaim_account_get_string(list->account,
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1462 "room_list_locale", YAHOO_ROOMLIST_LOCALE));
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1463 } else {
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1464 url = g_strdup_printf("%s?chatroom_%s=0",
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1465 gaim_account_get_string(list->account,"room_list",
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1466 YAHOO_ROOMLIST_URL), id);
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1467 }
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1468
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1469 yrl = g_new0(struct yahoo_roomlist, 1);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1470 yrl->list = list;
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1471 yrl->cat = category;
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1472 list->proto_data = g_list_append(list->proto_data, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1473
9227
95c28297b72c [gaim-migrate @ 10023]
Don Seiler <rizzo@gentoo.org>
parents: 8735
diff changeset
1474 gaim_url_parse(url, &(yrl->host), NULL, &(yrl->path), NULL, NULL);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1475 g_free(url);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1476
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1477 yrl->ucat = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_CATEGORY, _("User Rooms"), yrl->cat);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1478 gaim_roomlist_room_add(list, yrl->ucat);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1479
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1480 if (gaim_proxy_connect(list->account,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1481 yrl->host, 80, yahoo_roomlist_got_connected, yrl) != 0)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1482 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1483 gaim_notify_error(gaim_account_get_connection(list->account),
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1484 NULL, _("Connection problem"), _("Unable to fetch room list."));
10647
e9ad21c11fcc [gaim-migrate @ 12163]
Daniel Atallah <datallah@pidgin.im>
parents: 10575
diff changeset
1485 gaim_roomlist_ref(list);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1486 yahoo_roomlist_cleanup(list, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1487 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1488 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1489
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1490 gaim_roomlist_set_in_progress(list, TRUE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1491 gaim_roomlist_ref(list);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1492 }

mercurial