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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1054
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1 /*
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2 * gaim
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3 *
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
4 * Some code copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
5 * libfaim code copyright 1998, 1999 Adam Fritzler <afritz@auk.cx>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
6 *
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
10 * (at your option) any later version.
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
11 *
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
15 * GNU General Public License for more details.
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
16 *
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
20 *
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
21 */
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
22
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
23 #ifdef HAVE_CONFIG_H
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
24 #include "../config.h"
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
25 #endif
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
26
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
27
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
28 #include <netdb.h>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
29 #include <gtk/gtk.h>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
30 #include <unistd.h>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
31 #include <errno.h>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
32 #include <netinet/in.h>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
33 #include <arpa/inet.h>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
34 #include <string.h>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
35 #include <stdlib.h>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
36 #include <stdio.h>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
37 #include <time.h>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
38 #include <sys/socket.h>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
39 #include <sys/stat.h>
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
40 #include "multi.h"
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
41 #include "prpl.h"
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
42 #include "gaim.h"
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
43 #include "libyahoo.h"
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
49 struct yahoo_data {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
53 };
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
54
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
55 static char *yahoo_name() {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
56 return "Yahoo";
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
57 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
58
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
59 char *name() {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
60 return "Yahoo";
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
61 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
62
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
63 char *description() {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
64 return "Allows gaim to use the Yahoo protocol";
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
65 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
66
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
67 static void process_packet_status(struct gaim_connection *gc, struct yahoo_packet *pkt) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
68 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
69 int i;
1232
0c7c659fc730 [gaim-migrate @ 1242]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1168
diff changeset
70 time_t tmptime;
1054
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
75 signoff(gc);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
76 return;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
77 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
78
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
79 for (i = 0; i < pkt->idstatus_count; i++) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
80 struct buddy *b;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
83
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
107 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
108 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
109
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
110 static void process_packet_message(struct gaim_connection *gc, struct yahoo_packet *pkt) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
113
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
114 if (pkt->msg) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
115 if (pkt->msgtype == YAHOO_MSGTYPE_BOUNCE)
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
121 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
122 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
123
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
124 static void process_packet_newmail(struct gaim_connection *gc, struct yahoo_packet *pkt) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
125 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
126 char buf[2048];
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
127
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
128 if (pkt->mail_status) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
129 if (pkt->service == YAHOO_SERVICE_NEWMAIL)
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
130 g_snprintf(buf, sizeof buf, "%s has %d new message%s on Yahoo Mail.",
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
131 gc->username, pkt->mail_status,
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
132 pkt->mail_status == 1 ? "" : "s");
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
133 else
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
134 g_snprintf(buf, sizeof buf, "%s has %d new personal message%s on Yahoo Mail.",
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
135 gc->username, pkt->mail_status,
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
136 pkt->mail_status == 1 ? "" : "s");
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
137 do_error_dialog(buf, "New Mail!");
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
138 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
139 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
144 static void yahoo_callback(gpointer data, gint source, GdkInputCondition condition) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
145 struct gaim_connection *gc = (struct gaim_connection *)data;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
146 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
147
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
148 struct yahoo_rawpacket *rawpkt;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
149 struct yahoo_packet *pkt;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
153
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
154 while ((rawpkt = yahoo_getpacket(yd->ctxt)) != NULL) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
155 pkt = yahoo_parsepacket(yd->ctxt, rawpkt);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
156
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
157 switch (pkt->service) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
158 case YAHOO_SERVICE_USERSTAT:
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
159 case YAHOO_SERVICE_CHATLOGON:
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
160 case YAHOO_SERVICE_CHATLOGOFF:
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
161 case YAHOO_SERVICE_LOGON:
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
162 case YAHOO_SERVICE_LOGOFF:
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
163 case YAHOO_SERVICE_ISAWAY:
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
167 process_packet_status(gc, pkt);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
168 break;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
169 case YAHOO_SERVICE_MESSAGE:
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
170 case YAHOO_SERVICE_CHATMSG:
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
171 case YAHOO_SERVICE_SYSMESSAGE:
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
172 process_packet_message(gc, pkt);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
187 break;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
188 case YAHOO_SERVICE_NEWMAIL:
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
191 process_packet_newmail(gc, pkt);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
203 default:
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
204 debug_printf("Unhandled packet type %s\n",
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
205 yahoo_get_service_string(pkt->service));
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
206 break;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
207 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
208 yahoo_free_packet(pkt);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
209 yahoo_free_rawpacket(rawpkt);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
210 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
211 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
212
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
215 struct yahoo_data *yd = gc->proto_data = g_new0(struct yahoo_data, 1);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
216
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
217 struct yahoo_options opt;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
218 struct yahoo_context *ctxt;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
219 opt.connect_mode = YAHOO_CONNECT_NORMAL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
220 opt.proxy_host = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
221 ctxt = yahoo_init(user->username, user->password, &opt);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
225
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
226 set_login_progress(gc, 1, "Connecting");
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
227 while (gtk_events_pending())
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
231
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
232 if (!ctxt || !yahoo_connect(ctxt)) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
233 debug_printf("Yahoo: Unable to connect\n");
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
236 return;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
237 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
238
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
239 debug_printf("Yahoo: connected\n");
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
240
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
241 set_login_progress(gc, 3, "Getting Config");
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
242 while (gtk_events_pending())
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
246
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
247 yahoo_get_config(ctxt);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
250 debug_printf("Yahoo: Unable to login\n");
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
253 return;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
254 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
263 if (ctxt->buddies) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
264 struct yahoo_buddy **buddies;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
265
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
266 for (buddies = ctxt->buddies; *buddies; buddies++) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
267 struct yahoo_buddy *bud = *buddies;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
271 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
272 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
273
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
274 gc->inpa = gdk_input_add(ctxt->sockfd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION,
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
275 yahoo_callback, gc);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
276 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
284 static void yahoo_close(struct gaim_connection *gc) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
285 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
286 if (gc->inpa)
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
287 gdk_input_remove(gc->inpa);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
293 g_free(yd);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
294 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
295
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
296 static void yahoo_send_im(struct gaim_connection *gc, char *who, char *message, int away) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
297 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
298
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
299 yahoo_cmd_msg(yd->ctxt, gc->username, who, message);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
300 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
352 static void yahoo_set_idle(struct gaim_connection *gc, int idle) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
353 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
362 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
363
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
364 static void yahoo_keepalive(struct gaim_connection *gc) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
365 yahoo_cmd_ping(((struct yahoo_data *)gc->proto_data)->ctxt);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
366 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
367
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
368 static void gyahoo_add_buddy(struct gaim_connection *gc, char *name) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
369 struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
370 struct yahoo_buddy *tmpbuddy;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
371 struct group *g = find_group_by_buddy(gc, name);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
372 char *group = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
373
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
374 if (g) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
375 group = g->name;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
376 } else if (yd->ctxt && yd->ctxt->buddies[0]) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
377 tmpbuddy = yd->ctxt->buddies[0];
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
378 group = tmpbuddy->group;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
379 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
380
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
381 if (group)
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
382 yahoo_add_buddy(yd->ctxt, name, gc->username, group, "");
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
383 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
456 static struct prpl *my_protocol = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
457
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
458 void Yahoo_init(struct prpl *ret) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
459 /* the NULL's aren't required but they're nice to have */
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
460 ret->protocol = PROTO_YAHOO;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
466 ret->login = yahoo_login;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
467 ret->close = yahoo_close;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
468 ret->send_im = yahoo_send_im;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
469 ret->set_info = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
472 ret->get_away_msg = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
473 ret->set_dir = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
474 ret->get_dir = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
475 ret->dir_search = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
476 ret->set_idle = yahoo_set_idle;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
477 ret->change_passwd = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
481 ret->add_permit = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
482 ret->add_deny = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
483 ret->rem_permit = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
484 ret->rem_deny = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
485 ret->set_permit_deny = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
486 ret->warn = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
487 ret->accept_chat = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
488 ret->join_chat = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
489 ret->chat_invite = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
490 ret->chat_leave = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
491 ret->chat_whisper = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
492 ret->chat_send = NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
493 ret->keepalive = yahoo_keepalive;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
494
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
495 my_protocol = ret;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
496 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
497
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
498 char *gaim_plugin_init(GModule *handle) {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
499 load_protocol(Yahoo_init);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
500 return NULL;
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
501 }
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
502
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
503 void gaim_plugin_remove() {
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
504 struct prpl *p = find_prpl(PROTO_YAHOO);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
505 if (p == my_protocol)
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
506 unload_protocol(p);
0b0b4cb53c17 [gaim-migrate @ 1064]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
507 }