libgaim/protocols/yahoo/yahoochat.c

Sat, 28 Oct 2006 20:04:03 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Sat, 28 Oct 2006 20:04:03 +0000
changeset 14899
c65f0b4fb351
parent 14254
77edc7a6191a
child 20470
77693555855f
child 20472
6a6d2ef151e6
permissions
-rw-r--r--

[gaim-migrate @ 17606]
Add a "handle" parameter to gaim_proxy_connect(). It seemed like
people thought this was a good idea. You can still cancel
each gaim_proxy_connect() individually, if needed. I passed in
NULL for the handle in most places. It might be better to pass
in the gc in more places, but these changes do no harm, and they
should help some Yahoo! things, and I wanted to get the API change in.

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 if (pkt->status == 2)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
115 return; /* XXX */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
116
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
117 members = g_string_sized_new(512);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
118
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
119 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
120 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
121
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
122 switch (pair->key) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
123 case 1: /* us, but we already know who we are */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
124 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
125 case 57:
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
126 room = yahoo_string_decode(gc, pair->value, FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
127 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
128 case 50: /* inviter */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
129 who = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
130 g_string_append_printf(members, "%s\n", who);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
131 break;
9780
99680462fa73 [gaim-migrate @ 10648]
Peter Lawler <pidgin@bleeter.id.au>
parents: 9768
diff changeset
132 case 52: /* invitee (me) */
99680462fa73 [gaim-migrate @ 10648]
Peter Lawler <pidgin@bleeter.id.au>
parents: 9768
diff changeset
133 case 53: /* members */
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
134 g_string_append_printf(members, "%s\n", pair->value);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
135 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
136 case 58:
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
137 msg = yahoo_string_decode(gc, pair->value, FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
138 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
139 case 13: /* ? */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
140 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
141 }
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 if (!room) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
145 g_string_free(members, TRUE);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
146 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
147 }
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 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
150 g_hash_table_replace(components, g_strdup("room"), room);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
151 if (msg)
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
152 g_hash_table_replace(components, g_strdup("topic"), msg);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
153 g_hash_table_replace(components, g_strdup("type"), g_strdup("Conference"));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
154 if (members) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
155 g_hash_table_replace(components, g_strdup("members"), g_strdup(members->str));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
156 }
12999
7479d16384c0 [gaim-migrate @ 15352]
Daniel Atallah <datallah@pidgin.im>
parents: 12998
diff changeset
157 if (!yahoo_privacy_check(gc, who) ||
7479d16384c0 [gaim-migrate @ 15352]
Daniel Atallah <datallah@pidgin.im>
parents: 12998
diff changeset
158 (gaim_account_get_bool(gaim_connection_get_account(gc), "ignore_invites", FALSE))) {
10937
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;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
354 char *room = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
355 char *topic = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
356 char *someid, *someotherid, *somebase64orhashosomething, *somenegativenumber;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
357
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
358 if (pkt->status == -1) {
12998
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
359 /* We can't join */
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
360 struct yahoo_pair *pair = pkt->hash->data;
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
361 gchar const *failed_to_join = _("Failed to join chat");
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
362 switch (atoi(pair->value)) {
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
363 case 0xFFFFFFFA: /* -6 */
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
364 gaim_notify_error(gc, NULL, failed_to_join, _("Unknown room"));
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
365 break;
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
366 case 0xFFFFFFF1: /* -15 */
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
367 gaim_notify_error(gc, NULL, failed_to_join, _("Maybe the room is full"));
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
368 break;
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
369 case 0xFFFFFFDD: /* -35 */
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
370 gaim_notify_error(gc, NULL, failed_to_join, _("Not available"));
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
371 break;
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
372 default:
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
373 gaim_notify_error(gc, NULL, failed_to_join,
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
374 _("Unknown error. You may need to logout and wait five minutes before being able to rejoin a chatroom"));
3b9228370784 [gaim-migrate @ 15351]
Daniel Atallah <datallah@pidgin.im>
parents: 12865
diff changeset
375 }
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
376 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
377 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
378
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
379 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
380 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
381
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
382 switch (pair->key) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
383
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
384 case 104:
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
385 room = yahoo_string_decode(gc, pair->value, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
386 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
387 case 105:
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
388 topic = yahoo_string_decode(gc, pair->value, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
389 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
390 case 128:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
391 someid = pair->value;
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 case 108: /* number of joiners */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
394 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
395 case 129:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
396 someotherid = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
397 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
398 case 130:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
399 somebase64orhashosomething = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
400 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
401 case 126:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
402 somenegativenumber = pair->value;
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 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
405 break;
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8584
diff changeset
406 case 61: /*this looks similar to 130 */
6729
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 /* the previous section was just room info. this next section is
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
410 info about individual room members, (including us) */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
411
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
412 case 109: /* the yahoo id */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
413 members = g_list_append(members, pair->value);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
414 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
415 case 110: /* age */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
416 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
417 case 141: /* nickname */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
418 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
419 case 142: /* location */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
420 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
421 case 113: /* bitmask */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
422 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
423 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
424 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
425
9329
443126edd567 [gaim-migrate @ 10137]
Tim Ringenbach <marv@pidgin.im>
parents: 9227
diff changeset
426 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
427 yahoo_chat_leave(gc, room,
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
428 gaim_connection_get_display_name(gc), FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
429
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
430 c = gaim_find_chat(gc, YAHOO_CHAT_ID);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
431
9329
443126edd567 [gaim-migrate @ 10137]
Tim Ringenbach <marv@pidgin.im>
parents: 9227
diff changeset
432 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
433 ((g_list_length(members) > 1) ||
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
434 !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
435 int i;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
436 GList *flags = NULL;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
437 for (i = 0; i < g_list_length(members); i++)
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
438 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
439 if (c && gaim_conv_chat_has_left(GAIM_CONV_CHAT(c))) {
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
440 /* this might be a hack, but oh well, it should nicely */
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
441 char *tmpmsg;
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
442
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
443 gaim_conversation_set_name(c, room);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
444
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
445 c = serv_got_joined_chat(gc, YAHOO_CHAT_ID, room);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
446 if (topic)
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
447 gaim_conv_chat_set_topic(GAIM_CONV_CHAT(c), NULL, topic);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
448 yd->in_chat = 1;
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
449 yd->chat_name = g_strdup(room);
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11318
diff changeset
450 gaim_conv_chat_add_users(GAIM_CONV_CHAT(c), members, NULL, flags, FALSE);
8357
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
451
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
452 tmpmsg = g_strdup_printf(_("You are now chatting in %s."), room);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
453 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
454 g_free(tmpmsg);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
455 } else {
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
456 c = serv_got_joined_chat(gc, YAHOO_CHAT_ID, room);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
457 if (topic)
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
458 gaim_conv_chat_set_topic(GAIM_CONV_CHAT(c), NULL, topic);
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
459 yd->in_chat = 1;
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
460 yd->chat_name = g_strdup(room);
11454
a604c2097a6e [gaim-migrate @ 13693]
Richard Laager <rlaager@pidgin.im>
parents: 11318
diff changeset
461 gaim_conv_chat_add_users(GAIM_CONV_CHAT(c), members, NULL, flags, FALSE);
8357
5f66a4c63d0d [gaim-migrate @ 9081]
Tim Ringenbach <marv@pidgin.im>
parents: 8113
diff changeset
462 }
14031
c9283f5bf3da [gaim-migrate @ 16527]
Aaron Sheldon <aaronsheldon@users.sourceforge.net>
parents: 13272
diff changeset
463 g_list_free(flags);
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
464 } else if (c) {
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
465 yahoo_chat_add_users(GAIM_CONV_CHAT(c), members);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
466 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
467
11527
fc90bdeff1ca [gaim-migrate @ 13776]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11454
diff changeset
468 if (account->deny && c) {
fc90bdeff1ca [gaim-migrate @ 13776]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11454
diff changeset
469 GaimConversationUiOps *ops = gaim_conversation_get_ui_ops(c);
fc90bdeff1ca [gaim-migrate @ 13776]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11454
diff changeset
470 for (l = account->deny; l != NULL; l = l->next) {
fc90bdeff1ca [gaim-migrate @ 13776]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11454
diff changeset
471 for (roomies = members; roomies; roomies = roomies->next) {
fc90bdeff1ca [gaim-migrate @ 13776]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11454
diff changeset
472 if (!gaim_utf8_strcasecmp((char *)l->data, roomies->data)) {
fc90bdeff1ca [gaim-migrate @ 13776]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11454
diff changeset
473 gaim_debug_info("yahoo", "Ignoring room member %s in room %s\n" , roomies->data, room ? room : "");
fc90bdeff1ca [gaim-migrate @ 13776]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11454
diff changeset
474 gaim_conv_chat_ignore(GAIM_CONV_CHAT(c),roomies->data);
fc90bdeff1ca [gaim-migrate @ 13776]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11454
diff changeset
475 ops->chat_update_user(c, roomies->data);
fc90bdeff1ca [gaim-migrate @ 13776]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11454
diff changeset
476 }
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
477 }
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
478 }
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
479 }
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
480 g_list_free(roomies);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
481 g_list_free(members);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
482 g_free(room);
11527
fc90bdeff1ca [gaim-migrate @ 13776]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11454
diff changeset
483 g_free(topic);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
484 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
485
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
486 void yahoo_process_chat_exit(GaimConnection *gc, struct yahoo_packet *pkt)
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 char *who = NULL;
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
489 char *room = NULL;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
490 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
491 struct yahoo_data *yd;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
492
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
493 yd = gc->proto_data;
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 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
496 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
497
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
498 if (pair->key == 104)
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
499 room = yahoo_string_decode(gc, pair->value, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
500 if (pair->key == 109)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
501 who = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
502 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
503
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
504 if (who && room) {
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
505 GaimConversation *c = gaim_find_chat(gc, YAHOO_CHAT_ID);
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
506 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
507 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(c), who, NULL);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
508
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
509 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
510 if (room)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
511 g_free(room);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
512 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
513
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
514 void yahoo_process_chat_message(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
515 {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
516 char *room = NULL, *who = NULL, *msg = NULL, *msg2;
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
517 int msgtype = 1, utf8 = 1; /* default to utf8 */
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
518 GaimConversation *c = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
519 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
520
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
521 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
522 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
523
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
524 switch (pair->key) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
525
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
526 case 97:
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
527 utf8 = strtol(pair->value, NULL, 10);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
528 break;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
529 case 104:
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
530 room = yahoo_string_decode(gc, pair->value, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
531 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
532 case 109:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
533 who = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
534 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
535 case 117:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
536 msg = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
537 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
538 case 124:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
539 msgtype = strtol(pair->value, NULL, 10);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
540 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
541 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
542 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
543
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
544 c = gaim_find_chat(gc, YAHOO_CHAT_ID);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
545 if (!who || !c) {
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
546 if (room)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
547 g_free(room);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
548 /* we still get messages after we part, funny that */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
549 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
550 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
551
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
552 if (!msg) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
553 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
554 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
555 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
556 msg2 = yahoo_string_decode(gc, msg, utf8);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
557 msg = yahoo_codes_to_html(msg2);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
558 g_free(msg2);
6729
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 if (msgtype == 2 || msgtype == 3) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
561 char *tmp;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
562 tmp = g_strdup_printf("/me %s", msg);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
563 g_free(msg);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
564 msg = tmp;
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
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
567 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
568 g_free(msg);
11593
71d9d00b36ba [gaim-migrate @ 13863]
Levi Bard <levi@bard.sytes.net>
parents: 11527
diff changeset
569 g_free(room);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
570 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
571
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
572 void yahoo_process_chat_addinvite(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
573 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
574 GSList *l;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
575 char *room = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
576 char *msg = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
577 char *who = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
578
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
579 for (l = pkt->hash; l; l = l->next) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
580 struct yahoo_pair *pair = l->data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
581
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
582 switch (pair->key) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
583 case 104:
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
584 room = yahoo_string_decode(gc, pair->value, TRUE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
585 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
586 case 129: /* room id? */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
587 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
588 case 126: /* ??? */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
589 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
590 case 117:
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
591 msg = yahoo_string_decode(gc, pair->value, FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
592 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
593 case 119:
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
594 who = pair->value;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
595 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
596 case 118: /* us */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
597 break;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
598 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
599 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
600
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
601 if (room && who) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
602 GHashTable *components;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
603
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
604 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
605 g_hash_table_replace(components, g_strdup("room"), g_strdup(room));
12999
7479d16384c0 [gaim-migrate @ 15352]
Daniel Atallah <datallah@pidgin.im>
parents: 12998
diff changeset
606 if (!yahoo_privacy_check(gc, who) ||
7479d16384c0 [gaim-migrate @ 15352]
Daniel Atallah <datallah@pidgin.im>
parents: 12998
diff changeset
607 (gaim_account_get_bool(gaim_connection_get_account(gc), "ignore_invites", FALSE))) {
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
608 gaim_debug_info("yahoo",
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
609 "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
610 if (room != NULL)
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
611 g_free(room);
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
612 if (msg != NULL)
d6f32a4f0947 [gaim-migrate @ 12958]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11043
diff changeset
613 g_free(msg);
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
614 return;
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10647
diff changeset
615 }
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
616 serv_got_chat_invite(gc, room, who, msg, components);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
617 }
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
618 if (room)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
619 g_free(room);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
620 if (msg)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
621 g_free(msg);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
622 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
623
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
624 void yahoo_process_chat_goto(GaimConnection *gc, struct yahoo_packet *pkt)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
625 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
626 if (pkt->status == -1)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
627 gaim_notify_error(gc, NULL, _("Failed to join buddy in chat"),
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
628 _("Maybe they're not in a chat?"));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
629 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
630
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
631 /*
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
632 * Functions dealing with conferences
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
633 * I think conference names are always ascii.
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
634 */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
635
9782
4f0e4049d3f4 [gaim-migrate @ 10650]
Tim Ringenbach <marv@pidgin.im>
parents: 9780
diff changeset
636 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
637 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
638 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
639 GList *w;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
640
9782
4f0e4049d3f4 [gaim-migrate @ 10650]
Tim Ringenbach <marv@pidgin.im>
parents: 9780
diff changeset
641 gaim_debug_misc("yahoo", "leaving conference %s\n", room);
4f0e4049d3f4 [gaim-migrate @ 10650]
Tim Ringenbach <marv@pidgin.im>
parents: 9780
diff changeset
642
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
643 pkt = yahoo_packet_new(YAHOO_SERVICE_CONFLOGOFF, YAHOO_STATUS_AVAILABLE, 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
644
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
645 yahoo_packet_hash_str(pkt, 1, dn);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
646 for (w = who; w; w = w->next) {
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
647 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
648 yahoo_packet_hash_str(pkt, 3, name);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
649 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
650
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
651 yahoo_packet_hash_str(pkt, 57, room);
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
652 yahoo_packet_send_and_free(pkt, yd);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
653 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
654
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
655 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
656 GList *members, const char *what)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
657 {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
658 struct yahoo_data *yd = gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
659 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
660 GList *who;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
661 char *msg, *msg2;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
662 int utf8 = 1;
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
663
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
664 msg = yahoo_html_to_codes(what);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
665 msg2 = yahoo_string_encode(gc, msg, &utf8);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
666
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
667 pkt = yahoo_packet_new(YAHOO_SERVICE_CONFMSG, YAHOO_STATUS_AVAILABLE, 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
668
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
669 yahoo_packet_hash_str(pkt, 1, dn);
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
670 for (who = members; who; who = who->next) {
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
671 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
672 yahoo_packet_hash_str(pkt, 53, name);
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
673 }
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
674 yahoo_packet_hash(pkt, "ss", 57, room, 14, msg2);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
675 if (utf8)
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
676 yahoo_packet_hash_str(pkt, 97, "1"); /* utf-8 */
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
677
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
678 yahoo_packet_send_and_free(pkt, yd);
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
679 g_free(msg);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
680 g_free(msg2);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
681
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
682 return 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 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
686 const char *topic, const char *members)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
687 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
688 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
689 char **memarr = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
690 int i;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
691
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
692 if (members)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
693 memarr = g_strsplit(members, "\n", 0);
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 pkt = yahoo_packet_new(YAHOO_SERVICE_CONFLOGON, YAHOO_STATUS_AVAILABLE, 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
696
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
697 yahoo_packet_hash(pkt, "sss", 1, dn, 3, dn, 57, room);
6729
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 for(i = 0 ; memarr[i]; i++) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
700 if (!strcmp(memarr[i], "") || !strcmp(memarr[i], dn))
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
701 continue;
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
702 yahoo_packet_hash_str(pkt, 3, memarr[i]);
9846
61f7349c153a [gaim-migrate @ 10724]
Nathan Fredrickson <nathan@silverorange.com>
parents: 9782
diff changeset
703 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
704 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
705 }
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
706 yahoo_packet_send_and_free(pkt, yd);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
707
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
708 if (memarr)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
709 g_strfreev(memarr);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
710 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
711
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
712 static void yahoo_conf_invite(GaimConnection *gc, GaimConversation *c,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
713 const char *dn, const char *buddy, const char *room, const char *msg)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
714 {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
715 struct yahoo_data *yd = gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
716 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
717 GList *members;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
718 char *msg2 = NULL;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
719
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
720 if (msg)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
721 msg2 = yahoo_string_encode(gc, msg, NULL);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
722
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
723 members = gaim_conv_chat_get_users(GAIM_CONV_CHAT(c));
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
724
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
725 pkt = yahoo_packet_new(YAHOO_SERVICE_CONFADDINVITE, YAHOO_STATUS_AVAILABLE, 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
726
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
727 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
728 for(; members; members = members->next) {
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
729 const char *name = gaim_conv_chat_cb_get_name(members->data);
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9376
diff changeset
730 if (!strcmp(name, dn))
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
731 continue;
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
732 yahoo_packet_hash(pkt, "ss", 52, name, 53, name);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
733 }
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
734
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
735 yahoo_packet_send_and_free(pkt, yd);
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
736 g_free(msg2);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
737 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
738
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
739 /*
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
740 * Functions dealing with chats
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
741 */
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
742
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
743 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
744 {
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
745 struct yahoo_data *yd = gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
746 struct yahoo_packet *pkt;
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
747 GaimConversation *c;
12865
b93a45c96ff9 [gaim-migrate @ 15216]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12216
diff changeset
748
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
749 char *eroom;
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
750 gboolean utf8 = 1;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
751
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
752 if (yd->wm) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
753 g_return_if_fail(yd->ycht != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
754
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
755 ycht_chat_leave(yd->ycht, room, logout);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
756 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
757 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
758
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
759 eroom = yahoo_string_encode(gc, room, &utf8);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
760
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
761 pkt = yahoo_packet_new(YAHOO_SERVICE_CHATEXIT, YAHOO_STATUS_AVAILABLE, 0);
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
762 yahoo_packet_hash(pkt, "sss", 104, eroom, 109, dn, 108, "1");
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
763 yahoo_packet_hash_str(pkt, 112, "0"); /* what does this one mean? */
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
764 yahoo_packet_send_and_free(pkt, yd);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
765
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
766 yd->in_chat = 0;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
767 if (yd->chat_name) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
768 g_free(yd->chat_name);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
769 yd->chat_name = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
770 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
771
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
772 if ((c = gaim_find_chat(gc, YAHOO_CHAT_ID)))
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
773 serv_got_chat_left(gc, YAHOO_CHAT_ID);
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
774
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
775 if (!logout)
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
776 return;
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11593
diff changeset
777
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
778 pkt = yahoo_packet_new(YAHOO_SERVICE_CHATLOGOUT,
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
779 YAHOO_STATUS_AVAILABLE, 0);
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
780 yahoo_packet_hash_str(pkt, 1, dn);
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
781 yahoo_packet_send_and_free(pkt, yd);
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
782
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
783 yd->chat_online = 0;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
784 g_free(eroom);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
785 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
786
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
787 /* borrowed from gtkconv.c */
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
788 static gboolean
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
789 meify(char *message, size_t len)
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
790 {
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 * Read /me-ify: If the message (post-HTML) starts with /me,
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
793 * 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
794 */
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
795 char *c;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
796 gboolean inside_html = 0;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
797
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
798 /* Umm.. this would be very bad if this happens. */
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
799 g_return_val_if_fail(message != NULL, FALSE);
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
800
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
801 if (len == -1)
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
802 len = strlen(message);
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
803
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
804 for (c = message; *c != '\0'; c++, len--) {
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
805 if (inside_html) {
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
806 if (*c == '>')
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
807 inside_html = FALSE;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
808 }
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
809 else {
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
810 if (*c == '<')
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
811 inside_html = TRUE;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
812 else
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
813 break;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
814 }
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
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
817 if (*c != '\0' && !g_ascii_strncasecmp(c, "/me ", 4)) {
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
818 memmove(c, c + 4, len - 3);
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
819 return TRUE;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
820 }
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
821
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
822 return FALSE;
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
823 }
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
824
12216
d80739091a63 [gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 12212
diff changeset
825 static int yahoo_chat_send(GaimConnection *gc, const char *dn, const char *room, const char *what, GaimMessageFlags flags)
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
826 {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
827 struct yahoo_data *yd = gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
828 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
829 int me = 0;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
830 char *msg1, *msg2, *room2;
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
831 gboolean utf8 = TRUE;
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
832
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
833 if (yd->wm) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
834 g_return_val_if_fail(yd->ycht != NULL, 1);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
835
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
836 return ycht_chat_send(yd->ycht, room, what);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
837 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
838
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
839 msg1 = g_strdup(what);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
840
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
841 if (meify(msg1, -1))
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
842 me = 1;
6804
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
843
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
844 msg2 = yahoo_html_to_codes(msg1);
8247ddcbdf53 [gaim-migrate @ 7344]
Tim Ringenbach <marv@pidgin.im>
parents: 6729
diff changeset
845 g_free(msg1);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
846 msg1 = yahoo_string_encode(gc, msg2, &utf8);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
847 g_free(msg2);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
848 room2 = yahoo_string_encode(gc, room, NULL);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
849
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
850 pkt = yahoo_packet_new(YAHOO_SERVICE_COMMENT, YAHOO_STATUS_AVAILABLE, 0);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
851
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
852 yahoo_packet_hash(pkt, "sss", 1, dn, 104, room2, 117, msg1);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
853 if (me)
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
854 yahoo_packet_hash_str(pkt, 124, "2");
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
855 else
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
856 yahoo_packet_hash_str(pkt, 124, "1");
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
857 /* fixme: what about /think? (124=3) */
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
858 if (utf8)
10394
ad8f7dfef0cb [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
859 yahoo_packet_hash_str(pkt, 97, "1");
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
860
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
861 yahoo_packet_send_and_free(pkt, yd);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
862 g_free(msg1);
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
863 g_free(room2);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
864
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
865 return 0;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
866 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
867
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
868 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
869 {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
870 struct yahoo_data *yd = gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
871 struct yahoo_packet *pkt;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
872 char *room2;
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
873 gboolean utf8 = TRUE;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
874
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
875 if (yd->wm) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
876 g_return_if_fail(yd->ycht != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
877 ycht_chat_join(yd->ycht, room);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
878 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
879 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
880
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
881 /* apparently room names are always utf8, or else always not utf8,
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
882 * 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
883 room2 = yahoo_string_encode(gc, room, &utf8);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
884
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
885 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
886 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
887 62, "2", 104, room2, 129, "0");
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
888 yahoo_packet_send_and_free(pkt, yd);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
889 g_free(room2);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
890 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
891
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
892 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
893 const char *room, const char *msg)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
894 {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
895 struct yahoo_data *yd = gc->proto_data;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
896 struct yahoo_packet *pkt;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
897 char *room2, *msg2 = NULL;
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
898 gboolean utf8 = TRUE;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
899
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
900 if (yd->wm) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
901 g_return_if_fail(yd->ycht != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
902 ycht_chat_send_invite(yd->ycht, room, buddy, msg);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
903 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
904 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
905
8410
47fde1ae6b03 [gaim-migrate @ 9140]
Luke Schierer <lschiere@pidgin.im>
parents: 8357
diff changeset
906 room2 = yahoo_string_encode(gc, room, &utf8);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
907 if (msg)
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
908 msg2 = yahoo_string_encode(gc, msg, NULL);
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11593
diff changeset
909
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
910 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
911 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
912 yahoo_packet_send_and_free(pkt, yd);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
913
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
914 g_free(room2);
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 9917
diff changeset
915 g_free(msg2);
6729
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
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
918 void yahoo_chat_goto(GaimConnection *gc, const char *name)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
919 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
920 struct yahoo_data *yd;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
921 struct yahoo_packet *pkt;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
922
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
923 yd = gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
924
9376
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
925 if (yd->wm) {
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
926 g_return_if_fail(yd->ycht != NULL);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
927 ycht_chat_goto_user(yd->ycht, name);
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
928 return;
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
929 }
72964e97c46e [gaim-migrate @ 10184]
Tim Ringenbach <marv@pidgin.im>
parents: 9329
diff changeset
930
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
931 if (!yd->chat_online)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
932 yahoo_chat_online(gc);
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 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
935 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
936 yahoo_packet_send_and_free(pkt, yd);
6729
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 /*
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
939 * These are the functions registered with the core
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
940 * which get called for both chats and conferences.
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
941 */
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 void yahoo_c_leave(GaimConnection *gc, int id)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
944 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
945 struct yahoo_data *yd = (struct yahoo_data *) gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
946 GaimConversation *c;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
947
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
948 if (!yd)
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 c = gaim_find_chat(gc, id);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
952 if (!c)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
953 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
954
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
955 if (id != YAHOO_CHAT_ID) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
956 yahoo_conf_leave(yd, gaim_conversation_get_name(c),
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
957 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
958 yd->confs = g_slist_remove(yd->confs, c);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
959 } else {
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
960 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
961 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
962
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
963 serv_got_chat_left(gc, id);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
964 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
965
12216
d80739091a63 [gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 12212
diff changeset
966 int yahoo_c_send(GaimConnection *gc, int id, const char *what, GaimMessageFlags flags)
6729
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 GaimConversation *c;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
969 int ret;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
970 struct yahoo_data *yd;
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 yd = (struct yahoo_data *) gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
973 if (!yd)
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 c = gaim_find_chat(gc, id);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
977 if (!c)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
978 return -1;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
979
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
980 if (id != YAHOO_CHAT_ID) {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
981 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
982 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
983 } else {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
984 ret = yahoo_chat_send(gc, gaim_connection_get_display_name(gc),
12216
d80739091a63 [gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 12212
diff changeset
985 gaim_conversation_get_name(c), what, flags);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
986 if (!ret)
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
987 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
988 gaim_connection_get_display_name(gc), 0, what, time(NULL));
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
989 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
990 return ret;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
991 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
992
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
993 GList *yahoo_c_info(GaimConnection *gc)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
994 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
995 GList *m = NULL;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
996 struct proto_chat_entry *pce;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
997
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
998 pce = g_new0(struct proto_chat_entry, 1);
7841
0000a4c68bf8 [gaim-migrate @ 8494]
Mark Doliner <markdoliner@pidgin.im>
parents: 7827
diff changeset
999 pce->label = _("_Room:");
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1000 pce->identifier = "room";
10954
cd5771cb6cf8 [gaim-migrate @ 12754]
Richard Laager <rlaager@pidgin.im>
parents: 10937
diff changeset
1001 pce->required = TRUE;
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1002 m = g_list_append(m, pce);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1003
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1004 return m;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1005 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1006
9768
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1007 GHashTable *yahoo_c_info_defaults(GaimConnection *gc, const char *chat_name)
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 GHashTable *defaults;
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1010
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1011 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
1012
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1013 if (chat_name != NULL)
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1014 g_hash_table_insert(defaults, "room", g_strdup(chat_name));
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1015
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1016 return defaults;
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1017 }
318bcd935ca5 [gaim-migrate @ 10636]
Luke Schierer <lschiere@pidgin.im>
parents: 9713
diff changeset
1018
9917
2fbb3c9fab2b [gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents: 9846
diff changeset
1019 char *yahoo_get_chat_name(GHashTable *data)
2fbb3c9fab2b [gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents: 9846
diff changeset
1020 {
2fbb3c9fab2b [gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents: 9846
diff changeset
1021 return g_strdup(g_hash_table_lookup(data, "room"));
2fbb3c9fab2b [gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents: 9846
diff changeset
1022 }
2fbb3c9fab2b [gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents: 9846
diff changeset
1023
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1024 void yahoo_c_join(GaimConnection *gc, GHashTable *data)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1025 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1026 struct yahoo_data *yd;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1027 char *room, *topic, *members, *type;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1028 int id;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1029 GaimConversation *c;
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 yd = (struct yahoo_data *) gc->proto_data;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1032 if (!yd)
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 room = g_hash_table_lookup(data, "room");
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1036 if (!room)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1037 return;
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 topic = g_hash_table_lookup(data, "topic");
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1040 if (!topic)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1041 topic = "";
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1042
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1043 members = g_hash_table_lookup(data, "members");
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1044
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1045 if ((type = g_hash_table_lookup(data, "type")) && !strcmp(type, "Conference")) {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1046 id = yd->conf_id++;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1047 c = serv_got_joined_chat(gc, id, room);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1048 yd->confs = g_slist_prepend(yd->confs, c);
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 6804
diff changeset
1049 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
1050 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
1051 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1052 } else {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1053 if (yd->in_chat)
7186
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
1054 yahoo_chat_leave(gc, room,
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
1055 gaim_connection_get_display_name(gc),
949fb318cce5 [gaim-migrate @ 7754]
Tim Ringenbach <marv@pidgin.im>
parents: 7118
diff changeset
1056 FALSE);
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1057 if (!yd->chat_online)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1058 yahoo_chat_online(gc);
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
1059 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
1060 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1061 }
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
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1064 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
1065 {
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1066 GaimConversation *c;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1067
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1068 c = gaim_find_chat(gc, id);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1069 if (!c || !c->name)
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1070 return;
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1071
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1072 if (id != YAHOO_CHAT_ID) {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
1073 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
1074 gaim_conversation_get_name(c), msg);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1075 } else {
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7186
diff changeset
1076 yahoo_chat_invite(gc, gaim_connection_get_display_name(gc), name,
6729
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1077 gaim_conversation_get_name(c), msg);
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1078 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1079 }
c21179a914e5 [gaim-migrate @ 7256]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1080
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1081 struct yahoo_roomlist {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1082 int fd;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1083 int inpa;
13272
fd4f3356640f [gaim-migrate @ 15637]
Daniel Atallah <datallah@pidgin.im>
parents: 13201
diff changeset
1084 gchar *txbuf;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1085 gsize tx_written;
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1086 guchar *rxqueue;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1087 int rxlen;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1088 gboolean started;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1089 char *path;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1090 char *host;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1091 GaimRoomlist *list;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1092 GaimRoomlistRoom *cat;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1093 GaimRoomlistRoom *ucat;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1094 GMarkupParseContext *parse;
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
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1097 static void yahoo_roomlist_destroy(struct yahoo_roomlist *yrl)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1098 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1099 if (yrl->inpa)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1100 gaim_input_remove(yrl->inpa);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1101 g_free(yrl->txbuf);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1102 g_free(yrl->rxqueue);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1103 g_free(yrl->path);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1104 g_free(yrl->host);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1105 if (yrl->parse)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1106 g_markup_parse_context_free(yrl->parse);
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10394
diff changeset
1107 g_free(yrl);
8113
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
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1110 enum yahoo_room_type {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1111 yrt_yahoo,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1112 yrt_user,
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
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1115 struct yahoo_chatxml_state {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1116 GaimRoomlist *list;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1117 struct yahoo_roomlist *yrl;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1118 GQueue *q;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1119 struct {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1120 enum yahoo_room_type type;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1121 char *name;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1122 char *topic;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1123 char *id;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1124 int users, voices, webcams;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1125 } room;
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
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1128 struct yahoo_lobby {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1129 int count, users, voices, webcams;
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
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1132 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
1133 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1134 struct yahoo_chatxml_state *s;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1135
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1136 s = g_new0(struct yahoo_chatxml_state, 1);
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);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1147 g_free(s->room.name);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1148 g_free(s->room.topic);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1149 g_free(s->room.id);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1150 g_free(s);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1151 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1152
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11593
diff changeset
1153 static void yahoo_chatlist_start_element(GMarkupParseContext *context,
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11593
diff changeset
1154 const gchar *ename, const gchar **anames,
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11593
diff changeset
1155 const gchar **avalues, gpointer user_data,
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11593
diff changeset
1156 GError **error)
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1157 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1158 struct yahoo_chatxml_state *s = user_data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1159 GaimRoomlist *list = s->list;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1160 GaimRoomlistRoom *r;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1161 GaimRoomlistRoom *parent;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1162 int i;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1163
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1164 if (!strcmp(ename, "category")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1165 const gchar *name = NULL, *id = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1166
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1167 for (i = 0; anames[i]; i++) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1168 if (!strcmp(anames[i], "id"))
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1169 id = avalues[i];
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1170 if (!strcmp(anames[i], "name"))
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1171 name = avalues[i];
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1172 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1173 if (!name || !id)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1174 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1175
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1176 parent = g_queue_peek_head(s->q);
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1177 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
1178 gaim_roomlist_room_add_field(list, r, (gpointer)name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1179 gaim_roomlist_room_add_field(list, r, (gpointer)id);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1180 gaim_roomlist_room_add(list, r);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1181 g_queue_push_head(s->q, r);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1182 } else if (!strcmp(ename, "room")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1183 s->room.users = s->room.voices = s->room.webcams = 0;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1184
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1185 for (i = 0; anames[i]; i++) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1186 if (!strcmp(anames[i], "id")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1187 if (s->room.id)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1188 g_free(s->room.id);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1189 s->room.id = g_strdup(avalues[i]);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1190 } else if (!strcmp(anames[i], "name")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1191 if (s->room.name)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1192 g_free(s->room.name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1193 s->room.name = g_strdup(avalues[i]);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1194 } else if (!strcmp(anames[i], "topic")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1195 if (s->room.topic)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1196 g_free(s->room.topic);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1197 s->room.topic = g_strdup(avalues[i]);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1198 } else if (!strcmp(anames[i], "type")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1199 if (!strcmp("yahoo", avalues[i]))
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1200 s->room.type = yrt_yahoo;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1201 else
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1202 s->room.type = yrt_user;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1203 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1204 }
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 } else if (!strcmp(ename, "lobby")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1207 struct yahoo_lobby *lob = g_new0(struct yahoo_lobby, 1);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1208
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1209 for (i = 0; anames[i]; i++) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1210 if (!strcmp(anames[i], "count")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1211 lob->count = strtol(avalues[i], NULL, 10);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1212 } else if (!strcmp(anames[i], "users")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1213 s->room.users += lob->users = strtol(avalues[i], NULL, 10);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1214 } else if (!strcmp(anames[i], "voices")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1215 s->room.voices += lob->voices = strtol(avalues[i], NULL, 10);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1216 } else if (!strcmp(anames[i], "webcams")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1217 s->room.webcams += lob->webcams = strtol(avalues[i], NULL, 10);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1218 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1219 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1220 g_queue_push_head(s->q, lob);
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
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1224 static void yahoo_chatlist_end_element(GMarkupParseContext *context, const gchar *ename,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1225 gpointer user_data, GError **error)
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 struct yahoo_chatxml_state *s = user_data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1228
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1229 if (!strcmp(ename, "category")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1230 g_queue_pop_head(s->q);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1231 } else if (!strcmp(ename, "room")) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1232 struct yahoo_lobby *lob;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1233 GaimRoomlistRoom *r, *l;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1234
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1235 if (s->room.type == yrt_yahoo)
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1236 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
1237 s->room.name, s->yrl->cat);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1238 else
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1239 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
1240 s->room.name, s->yrl->ucat);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1241
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1242 gaim_roomlist_room_add_field(s->list, r, s->room.name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1243 gaim_roomlist_room_add_field(s->list, r, s->room.id);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1244 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
1245 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
1246 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
1247 gaim_roomlist_room_add_field(s->list, r, s->room.topic);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1248 gaim_roomlist_room_add(s->list, r);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1249
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1250 while ((lob = g_queue_pop_head(s->q))) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1251 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
1252 l = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_ROOM, name, 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 gaim_roomlist_room_add_field(s->list, l, name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1255 gaim_roomlist_room_add_field(s->list, l, s->room.id);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1256 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
1257 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
1258 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
1259 gaim_roomlist_room_add_field(s->list, l, s->room.topic);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1260 gaim_roomlist_room_add(s->list, l);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1261
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1262 g_free(name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1263 g_free(lob);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1264 }
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 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1267
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1268 static GMarkupParser parser = {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1269 yahoo_chatlist_start_element,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1270 yahoo_chatlist_end_element,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1271 NULL,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1272 NULL,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1273 NULL
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1274 };
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1275
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1276 static void yahoo_roomlist_cleanup(GaimRoomlist *list, struct yahoo_roomlist *yrl)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1277 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1278 gaim_roomlist_set_in_progress(list, FALSE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1279
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1280 if (yrl) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1281 list->proto_data = g_list_remove(list->proto_data, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1282 yahoo_roomlist_destroy(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
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1285 gaim_roomlist_unref(list);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1286 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1287
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1288 static void yahoo_roomlist_pending(gpointer data, gint source, GaimInputCondition cond)
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 struct yahoo_roomlist *yrl = data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1291 GaimRoomlist *list = yrl->list;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1292 char buf[1024];
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1293 int len;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1294 guchar *start;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1295 struct yahoo_chatxml_state *s;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1296
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1297 len = read(yrl->fd, buf, sizeof(buf));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1298
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1299 if (len < 0 && errno == EAGAIN)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1300 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1301
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1302 if (len <= 0) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1303 if (yrl->parse)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1304 g_markup_parse_context_end_parse(yrl->parse, NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1305 yahoo_roomlist_cleanup(list, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1306 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1307 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1308
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1309 yrl->rxqueue = g_realloc(yrl->rxqueue, len + yrl->rxlen);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1310 memcpy(yrl->rxqueue + yrl->rxlen, buf, len);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1311 yrl->rxlen += len;
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 if (!yrl->started) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1314 yrl->started = TRUE;
11318
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11044
diff changeset
1315 start = (guchar *)g_strstr_len((char *)yrl->rxqueue, yrl->rxlen, "\r\n\r\n");
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1316 if (!start || (start - yrl->rxqueue + 4) >= yrl->rxlen)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1317 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1318 start += 4;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1319 } else {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1320 start = yrl->rxqueue;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1321 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1322
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1323 if (yrl->parse == NULL) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1324 s = yahoo_chatxml_state_new(list, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1325 yrl->parse = g_markup_parse_context_new(&parser, 0, s,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1326 (GDestroyNotify)yahoo_chatxml_state_destroy);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1327 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1328
11318
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11044
diff changeset
1329 if (!g_markup_parse_context_parse(yrl->parse, (char *)start, (yrl->rxlen - (start - yrl->rxqueue)), NULL)) {
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1330
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1331 yahoo_roomlist_cleanup(list, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1332 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1333 }
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 yrl->rxlen = 0;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1336 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1337
14146
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1338 static void yahoo_roomlist_send_cb(gpointer data, gint source, GaimInputCondition cond)
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1339 {
14146
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1340 struct yahoo_roomlist *yrl;
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1341 GaimRoomlist *list;
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1342 int written, remaining;
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1343
14146
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1344 yrl = data;
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1345 list = yrl->list;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1346
14146
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1347 remaining = strlen(yrl->txbuf) - yrl->tx_written;
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1348 written = write(yrl->fd, yrl->txbuf + yrl->tx_written, remaining);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1349
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1350 if (written < 0 && errno == EAGAIN)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1351 written = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1352 else if (written <= 0) {
14146
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1353 gaim_input_remove(yrl->inpa);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1354 yrl->inpa = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1355 g_free(yrl->txbuf);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1356 yrl->txbuf = NULL;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1357 gaim_notify_error(gaim_account_get_connection(list->account), NULL, _("Unable to connect"), _("Fetching the room list failed."));
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1358 yahoo_roomlist_cleanup(list, yrl);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1359 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1360 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1361
14146
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1362 if (written < remaining) {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1363 yrl->tx_written += written;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1364 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1365 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1366
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1367 g_free(yrl->txbuf);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1368 yrl->txbuf = NULL;
14146
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1369
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1370 gaim_input_remove(yrl->inpa);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13000
diff changeset
1371 yrl->inpa = gaim_input_add(yrl->fd, GAIM_INPUT_READ,
14146
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1372 yahoo_roomlist_pending, yrl);
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1373
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1374 }
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1375
14182
517f4531b8a0 [gaim-migrate @ 16754]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
1376 static void yahoo_roomlist_got_connected(gpointer data, gint source, const gchar *error_message)
14146
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1377 {
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1378 struct yahoo_roomlist *yrl = data;
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1379 GaimRoomlist *list = yrl->list;
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1380 struct yahoo_data *yd = gaim_account_get_connection(list->account)->proto_data;
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1381
14146
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1382 if (source < 0) {
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1383 gaim_notify_error(gaim_account_get_connection(list->account), NULL, _("Unable to connect"), _("Fetching the room list failed."));
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1384 yahoo_roomlist_cleanup(list, yrl);
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1385 return;
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1386 }
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1387
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1388 yrl->fd = source;
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1389
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1390 yrl->txbuf = g_strdup_printf(
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1391 "GET http://%s/%s HTTP/1.0\r\n"
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1392 "Host: %s\r\n"
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1393 "Cookie: Y=%s; T=%s\r\n\r\n",
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1394 yrl->host, yrl->path, yrl->host, yd->cookie_y,
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1395 yd->cookie_t);
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1396
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1397
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1398 yrl->inpa = gaim_input_add(yrl->fd, GAIM_INPUT_WRITE,
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1399 yahoo_roomlist_send_cb, yrl);
4413802cb7a9 [gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents: 14031
diff changeset
1400 yahoo_roomlist_send_cb(yrl, yrl->fd, GAIM_INPUT_WRITE);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1401 }
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 GaimRoomlist *yahoo_roomlist_get_list(GaimConnection *gc)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1404 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1405 struct yahoo_roomlist *yrl;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1406 GaimRoomlist *rl;
12212
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1407 const char *rll;
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1408 char *url;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1409 GList *fields = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1410 GaimRoomlistField *f;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1411
12212
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1412 rll = gaim_account_get_string(gaim_connection_get_account(gc),
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1413 "room_list_locale", YAHOO_ROOMLIST_LOCALE);
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1414
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1415 if (rll != NULL && *rll != '\0') {
11043
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1416 url = g_strdup_printf("%s?chatcat=0&intl=%s",
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1417 gaim_account_get_string(gaim_connection_get_account(gc),
12212
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1418 "room_list", YAHOO_ROOMLIST_URL), rll);
11043
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1419 } else {
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1420 url = g_strdup_printf("%s?chatcat=0",
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1421 gaim_account_get_string(gaim_connection_get_account(gc),
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1422 "room_list", YAHOO_ROOMLIST_URL));
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1423 }
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1424
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1425 yrl = g_new0(struct yahoo_roomlist, 1);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1426 rl = gaim_roomlist_new(gaim_connection_get_account(gc));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1427 yrl->list = rl;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1428
9227
95c28297b72c [gaim-migrate @ 10023]
Don Seiler <rizzo@gentoo.org>
parents: 8735
diff changeset
1429 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
1430 g_free(url);
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 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", "room", TRUE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1433 fields = g_list_append(fields, f);
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 f = gaim_roomlist_field_new(GAIM_ROOMLIST_FIELD_STRING, "", "id", TRUE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1436 fields = g_list_append(fields, f);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1437
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1438 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
1439 fields = g_list_append(fields, f);
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 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
1442 fields = g_list_append(fields, f);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1443
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1444 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
1445 fields = g_list_append(fields, f);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1446
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1447 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
1448 fields = g_list_append(fields, f);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1449
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1450 gaim_roomlist_set_fields(rl, fields);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1451
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1452 if (gaim_proxy_connect(NULL, gaim_connection_get_account(gc), yrl->host, 80,
14170
f611621bc8a0 [gaim-migrate @ 16742]
Mark Doliner <markdoliner@pidgin.im>
parents: 14151
diff changeset
1453 yahoo_roomlist_got_connected, yrl) == NULL)
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1454 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1455 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
1456 yahoo_roomlist_cleanup(rl, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1457 return NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1458 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1459
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1460 rl->proto_data = g_list_append(rl->proto_data, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1461
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1462 gaim_roomlist_set_in_progress(rl, TRUE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1463 return rl;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1464 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1465
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1466 void yahoo_roomlist_cancel(GaimRoomlist *list)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1467 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1468 GList *l, *k;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1469
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1470 k = l = list->proto_data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1471 list->proto_data = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1472
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1473 gaim_roomlist_set_in_progress(list, FALSE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1474
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1475 for (; l; l = l->next) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1476 yahoo_roomlist_destroy(l->data);
10647
e9ad21c11fcc [gaim-migrate @ 12163]
Daniel Atallah <datallah@pidgin.im>
parents: 10575
diff changeset
1477 gaim_roomlist_unref(list);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1478 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1479 g_list_free(k);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1480 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1481
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1482 void yahoo_roomlist_expand_category(GaimRoomlist *list, GaimRoomlistRoom *category)
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1483 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1484 struct yahoo_roomlist *yrl;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1485 char *url;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1486 char *id;
12212
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1487 const char *rll;
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1488
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1489 if (category->type != GAIM_ROOMLIST_ROOMTYPE_CATEGORY)
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1490 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1491
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1492 if (!(id = g_list_nth_data(category->fields, 1))) {
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1493 gaim_roomlist_set_in_progress(list, FALSE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1494 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1495 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1496
12212
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1497 rll = gaim_account_get_string(list->account, "room_list_locale",
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1498 YAHOO_ROOMLIST_LOCALE);
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1499
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1500 if (rll != NULL && *rll != '\0') {
11043
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1501 url = g_strdup_printf("%s?chatroom_%s=0&intl=%s",
12212
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1502 gaim_account_get_string(list->account,"room_list",
d9129dc59ecd [gaim-migrate @ 14514]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11644
diff changeset
1503 YAHOO_ROOMLIST_URL), id, rll);
11043
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1504 } else {
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1505 url = g_strdup_printf("%s?chatroom_%s=0",
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1506 gaim_account_get_string(list->account,"room_list",
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1507 YAHOO_ROOMLIST_URL), id);
763427cecd21 [gaim-migrate @ 12957]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10954
diff changeset
1508 }
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1509
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1510 yrl = g_new0(struct yahoo_roomlist, 1);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1511 yrl->list = list;
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1512 yrl->cat = category;
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1513 list->proto_data = g_list_append(list->proto_data, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1514
9227
95c28297b72c [gaim-migrate @ 10023]
Don Seiler <rizzo@gentoo.org>
parents: 8735
diff changeset
1515 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
1516 g_free(url);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1517
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8410
diff changeset
1518 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
1519 gaim_roomlist_room_add(list, yrl->ucat);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1520
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
1521 if (gaim_proxy_connect(NULL, list->account, yrl->host, 80,
14170
f611621bc8a0 [gaim-migrate @ 16742]
Mark Doliner <markdoliner@pidgin.im>
parents: 14151
diff changeset
1522 yahoo_roomlist_got_connected, yrl) == NULL)
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1523 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1524 gaim_notify_error(gaim_account_get_connection(list->account),
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1525 NULL, _("Connection problem"), _("Unable to fetch room list."));
10647
e9ad21c11fcc [gaim-migrate @ 12163]
Daniel Atallah <datallah@pidgin.im>
parents: 10575
diff changeset
1526 gaim_roomlist_ref(list);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1527 yahoo_roomlist_cleanup(list, yrl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1528 return;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1529 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1530
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1531 gaim_roomlist_set_in_progress(list, TRUE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1532 gaim_roomlist_ref(list);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
1533 }

mercurial