annotate src/gtkconn.c @ 12301:39fca2edf7da

[gaim-migrate @ 14605] I only caught this as I was committing, and besides I forgot to mention what sadrul's patch did. It puts the emblem for the active status on the accounts in the Accounts menu (he put them in the Remove menu as well but that felt wrong to me.) committer: Tailor Script <tailor@pidgin.im>
author Etan Reisner <pidgin@unreliablesource.net>
date Sat, 03 Dec 2005 06:50:41 +0000
parents 2f4577ae3810
children 7c7cb03e5475
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1 /*
10297
ec140184437b [gaim-migrate @ 11480]
Luke Schierer <lschiere@pidgin.im>
parents: 10211
diff changeset
2 * @file gtkconn.c GTK+ Connection API
ec140184437b [gaim-migrate @ 11480]
Luke Schierer <lschiere@pidgin.im>
parents: 10211
diff changeset
3 * @ingroup gtkui
ec140184437b [gaim-migrate @ 11480]
Luke Schierer <lschiere@pidgin.im>
parents: 10211
diff changeset
4 *
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
5 * gaim
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
6 *
8046
fa6395637e2c [gaim-migrate @ 8730]
Sean Egan <seanegan@gmail.com>
parents: 8014
diff changeset
7 * Gaim is the legal property of its developers, whose names are too numerous
fa6395637e2c [gaim-migrate @ 8730]
Sean Egan <seanegan@gmail.com>
parents: 8014
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
fa6395637e2c [gaim-migrate @ 8730]
Sean Egan <seanegan@gmail.com>
parents: 8014
diff changeset
9 * source distribution.
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
10 *
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
14 * (at your option) any later version.
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
15 *
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
19 * GNU General Public License for more details.
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
20 *
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
24 */
9791
4a15962c344a [gaim-migrate @ 10659]
Mark Doliner <mark@kingant.net>
parents: 9730
diff changeset
25 #include "internal.h"
4a15962c344a [gaim-migrate @ 10659]
Mark Doliner <mark@kingant.net>
parents: 9730
diff changeset
26 #include "gtkgaim.h"
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
27
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
28 #include "account.h"
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5746
diff changeset
29 #include "debug.h"
6460
ff4551719cc7 [gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
30 #include "notify.h"
6216
dc42b27101c0 [gaim-migrate @ 6702]
Nathan Walp <nwalp@pidgin.im>
parents: 6114
diff changeset
31 #include "prefs.h"
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
32 #include "gtkblist.h"
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
33 #include "gtkstatusbox.h"
10297
ec140184437b [gaim-migrate @ 11480]
Luke Schierer <lschiere@pidgin.im>
parents: 10211
diff changeset
34 #include "gtkstock.h"
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5746
diff changeset
35 #include "util.h"
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
36
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5746
diff changeset
37 #include "gtkblist.h"
9730
c9ac1976ef01 [gaim-migrate @ 10591]
Mark Doliner <mark@kingant.net>
parents: 9709
diff changeset
38 #include "gtkdialogs.h"
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5746
diff changeset
39 #include "gtkutils.h"
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5746
diff changeset
40
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
41 #define INITIAL_RECON_DELAY 8000
11721
2d98b2759fa1 [gaim-migrate @ 14012]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
42 #define MAX_RECON_DELAY 600000
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
43
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
44 typedef struct {
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
45 int delay;
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
46 guint timeout;
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
47 } GaimAutoRecon;
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
48
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
49 static GHashTable *hash = NULL;
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
50 static GSList *accountReconnecting = NULL;
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
51
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
52 static GtkGaimStatusBox *
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
53 find_status_box_for_account(GaimAccount *account)
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
54 {
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
55 GaimGtkBuddyList *gtkblist;
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
56 GList *iter;
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
57
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
58 gtkblist = gaim_gtk_blist_get_default_gtk_blist();
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
59 if (!gtkblist)
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
60 return NULL;
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
61
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
62 for (iter = gtkblist->statusboxes; iter; iter=iter->next)
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
63 {
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
64 GtkGaimStatusBox *box = iter->data;
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
65 if (box->account == account)
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
66 return box;
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
67 }
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
68 return NULL;
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
69 }
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
70
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
71 static void gaim_gtk_connection_connect_progress(GaimConnection *gc,
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
72 const char *text, size_t step, size_t step_count)
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
73 {
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
74 GaimGtkBuddyList *gtkblist = gaim_gtk_blist_get_default_gtk_blist();
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
75 GtkGaimStatusBox *box;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
76 if (!gtkblist)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
77 return;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
78 gtk_gaim_status_box_set_connecting(GTK_GAIM_STATUS_BOX(gtkblist->statusbox),
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
79 (gaim_connections_get_connecting() != NULL));
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
80 gtk_gaim_status_box_pulse_connecting(GTK_GAIM_STATUS_BOX(gtkblist->statusbox));
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
81
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
82 if ((box = find_status_box_for_account(gc->account)) != NULL)
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
83 {
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
84 gtk_gaim_status_box_set_error(box, NULL);
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
85 gtk_gaim_status_box_set_connecting(box, TRUE);
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
86 gtk_gaim_status_box_pulse_connecting(box);
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
87 }
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
88 }
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
89
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
90 static void gaim_gtk_connection_connected(GaimConnection *gc)
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
91 {
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
92 GaimGtkBuddyList *gtkblist = gaim_gtk_blist_get_default_gtk_blist();
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
93 GtkGaimStatusBox *box;
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
94 GaimAccount *account = NULL;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
95 if (!gtkblist)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
96 return;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
97 gtk_gaim_status_box_set_connecting(GTK_GAIM_STATUS_BOX(gtkblist->statusbox),
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
98 (gaim_connections_get_connecting() != NULL));
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
99 account = gaim_connection_get_account(gc);
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
100
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
101 if ((box = find_status_box_for_account(account)) != NULL)
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
102 {
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
103 gtk_gaim_status_box_set_connecting(box, FALSE);
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
104 gtk_gaim_status_box_set_error(box, NULL);
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
105 }
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
106
11536
16796e09b9c1 [gaim-migrate @ 13790]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11523
diff changeset
107 if (hash != NULL)
16796e09b9c1 [gaim-migrate @ 13790]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11523
diff changeset
108 g_hash_table_remove(hash, account);
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
109 if (accountReconnecting == NULL)
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
110 return;
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
111 accountReconnecting = g_slist_remove(accountReconnecting, account);
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
112 if (accountReconnecting == NULL)
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
113 gtk_gaim_status_box_set_error(GTK_GAIM_STATUS_BOX(gtkblist->statusbox), NULL);
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
114 }
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
115
6460
ff4551719cc7 [gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
116 static void gaim_gtk_connection_disconnected(GaimConnection *gc)
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
117 {
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
118 GaimGtkBuddyList *gtkblist = gaim_gtk_blist_get_default_gtk_blist();
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
119 if (!gtkblist)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
120 return;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
121 gtk_gaim_status_box_set_connecting(GTK_GAIM_STATUS_BOX(gtkblist->statusbox),
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents: 10504
diff changeset
122 (gaim_connections_get_connecting() != NULL));
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
123 gtk_gaim_status_box_set_connecting(find_status_box_for_account(gc->account),
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
124 FALSE);
5883
f5b0c6073264 [gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
125
f5b0c6073264 [gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
126 if (gaim_connections_get_all() != NULL)
f5b0c6073264 [gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
127 return;
f5b0c6073264 [gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
128
9730
c9ac1976ef01 [gaim-migrate @ 10591]
Mark Doliner <mark@kingant.net>
parents: 9709
diff changeset
129 gaim_gtkdialogs_destroy_all();
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
130 }
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
131
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
132 static void gaim_gtk_connection_notice(GaimConnection *gc,
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
133 const char *text)
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
134 {
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
135 }
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
136
7912
4d4438f6ddce [gaim-migrate @ 8573]
Mark Doliner <mark@kingant.net>
parents: 7890
diff changeset
137
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
138 static void
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
139 free_auto_recon(gpointer data)
7493
6b9f452e84e1 [gaim-migrate @ 8106]
Mark Doliner <mark@kingant.net>
parents: 7483
diff changeset
140 {
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
141 GaimAutoRecon *info = data;
7912
4d4438f6ddce [gaim-migrate @ 8573]
Mark Doliner <mark@kingant.net>
parents: 7890
diff changeset
142
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
143 if (info->timeout != 0)
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
144 g_source_remove(info->timeout);
7912
4d4438f6ddce [gaim-migrate @ 8573]
Mark Doliner <mark@kingant.net>
parents: 7890
diff changeset
145
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
146 g_free(info);
7493
6b9f452e84e1 [gaim-migrate @ 8106]
Mark Doliner <mark@kingant.net>
parents: 7483
diff changeset
147 }
6b9f452e84e1 [gaim-migrate @ 8106]
Mark Doliner <mark@kingant.net>
parents: 7483
diff changeset
148
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
149 static gboolean
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
150 do_signon(gpointer data)
7912
4d4438f6ddce [gaim-migrate @ 8573]
Mark Doliner <mark@kingant.net>
parents: 7890
diff changeset
151 {
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
152 GaimAccount *account = data;
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
153 GaimAutoRecon *info;
10916
e52ec3cffff4 [gaim-migrate @ 12675]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10915
diff changeset
154
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
155 gaim_debug(GAIM_DEBUG_INFO, "autorecon", "do_signon called\n");
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
156 g_return_val_if_fail(account != NULL, FALSE);
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
157 info = g_hash_table_lookup(hash, account);
7912
4d4438f6ddce [gaim-migrate @ 8573]
Mark Doliner <mark@kingant.net>
parents: 7890
diff changeset
158
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
159 if (g_list_index(gaim_accounts_get_all(), account) < 0)
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
160 return FALSE;
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
161
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
162 if (info)
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
163 info->timeout = 0;
7912
4d4438f6ddce [gaim-migrate @ 8573]
Mark Doliner <mark@kingant.net>
parents: 7890
diff changeset
164
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
165 gaim_debug(GAIM_DEBUG_INFO, "autorecon", "calling gaim_account_connect\n");
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
166 gaim_account_connect(account);
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
167 gaim_debug(GAIM_DEBUG_INFO, "autorecon", "done calling gaim_account_connect\n");
7912
4d4438f6ddce [gaim-migrate @ 8573]
Mark Doliner <mark@kingant.net>
parents: 7890
diff changeset
168
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
169 return FALSE;
7912
4d4438f6ddce [gaim-migrate @ 8573]
Mark Doliner <mark@kingant.net>
parents: 7890
diff changeset
170 }
4d4438f6ddce [gaim-migrate @ 8573]
Mark Doliner <mark@kingant.net>
parents: 7890
diff changeset
171
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
172 static void gaim_gtk_connection_report_disconnect(GaimConnection *gc, const char *text)
7399
9ab1987e5d8b [gaim-migrate @ 7995]
Sean Egan <seanegan@gmail.com>
parents: 7108
diff changeset
173 {
12009
8a7553e149de [gaim-migrate @ 14302]
Mark Doliner <mark@kingant.net>
parents: 11721
diff changeset
174 GaimGtkBuddyList *gtkblist = gaim_gtk_blist_get_default_gtk_blist();
7431
643cbc9a6035 [gaim-migrate @ 8036]
Sean Egan <seanegan@gmail.com>
parents: 7409
diff changeset
175 GaimAccount *account = NULL;
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
176 GaimAutoRecon *info;
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
177 GSList* listAccount;
7808
4707d8436806 [gaim-migrate @ 8455]
Sean Egan <seanegan@gmail.com>
parents: 7678
diff changeset
178
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
179 if (hash == NULL) {
11721
2d98b2759fa1 [gaim-migrate @ 14012]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
180 hash = g_hash_table_new_full(g_int_hash, g_int_equal, NULL,
2d98b2759fa1 [gaim-migrate @ 14012]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
181 free_auto_recon);
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
182 }
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
183 account = gaim_connection_get_account(gc);
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
184 info = g_hash_table_lookup(hash, account);
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
185 if (accountReconnecting)
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
186 listAccount = g_slist_find(accountReconnecting, account);
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
187 else
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
188 listAccount = NULL;
7912
4d4438f6ddce [gaim-migrate @ 8573]
Mark Doliner <mark@kingant.net>
parents: 7890
diff changeset
189
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
190 if (!gc->wants_to_die) {
12009
8a7553e149de [gaim-migrate @ 14302]
Mark Doliner <mark@kingant.net>
parents: 11721
diff changeset
191 if (gtkblist != NULL)
8a7553e149de [gaim-migrate @ 14302]
Mark Doliner <mark@kingant.net>
parents: 11721
diff changeset
192 gtk_gaim_status_box_set_error(GTK_GAIM_STATUS_BOX(gtkblist->statusbox), text);
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12009
diff changeset
193 gtk_gaim_status_box_set_error(find_status_box_for_account(account), text);
11721
2d98b2759fa1 [gaim-migrate @ 14012]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
194
12009
8a7553e149de [gaim-migrate @ 14302]
Mark Doliner <mark@kingant.net>
parents: 11721
diff changeset
195 if (info == NULL) {
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
196 info = g_new0(GaimAutoRecon, 1);
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
197 g_hash_table_insert(hash, account, info);
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
198 info->delay = INITIAL_RECON_DELAY;
7483
4a416ff9cb4f [gaim-migrate @ 8096]
Mark Doliner <mark@kingant.net>
parents: 7431
diff changeset
199 } else {
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
200 info->delay = MIN(2 * info->delay, MAX_RECON_DELAY);
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
201 if (info->timeout != 0)
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
202 g_source_remove(info->timeout);
7483
4a416ff9cb4f [gaim-migrate @ 8096]
Mark Doliner <mark@kingant.net>
parents: 7431
diff changeset
203 }
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
204 info->timeout = g_timeout_add(info->delay, do_signon, account);
7912
4d4438f6ddce [gaim-migrate @ 8573]
Mark Doliner <mark@kingant.net>
parents: 7890
diff changeset
205
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
206 if (!listAccount)
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
207 accountReconnecting = g_slist_prepend(accountReconnecting, account);
11559
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
208 } else {
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
209 char *p, *s, *n=NULL ;
11721
2d98b2759fa1 [gaim-migrate @ 14012]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
210 if (info != NULL)
11559
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
211 g_hash_table_remove(hash, account);
11721
2d98b2759fa1 [gaim-migrate @ 14012]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
212
11559
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
213 if (listAccount)
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
214 accountReconnecting = g_slist_delete_link(accountReconnecting, listAccount);
11721
2d98b2759fa1 [gaim-migrate @ 14012]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
215
11559
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
216 if (gaim_account_get_alias(account)) {
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
217 n = g_strdup_printf("%s (%s) (%s)",
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
218 gaim_account_get_username(account),
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
219 gaim_account_get_alias(account),
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
220 gaim_account_get_protocol_name(account));
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
221 } else {
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
222 n = g_strdup_printf("%s (%s)",
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
223 gaim_account_get_username(account),
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
224 gaim_account_get_protocol_name(account));
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
225 }
11721
2d98b2759fa1 [gaim-migrate @ 14012]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
226
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11574
diff changeset
227 p = g_strdup_printf(_("%s disconnected"), n);
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11574
diff changeset
228 s = g_strdup_printf(_("%s was disconnected due to an error. %s The account has been disabled. "
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11574
diff changeset
229 "Correct the error and reenable the account to connect."), n, text);
11559
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
230 gaim_notify_error(NULL, NULL, p, s);
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
231 g_free(p);
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
232 g_free(s);
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
233 g_free(n);
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11574
diff changeset
234 /* XXX: do we really want to disable the account when it's disconnected by wants_to_die?
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11574
diff changeset
235 * This normally happens when you sign on from somewhere else. */
11559
5909ea4e7746 [gaim-migrate @ 13823]
Sean Egan <seanegan@gmail.com>
parents: 11536
diff changeset
236 gaim_account_set_enabled(account, GAIM_GTK_UI, FALSE);
7399
9ab1987e5d8b [gaim-migrate @ 7995]
Sean Egan <seanegan@gmail.com>
parents: 7108
diff changeset
237 }
9ab1987e5d8b [gaim-migrate @ 7995]
Sean Egan <seanegan@gmail.com>
parents: 7108
diff changeset
238 }
9ab1987e5d8b [gaim-migrate @ 7995]
Sean Egan <seanegan@gmail.com>
parents: 7108
diff changeset
239
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
240 static GaimConnectionUiOps conn_ui_ops =
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
241 {
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
242 gaim_gtk_connection_connect_progress,
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
243 gaim_gtk_connection_connected,
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
244 gaim_gtk_connection_disconnected,
6460
ff4551719cc7 [gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
245 gaim_gtk_connection_notice,
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11251
diff changeset
246 gaim_gtk_connection_report_disconnect,
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
247 };
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
248
7035
feb3d21a7794 [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 6460
diff changeset
249 GaimConnectionUiOps *
feb3d21a7794 [gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents: 6460
diff changeset
250 gaim_gtk_connections_get_ui_ops(void)
5717
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
251 {
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
252 return &conn_ui_ops;
1d140b31d4b3 [gaim-migrate @ 6138]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
253 }