Mercurial > pidgin.yaz
annotate plugins/yay/yay.c @ 1401:bf041349b11e
[gaim-migrate @ 1411]
abliity to set accounts away independent of each other. also allows for all the other states (like in yahoo and icq). probably breaks MSN, so don't use it until rob fixes it.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Wed, 10 Jan 2001 22:15:24 +0000 |
parents | 476b24cdfa32 |
children | 65f4a0325022 |
rev | line source |
---|---|
1054 | 1 /* |
2 * gaim | |
3 * | |
4 * Some code copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
5 * libfaim code copyright 1998, 1999 Adam Fritzler <afritz@auk.cx> | |
6 * | |
7 * This program is free software; you can redistribute it and/or modify | |
8 * it under the terms of the GNU General Public License as published by | |
9 * the Free Software Foundation; either version 2 of the License, or | |
10 * (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 * GNU General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU General Public License | |
18 * along with this program; if not, write to the Free Software | |
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
20 * | |
21 */ | |
22 | |
23 #ifdef HAVE_CONFIG_H | |
24 #include "../config.h" | |
25 #endif | |
26 | |
27 | |
28 #include <netdb.h> | |
29 #include <gtk/gtk.h> | |
30 #include <unistd.h> | |
31 #include <errno.h> | |
32 #include <netinet/in.h> | |
33 #include <arpa/inet.h> | |
34 #include <string.h> | |
35 #include <stdlib.h> | |
36 #include <stdio.h> | |
37 #include <time.h> | |
38 #include <sys/socket.h> | |
39 #include <sys/stat.h> | |
40 #include "multi.h" | |
41 #include "prpl.h" | |
42 #include "gaim.h" | |
43 #include "libyahoo.h" | |
44 | |
1232
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
45 #include "pixmaps/status-away.xpm" |
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
46 #include "pixmaps/status-here.xpm" |
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
47 #include "pixmaps/status-idle.xpm" |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
48 |
1054 | 49 struct yahoo_data { |
50 struct yahoo_context *ctxt; | |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
51 int current_status; |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
52 GHashTable *hash; |
1054 | 53 }; |
54 | |
55 static char *yahoo_name() { | |
56 return "Yahoo"; | |
57 } | |
58 | |
59 char *name() { | |
60 return "Yahoo"; | |
61 } | |
62 | |
63 char *description() { | |
64 return "Allows gaim to use the Yahoo protocol"; | |
65 } | |
66 | |
67 static void process_packet_status(struct gaim_connection *gc, struct yahoo_packet *pkt) { | |
68 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; | |
69 int i; | |
1232
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
70 time_t tmptime; |
1054 | 71 |
1395
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
72 if (pkt->service == YAHOO_SERVICE_LOGOFF && !strcasecmp(pkt->active_id, gc->username) && |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
73 pkt->msgtype == YAHOO_MSGTYPE_ERROR) { |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
74 hide_login_progress(gc, "Disconnected"); |
1054 | 75 signoff(gc); |
76 return; | |
77 } | |
78 | |
79 for (i = 0; i < pkt->idstatus_count; i++) { | |
80 struct buddy *b; | |
81 struct yahoo_idstatus *rec = pkt->idstatus[i]; | |
1395
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
82 gboolean online = rec->in_pager || rec->in_chat || rec->in_game; |
1054 | 83 |
84 b = find_buddy(gc, rec->id); | |
1395
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
85 if (!b) continue; |
1232
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
86 time(&tmptime); |
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
87 if (b->signon == 0) b->signon = tmptime; |
1395
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
88 if (!online) |
1054 | 89 serv_got_update(gc, b->name, 0, 0, 0, 0, 0, 0); |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
90 else { |
1400
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
91 if (rec->status == YAHOO_STATUS_AVAILABLE) |
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
92 serv_got_update(gc, b->name, 1, 0, b->signon, 0, UC_NORMAL, 0); |
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
93 else if (rec->status == YAHOO_STATUS_IDLE) |
1232
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
94 serv_got_update(gc, b->name, 1, 0, b->signon, tmptime - 600, |
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
95 (rec->status << 5) | UC_NORMAL, 0); |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
96 else |
1232
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
97 serv_got_update(gc, b->name, 1, 0, b->signon, 0, |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
98 (rec->status << 5) | UC_UNAVAILABLE, 0); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
99 if (rec->status == YAHOO_STATUS_CUSTOM) { |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
100 gpointer val = g_hash_table_lookup(yd->hash, b->name); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
101 if (val) |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
102 g_free(val); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
103 g_hash_table_insert(yd->hash, |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
104 g_strdup(b->name), g_strdup(rec->status_msg)); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
105 } |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
106 } |
1054 | 107 } |
108 } | |
109 | |
110 static void process_packet_message(struct gaim_connection *gc, struct yahoo_packet *pkt) { | |
111 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; | |
1400
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
112 char buf[BUF_LEN * 4]; |
1054 | 113 |
114 if (pkt->msg) { | |
115 if (pkt->msgtype == YAHOO_MSGTYPE_BOUNCE) | |
116 do_error_dialog("Your message did not get received.", "Error"); | |
1400
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
117 else { |
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
118 g_snprintf(buf, sizeof(buf), "%s", pkt->msg); |
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
119 serv_got_im(gc, pkt->msg_id, buf, pkt->msg_timestamp ? 1 : 0); |
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
120 } |
1054 | 121 } |
122 } | |
123 | |
124 static void process_packet_newmail(struct gaim_connection *gc, struct yahoo_packet *pkt) { | |
125 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; | |
126 char buf[2048]; | |
127 | |
128 if (pkt->mail_status) { | |
129 if (pkt->service == YAHOO_SERVICE_NEWMAIL) | |
130 g_snprintf(buf, sizeof buf, "%s has %d new message%s on Yahoo Mail.", | |
131 gc->username, pkt->mail_status, | |
132 pkt->mail_status == 1 ? "" : "s"); | |
133 else | |
134 g_snprintf(buf, sizeof buf, "%s has %d new personal message%s on Yahoo Mail.", | |
135 gc->username, pkt->mail_status, | |
136 pkt->mail_status == 1 ? "" : "s"); | |
137 do_error_dialog(buf, "New Mail!"); | |
138 } | |
139 } | |
140 | |
1395
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
141 static void process_packet_conference(struct gaim_connection *gc, struct yahoo_packet *pkt) { |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
142 } |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
143 |
1054 | 144 static void yahoo_callback(gpointer data, gint source, GdkInputCondition condition) { |
145 struct gaim_connection *gc = (struct gaim_connection *)data; | |
146 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; | |
147 | |
148 struct yahoo_rawpacket *rawpkt; | |
149 struct yahoo_packet *pkt; | |
150 | |
1395
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
151 if (!yahoo_getdata(yd->ctxt)) |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
152 return; |
1054 | 153 |
154 while ((rawpkt = yahoo_getpacket(yd->ctxt)) != NULL) { | |
155 pkt = yahoo_parsepacket(yd->ctxt, rawpkt); | |
156 | |
157 switch (pkt->service) { | |
158 case YAHOO_SERVICE_USERSTAT: | |
159 case YAHOO_SERVICE_CHATLOGON: | |
160 case YAHOO_SERVICE_CHATLOGOFF: | |
161 case YAHOO_SERVICE_LOGON: | |
162 case YAHOO_SERVICE_LOGOFF: | |
163 case YAHOO_SERVICE_ISAWAY: | |
164 case YAHOO_SERVICE_ISBACK: | |
1395
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
165 case YAHOO_SERVICE_GAMELOGON: |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
166 case YAHOO_SERVICE_GAMELOGOFF: |
1054 | 167 process_packet_status(gc, pkt); |
168 break; | |
169 case YAHOO_SERVICE_MESSAGE: | |
170 case YAHOO_SERVICE_CHATMSG: | |
171 case YAHOO_SERVICE_SYSMESSAGE: | |
172 process_packet_message(gc, pkt); | |
173 break; | |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
174 case YAHOO_SERVICE_NEWCONTACT: |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
175 if (pkt->msg) |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
176 process_packet_message(gc, pkt); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
177 else |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
178 process_packet_status(gc, pkt); |
1168
8fabc3349254
[gaim-migrate @ 1178]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1143
diff
changeset
|
179 if (pkt->msg_id && !find_buddy(gc, pkt->msg_id)) { |
8fabc3349254
[gaim-migrate @ 1178]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1143
diff
changeset
|
180 char buf[1024]; |
8fabc3349254
[gaim-migrate @ 1178]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1143
diff
changeset
|
181 g_snprintf(buf, sizeof buf, "%s on Yahoo has made you " |
8fabc3349254
[gaim-migrate @ 1178]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1143
diff
changeset
|
182 "their friend", pkt->msg_id); |
8fabc3349254
[gaim-migrate @ 1178]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1143
diff
changeset
|
183 do_error_dialog(buf, "Yahoo"); |
1400
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
184 if (!find_buddy(gc, pkt->msg_id)) |
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
185 show_add_buddy(gc, pkt->msg_id, NULL); |
1168
8fabc3349254
[gaim-migrate @ 1178]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1143
diff
changeset
|
186 } |
1054 | 187 break; |
188 case YAHOO_SERVICE_NEWMAIL: | |
189 case YAHOO_SERVICE_NEWPERSONALMAIL: | |
1168
8fabc3349254
[gaim-migrate @ 1178]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1143
diff
changeset
|
190 /* do we really want to do this? */ |
1054 | 191 process_packet_newmail(gc, pkt); |
192 break; | |
1395
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
193 case YAHOO_SERVICE_CONFINVITE: |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
194 case YAHOO_SERVICE_CONFADDINVITE: |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
195 case YAHOO_SERVICE_CONFLOGON: |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
196 case YAHOO_SERVICE_CONFLOGOFF: |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
197 case YAHOO_SERVICE_CONFMSG: |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
198 process_packet_conference(gc, pkt); |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
199 break; |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
200 case YAHOO_SERVICE_FILETRANSFER: |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
201 case YAHOO_SERVICE_CALENDAR: |
567758889707
[gaim-migrate @ 1405]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1351
diff
changeset
|
202 case YAHOO_SERVICE_CHATINVITE: |
1054 | 203 default: |
204 debug_printf("Unhandled packet type %s\n", | |
205 yahoo_get_service_string(pkt->service)); | |
206 break; | |
207 } | |
208 yahoo_free_packet(pkt); | |
209 yahoo_free_rawpacket(rawpkt); | |
210 } | |
211 } | |
212 | |
213 static void yahoo_login(struct aim_user *user) { | |
1089
f0f5c10cce63
[gaim-migrate @ 1099]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1054
diff
changeset
|
214 struct gaim_connection *gc = new_gaim_conn(user); |
1054 | 215 struct yahoo_data *yd = gc->proto_data = g_new0(struct yahoo_data, 1); |
216 | |
217 struct yahoo_options opt; | |
218 struct yahoo_context *ctxt; | |
219 opt.connect_mode = YAHOO_CONNECT_NORMAL; | |
220 opt.proxy_host = NULL; | |
221 ctxt = yahoo_init(user->username, user->password, &opt); | |
222 yd->ctxt = ctxt; | |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
223 yd->current_status = YAHOO_STATUS_AVAILABLE; |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
224 yd->hash = g_hash_table_new(g_str_hash, g_str_equal); |
1054 | 225 |
226 set_login_progress(gc, 1, "Connecting"); | |
227 while (gtk_events_pending()) | |
228 gtk_main_iteration(); | |
1090
79cdc86ef4c6
[gaim-migrate @ 1100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1089
diff
changeset
|
229 if (!g_slist_find(connections, gc)) |
79cdc86ef4c6
[gaim-migrate @ 1100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1089
diff
changeset
|
230 return; |
1054 | 231 |
232 if (!ctxt || !yahoo_connect(ctxt)) { | |
233 debug_printf("Yahoo: Unable to connect\n"); | |
234 hide_login_progress(gc, "Unable to connect"); | |
1096
c1dcba9f3a3a
[gaim-migrate @ 1106]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1090
diff
changeset
|
235 signoff(gc); |
1054 | 236 return; |
237 } | |
238 | |
239 debug_printf("Yahoo: connected\n"); | |
240 | |
241 set_login_progress(gc, 3, "Getting Config"); | |
242 while (gtk_events_pending()) | |
243 gtk_main_iteration(); | |
1090
79cdc86ef4c6
[gaim-migrate @ 1100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1089
diff
changeset
|
244 if (!g_slist_find(connections, gc)) |
79cdc86ef4c6
[gaim-migrate @ 1100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1089
diff
changeset
|
245 return; |
1054 | 246 |
247 yahoo_get_config(ctxt); | |
248 | |
1136
c8615d023aaf
[gaim-migrate @ 1146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1096
diff
changeset
|
249 if (!yahoo_cmd_logon(ctxt, YAHOO_STATUS_AVAILABLE)) { |
1054 | 250 debug_printf("Yahoo: Unable to login\n"); |
251 hide_login_progress(gc, "Unable to login"); | |
1096
c1dcba9f3a3a
[gaim-migrate @ 1106]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1090
diff
changeset
|
252 signoff(gc); |
1054 | 253 return; |
254 } | |
255 | |
1298
38f8096975ef
[gaim-migrate @ 1308]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1273
diff
changeset
|
256 debug_printf("Yahoo: logged in %s\n", gc->username); |
38f8096975ef
[gaim-migrate @ 1308]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1273
diff
changeset
|
257 account_online(gc); |
38f8096975ef
[gaim-migrate @ 1308]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1273
diff
changeset
|
258 serv_finish_login(gc); |
38f8096975ef
[gaim-migrate @ 1308]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1273
diff
changeset
|
259 |
38f8096975ef
[gaim-migrate @ 1308]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1273
diff
changeset
|
260 if (bud_list_cache_exists(gc)) |
38f8096975ef
[gaim-migrate @ 1308]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1273
diff
changeset
|
261 do_import(NULL, gc); |
38f8096975ef
[gaim-migrate @ 1308]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1273
diff
changeset
|
262 |
1054 | 263 if (ctxt->buddies) { |
264 struct yahoo_buddy **buddies; | |
265 | |
266 for (buddies = ctxt->buddies; *buddies; buddies++) { | |
267 struct yahoo_buddy *bud = *buddies; | |
268 | |
1400
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
269 if (!find_buddy(gc, bud->id)) |
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
270 add_buddy(gc, bud->group, bud->id, bud->id); |
1054 | 271 } |
272 } | |
273 | |
274 gc->inpa = gdk_input_add(ctxt->sockfd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, | |
275 yahoo_callback, gc); | |
276 } | |
277 | |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
278 static gboolean yahoo_destroy_hash(gpointer key, gpointer val, gpointer data) { |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
279 g_free(key); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
280 g_free(val); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
281 return TRUE; |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
282 } |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
283 |
1054 | 284 static void yahoo_close(struct gaim_connection *gc) { |
285 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; | |
286 if (gc->inpa) | |
287 gdk_input_remove(gc->inpa); | |
288 gc->inpa = -1; | |
1351
3c7ccd2fd4b0
[gaim-migrate @ 1361]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1302
diff
changeset
|
289 if (yd->ctxt) |
3c7ccd2fd4b0
[gaim-migrate @ 1361]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1302
diff
changeset
|
290 yahoo_cmd_logoff(yd->ctxt); |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
291 g_hash_table_foreach_remove(yd->hash, yahoo_destroy_hash, NULL); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
292 g_hash_table_destroy(yd->hash); |
1054 | 293 g_free(yd); |
294 } | |
295 | |
296 static void yahoo_send_im(struct gaim_connection *gc, char *who, char *message, int away) { | |
297 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; | |
298 | |
299 yahoo_cmd_msg(yd->ctxt, gc->username, who, message); | |
300 } | |
301 | |
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
302 static void yahoo_set_away(struct gaim_connection *gc, char *state, char *msg) { |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
303 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
304 |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
305 if (msg) { |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
306 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_CUSTOM, msg); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
307 yd->current_status = YAHOO_STATUS_CUSTOM; |
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
308 } else if (state) { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
309 if (!strcmp(state, "Available")) { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
310 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_AVAILABLE, msg); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
311 yd->current_status = YAHOO_STATUS_AVAILABLE; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
312 } else if (!strcmp(state, "Be Right Back")) { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
313 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_BRB, msg); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
314 yd->current_status = YAHOO_STATUS_BRB; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
315 } else if (!strcmp(state, "Busy")) { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
316 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_BUSY, msg); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
317 yd->current_status = YAHOO_STATUS_BUSY; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
318 } else if (!strcmp(state, "Not At Home")) { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
319 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_NOTATHOME, msg); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
320 yd->current_status = YAHOO_STATUS_NOTATHOME; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
321 } else if (!strcmp(state, "Not At Desk")) { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
322 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_NOTATDESK, msg); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
323 yd->current_status = YAHOO_STATUS_NOTATDESK; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
324 } else if (!strcmp(state, "Not In Office")) { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
325 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_NOTINOFFICE, msg); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
326 yd->current_status = YAHOO_STATUS_NOTINOFFICE; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
327 } else if (!strcmp(state, "On Phone")) { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
328 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_ONPHONE, msg); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
329 yd->current_status = YAHOO_STATUS_ONPHONE; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
330 } else if (!strcmp(state, "On Vacation")) { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
331 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_ONVACATION, msg); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
332 yd->current_status = YAHOO_STATUS_ONVACATION; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
333 } else if (!strcmp(state, "Out To Lunch")) { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
334 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_OUTTOLUNCH, msg); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
335 yd->current_status = YAHOO_STATUS_OUTTOLUNCH; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
336 } else if (!strcmp(state, "Stepped Out")) { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
337 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_STEPPEDOUT, msg); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
338 yd->current_status = YAHOO_STATUS_STEPPEDOUT; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
339 } else if (!strcmp(state, "Invisible")) { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
340 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_INVISIBLE, msg); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
341 yd->current_status = YAHOO_STATUS_INVISIBLE; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
342 } |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
343 } else if (gc->is_idle) { |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
344 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_IDLE, NULL); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
345 yd->current_status = YAHOO_STATUS_IDLE; |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
346 } else { |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
347 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_AVAILABLE, NULL); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
348 yd->current_status = YAHOO_STATUS_AVAILABLE; |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
349 } |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
350 } |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
351 |
1054 | 352 static void yahoo_set_idle(struct gaim_connection *gc, int idle) { |
353 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; | |
354 | |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
355 if (idle && yd->current_status == YAHOO_STATUS_AVAILABLE) { |
1054 | 356 yahoo_cmd_set_away_mode(yd->ctxt, YAHOO_STATUS_IDLE, NULL); |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
357 yd->current_status = YAHOO_STATUS_IDLE; |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
358 } else if (!idle && yd->current_status == YAHOO_STATUS_IDLE) { |
1054 | 359 yahoo_cmd_set_back_mode(yd->ctxt, YAHOO_STATUS_AVAILABLE, NULL); |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
360 yd->current_status = YAHOO_STATUS_AVAILABLE; |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
361 } |
1054 | 362 } |
363 | |
364 static void yahoo_keepalive(struct gaim_connection *gc) { | |
365 yahoo_cmd_ping(((struct yahoo_data *)gc->proto_data)->ctxt); | |
366 } | |
367 | |
368 static void gyahoo_add_buddy(struct gaim_connection *gc, char *name) { | |
369 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; | |
370 struct yahoo_buddy *tmpbuddy; | |
371 struct group *g = find_group_by_buddy(gc, name); | |
372 char *group = NULL; | |
373 | |
374 if (g) { | |
375 group = g->name; | |
376 } else if (yd->ctxt && yd->ctxt->buddies[0]) { | |
377 tmpbuddy = yd->ctxt->buddies[0]; | |
378 group = tmpbuddy->group; | |
379 } | |
380 | |
381 if (group) | |
382 yahoo_add_buddy(yd->ctxt, name, gc->username, group, ""); | |
383 } | |
384 | |
1300
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
385 static void yahoo_add_buddies(struct gaim_connection *gc, GList *buddies) { |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
386 while (buddies) { |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
387 gyahoo_add_buddy(gc, buddies->data); |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
388 buddies = buddies->next; |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
389 } |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
390 } |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
391 |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
392 static void gyahoo_remove_buddy(struct gaim_connection *gc, char *name) { |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
393 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
394 struct yahoo_buddy *tmpbuddy; |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
395 struct group *g = find_group_by_buddy(gc, name); |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
396 char *group = NULL; |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
397 |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
398 if (g) { |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
399 group = g->name; |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
400 } else if (yd->ctxt && yd->ctxt->buddies[0]) { |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
401 tmpbuddy = yd->ctxt->buddies[0]; |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
402 group = tmpbuddy->group; |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
403 } |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
404 |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
405 if (group) |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
406 yahoo_remove_buddy(yd->ctxt, name, gc->username, group, ""); |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
407 } |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
408 |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
409 static char **yahoo_list_icon(int uc) { |
1232
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
410 if ((uc >> 5) == YAHOO_STATUS_IDLE) |
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
411 return status_idle_xpm; |
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
412 else if (uc == UC_NORMAL) |
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
413 return status_here_xpm; |
0c7c659fc730
[gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1168
diff
changeset
|
414 return status_away_xpm; |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
415 } |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
416 |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
417 static void yahoo_action_menu(GtkWidget *menu, struct gaim_connection *gc, char *who) { |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
418 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
419 GtkWidget *button; |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
420 struct buddy *b = find_buddy(gc, who); /* this should never be null. if it is, |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
421 segfault and get the bug report. */ |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
422 char buf[1024]; |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
423 |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
424 if (b->uc & UC_NORMAL) |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
425 return; |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
426 |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
427 if ((b->uc >> 5) != YAHOO_STATUS_CUSTOM) |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
428 g_snprintf(buf, sizeof buf, "Status: %s", yahoo_get_status_string(b->uc >> 5)); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
429 else |
1400
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
430 g_snprintf(buf, sizeof buf, "Custom Status: %s", |
476b24cdfa32
[gaim-migrate @ 1410]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1395
diff
changeset
|
431 (char *)g_hash_table_lookup(yd->hash, b->name)); |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
432 button = gtk_menu_item_new_with_label(buf); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
433 gtk_menu_append(GTK_MENU(menu), button); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
434 gtk_widget_show(button); |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
435 } |
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
436 |
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
437 static GList *yahoo_away_states() { |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
438 GList *m = NULL; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
439 |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
440 m = g_list_append(m, "Available"); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
441 m = g_list_append(m, "Be Right Back"); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
442 m = g_list_append(m, "Busy"); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
443 m = g_list_append(m, "Not At Home"); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
444 m = g_list_append(m, "Not At Desk"); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
445 m = g_list_append(m, "Not In Office"); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
446 m = g_list_append(m, "On Phone"); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
447 m = g_list_append(m, "On Vacation"); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
448 m = g_list_append(m, "Out To Lunch"); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
449 m = g_list_append(m, "Stepped Out"); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
450 m = g_list_append(m, "Invisible"); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
451 m = g_list_append(m, GAIM_AWAY_CUSTOM); |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
452 |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
453 return m; |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
454 } |
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
455 |
1054 | 456 static struct prpl *my_protocol = NULL; |
457 | |
458 void Yahoo_init(struct prpl *ret) { | |
459 /* the NULL's aren't required but they're nice to have */ | |
460 ret->protocol = PROTO_YAHOO; | |
461 ret->name = yahoo_name; | |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
462 ret->list_icon = yahoo_list_icon; |
1401
bf041349b11e
[gaim-migrate @ 1411]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1400
diff
changeset
|
463 ret->away_states = yahoo_away_states; |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
464 ret->action_menu = yahoo_action_menu; |
1302
4c5c2fcb83cd
[gaim-migrate @ 1312]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1300
diff
changeset
|
465 ret->user_opts = NULL; |
1054 | 466 ret->login = yahoo_login; |
467 ret->close = yahoo_close; | |
468 ret->send_im = yahoo_send_im; | |
469 ret->set_info = NULL; | |
470 ret->get_info = NULL; | |
1143
403989ecc1cc
[gaim-migrate @ 1153]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1136
diff
changeset
|
471 ret->set_away = yahoo_set_away; |
1054 | 472 ret->get_away_msg = NULL; |
473 ret->set_dir = NULL; | |
474 ret->get_dir = NULL; | |
475 ret->dir_search = NULL; | |
476 ret->set_idle = yahoo_set_idle; | |
477 ret->change_passwd = NULL; | |
478 ret->add_buddy = gyahoo_add_buddy; | |
1300
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
479 ret->add_buddies = yahoo_add_buddies; |
59f08eb64017
[gaim-migrate @ 1310]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1298
diff
changeset
|
480 ret->remove_buddy = gyahoo_remove_buddy; |
1054 | 481 ret->add_permit = NULL; |
482 ret->add_deny = NULL; | |
483 ret->rem_permit = NULL; | |
484 ret->rem_deny = NULL; | |
485 ret->set_permit_deny = NULL; | |
486 ret->warn = NULL; | |
487 ret->accept_chat = NULL; | |
488 ret->join_chat = NULL; | |
489 ret->chat_invite = NULL; | |
490 ret->chat_leave = NULL; | |
491 ret->chat_whisper = NULL; | |
492 ret->chat_send = NULL; | |
493 ret->keepalive = yahoo_keepalive; | |
494 | |
495 my_protocol = ret; | |
496 } | |
497 | |
498 char *gaim_plugin_init(GModule *handle) { | |
499 load_protocol(Yahoo_init); | |
500 return NULL; | |
501 } | |
502 | |
503 void gaim_plugin_remove() { | |
504 struct prpl *p = find_prpl(PROTO_YAHOO); | |
505 if (p == my_protocol) | |
506 unload_protocol(p); | |
507 } |