Thu, 07 Apr 2005 14:41:18 +0000
[gaim-migrate @ 12429]
" You can't pass NULL as errormsg as the documentation
implies. If you do, it segfaults. Perhaps that should be
allowable, but as the code stands, it's not. The
documentation should be updated in HEAD and oldstatus
to reflect this. Attached is a patch to that effect." --rlaager
committer: Luke Schierer <lschiere@pidgin.im>
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
1 | #include "internal.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
2 | |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
3 | #include "connection.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
4 | #include "debug.h" |
| 8774 | 5 | #include "pluginpref.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
6 | #include "prpl.h" |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
7 | #include "signals.h" |
| 9943 | 8 | #include "version.h" |
|
4202
8b92de3b1c07
[gaim-migrate @ 4438]
Christian Hammond <chipx86@chipx86.com>
parents:
4113
diff
changeset
|
9 | |
| 8774 | 10 | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
11 | #define AUTORECON_PLUGIN_ID "core-autorecon" |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
12 | |
|
2216
ae70f10e0d27
[gaim-migrate @ 2226]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1818
diff
changeset
|
13 | #define INITIAL 8000 |
| 4590 | 14 | #define MAXTIME 2048000 |
|
2216
ae70f10e0d27
[gaim-migrate @ 2226]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1818
diff
changeset
|
15 | |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
16 | typedef struct { |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
17 | int delay; |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
18 | guint timeout; |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
19 | } GaimAutoRecon; |
|
2216
ae70f10e0d27
[gaim-migrate @ 2226]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1818
diff
changeset
|
20 | |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
21 | static GHashTable *hash = NULL; |
| 8774 | 22 | |
| 10020 | 23 | static GSList *accountReconnecting = NULL; |
| 24 | ||
| 8774 | 25 | #define AUTORECON_OPT "/plugins/core/autorecon" |
| 10020 | 26 | #define OPT_HIDE_CONNECTED AUTORECON_OPT "/hide_connected_error" |
| 27 | #define OPT_HIDE_CONNECTING AUTORECON_OPT "/hide_connecting_error" | |
| 28 | #define OPT_RESTORE_STATE AUTORECON_OPT "/restore_state" | |
| 29 | #define OPT_HIDE_RECONNECTING_DIALOG AUTORECON_OPT "/hide_reconnecting_dialog" | |
| 8774 | 30 | |
| 31 | /* storage of original (old_ops) and modified (new_ops) ui ops to allow us to | |
| 32 | intercept calls to report_disconnect */ | |
| 33 | static GaimConnectionUiOps *old_ops = NULL; | |
| 34 | static GaimConnectionUiOps *new_ops = NULL; | |
| 35 | ||
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
36 | static void |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
37 | connect_progress(GaimConnection *gc, const char *text, |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
38 | size_t step, size_t step_count) |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
39 | { |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
40 | if (old_ops == NULL || old_ops->connect_progress == NULL) { |
| 10020 | 41 | /* there's nothing to call through to, so don't bother |
| 42 | checking prefs */ | |
| 43 | return; | |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
44 | } else if (gaim_prefs_get_bool(OPT_HIDE_RECONNECTING_DIALOG) && accountReconnecting && |
| 10020 | 45 | g_slist_find(accountReconnecting, gc->account)) { |
| 46 | /* this is a reconnecting, and we're hiding those */ | |
| 47 | gaim_debug(GAIM_DEBUG_INFO, "autorecon", | |
| 48 | "hide connecting dialog while reconnecting\n"); | |
| 49 | return; | |
| 50 | } | |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
51 | |
| 10020 | 52 | old_ops->connect_progress(gc, text, step, step_count); |
| 53 | } | |
| 54 | ||
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
55 | static void |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
56 | connected(GaimConnection *gc) |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
57 | { |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
58 | if (old_ops == NULL || old_ops->connected == NULL) { |
| 10020 | 59 | /* there's nothing to call through to, so don't bother |
| 60 | checking prefs */ | |
| 61 | return; | |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
62 | } else if (gaim_prefs_get_bool(OPT_HIDE_RECONNECTING_DIALOG) && accountReconnecting && |
| 10020 | 63 | g_slist_find(accountReconnecting, gc->account)) { |
| 64 | /* this is a reconnecting, and we're hiding those */ | |
| 65 | gaim_debug(GAIM_DEBUG_INFO, "autorecon", | |
| 66 | "hide connecting dialog while reconnecting\n"); | |
| 67 | return; | |
| 68 | } | |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
69 | |
| 10020 | 70 | old_ops->connected(gc); |
| 71 | } | |
| 72 | ||
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
73 | static void |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
74 | disconnected(GaimConnection *gc) |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
75 | { |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
76 | if (old_ops == NULL || old_ops->disconnected == NULL) { |
| 10020 | 77 | /* there's nothing to call through to, so don't bother |
| 78 | checking prefs */ | |
| 79 | return; | |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
80 | } else if (gaim_prefs_get_bool(OPT_HIDE_RECONNECTING_DIALOG) && accountReconnecting && |
| 10020 | 81 | g_slist_find(accountReconnecting, gc->account)) { |
| 82 | /* this is a reconnecting, and we're hiding those */ | |
| 83 | gaim_debug(GAIM_DEBUG_INFO, "autorecon", | |
| 84 | "hide connecting dialog while reconnecting\n"); | |
| 85 | return; | |
| 86 | } | |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
87 | |
| 10020 | 88 | old_ops->disconnected(gc); |
| 89 | } | |
| 90 | ||
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
91 | static void |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
92 | notice(GaimConnection *gc, const char *text) |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
93 | { |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
94 | if (old_ops == NULL || old_ops->notice == NULL) { |
| 10020 | 95 | /* there's nothing to call through to, so don't bother |
| 96 | checking prefs */ | |
| 97 | return; | |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
98 | } else if (gaim_prefs_get_bool(OPT_HIDE_RECONNECTING_DIALOG) && accountReconnecting && |
| 10020 | 99 | g_slist_find(accountReconnecting, gc->account)) { |
| 100 | /* this is a reconnecting, and we're hiding those */ | |
| 101 | gaim_debug(GAIM_DEBUG_INFO, "autorecon", | |
| 102 | "hide connecting dialog while reconnecting\n"); | |
| 103 | } | |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
104 | |
| 10020 | 105 | old_ops->notice(gc, text); |
| 106 | } | |
| 8774 | 107 | |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
108 | static void |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
109 | report_disconnect(GaimConnection *gc, const char *text) |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
110 | { |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
111 | if (old_ops == NULL || old_ops->report_disconnect == NULL) { |
| 8774 | 112 | /* there's nothing to call through to, so don't bother |
| 113 | checking prefs */ | |
| 114 | return; | |
| 115 | ||
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
116 | } else if (gc->state == GAIM_CONNECTED |
| 8774 | 117 | && gaim_prefs_get_bool(OPT_HIDE_CONNECTED)) { |
| 118 | /* this is a connected error, and we're hiding those */ | |
| 119 | gaim_debug(GAIM_DEBUG_INFO, "autorecon", | |
|
10345
7d7f8cfa2b4f
[gaim-migrate @ 11556]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10020
diff
changeset
|
120 | "hid disconnect error message (%s)\n", text); |
| 8774 | 121 | return; |
| 122 | ||
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
123 | } else if (gc->state == GAIM_CONNECTING |
| 8774 | 124 | && gaim_prefs_get_bool(OPT_HIDE_CONNECTING)) { |
| 125 | /* this is a connecting error, and we're hiding those */ | |
| 126 | gaim_debug(GAIM_DEBUG_INFO, "autorecon", | |
|
10345
7d7f8cfa2b4f
[gaim-migrate @ 11556]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10020
diff
changeset
|
127 | "hid error message while connecting (%s)\n", text); |
| 8774 | 128 | return; |
| 129 | } | |
| 130 | ||
| 131 | /* if we haven't returned by now, then let's pass to the real | |
| 132 | function */ | |
| 133 | old_ops->report_disconnect(gc, text); | |
| 134 | } | |
| 135 | ||
| 136 | ||
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
137 | static gboolean |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
138 | do_signon(gpointer data) |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
139 | { |
|
5587
22cb9fe4798a
[gaim-migrate @ 5991]
Christian Hammond <chipx86@chipx86.com>
parents:
5227
diff
changeset
|
140 | GaimAccount *account = data; |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
141 | GaimAutoRecon *info; |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
142 | |
|
5227
6b44f7901f94
[gaim-migrate @ 5597]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
143 | gaim_debug(GAIM_DEBUG_INFO, "autorecon", "do_signon called\n"); |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
144 | g_return_val_if_fail(account != NULL, FALSE); |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
145 | info = g_hash_table_lookup(hash, account); |
|
4494
c170d1ed7fde
[gaim-migrate @ 4769]
Herman Bloggs <herman@bluedigits.com>
parents:
4491
diff
changeset
|
146 | |
| 5607 | 147 | if (g_list_index(gaim_accounts_get_all(), account) < 0) |
|
1817
67ad2e2348a2
[gaim-migrate @ 1827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1404
diff
changeset
|
148 | return FALSE; |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
149 | |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
150 | if (info) |
| 7372 | 151 | info->timeout = 0; |
| 152 | ||
|
5587
22cb9fe4798a
[gaim-migrate @ 5991]
Christian Hammond <chipx86@chipx86.com>
parents:
5227
diff
changeset
|
153 | gaim_debug(GAIM_DEBUG_INFO, "autorecon", "calling gaim_account_connect\n"); |
|
10738
63ca8277c234
[gaim-migrate @ 12340]
Mark Doliner <markdoliner@pidgin.im>
parents:
10574
diff
changeset
|
154 | gaim_account_connect(account); |
|
5587
22cb9fe4798a
[gaim-migrate @ 5991]
Christian Hammond <chipx86@chipx86.com>
parents:
5227
diff
changeset
|
155 | gaim_debug(GAIM_DEBUG_INFO, "autorecon", "done calling gaim_account_connect\n"); |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
156 | |
|
1817
67ad2e2348a2
[gaim-migrate @ 1827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1404
diff
changeset
|
157 | return FALSE; |
|
1378
49578635eddb
[gaim-migrate @ 1388]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1165
diff
changeset
|
158 | } |
|
49578635eddb
[gaim-migrate @ 1388]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1165
diff
changeset
|
159 | |
| 8774 | 160 | |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
161 | static void |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
162 | reconnect(GaimConnection *gc, void *m) |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
163 | { |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
164 | GaimAccount *account; |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
165 | GaimAutoRecon *info; |
| 10020 | 166 | GSList* listAccount; |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
167 | |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
168 | g_return_if_fail(gc != NULL); |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
169 | account = gaim_connection_get_account(gc); |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
170 | info = g_hash_table_lookup(hash, account); |
| 10020 | 171 | if (accountReconnecting) |
| 172 | listAccount = g_slist_find(accountReconnecting, account); | |
| 173 | else | |
| 174 | listAccount = NULL; | |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
175 | |
|
2216
ae70f10e0d27
[gaim-migrate @ 2226]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1818
diff
changeset
|
176 | if (!gc->wants_to_die) { |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
177 | if (info == NULL) { |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
178 | info = g_new0(GaimAutoRecon, 1); |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
179 | g_hash_table_insert(hash, account, info); |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
180 | info->delay = INITIAL; |
|
8249
b6223529f267
[gaim-migrate @ 8972]
Mark Doliner <markdoliner@pidgin.im>
parents:
8246
diff
changeset
|
181 | } else { |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
182 | info->delay = MIN(2 * info->delay, MAXTIME); |
|
8250
e855dcce1fa0
[gaim-migrate @ 8973]
Mark Doliner <markdoliner@pidgin.im>
parents:
8249
diff
changeset
|
183 | if (info->timeout != 0) |
|
e855dcce1fa0
[gaim-migrate @ 8973]
Mark Doliner <markdoliner@pidgin.im>
parents:
8249
diff
changeset
|
184 | g_source_remove(info->timeout); |
|
8249
b6223529f267
[gaim-migrate @ 8972]
Mark Doliner <markdoliner@pidgin.im>
parents:
8246
diff
changeset
|
185 | } |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
186 | info->timeout = g_timeout_add(info->delay, do_signon, account); |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
187 | |
| 10020 | 188 | if (!listAccount) |
| 189 | accountReconnecting = g_slist_prepend(accountReconnecting, account); | |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
190 | } else if (info != NULL) { |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
191 | g_hash_table_remove(hash, account); |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
192 | |
| 10020 | 193 | if (listAccount) |
| 194 | accountReconnecting = g_slist_delete_link(accountReconnecting, listAccount); | |
|
2216
ae70f10e0d27
[gaim-migrate @ 2226]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1818
diff
changeset
|
195 | } |
| 9546 | 196 | } |
| 8774 | 197 | |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
198 | static void |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
199 | reconnected(GaimConnection *gc, void *m) |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
200 | { |
| 10020 | 201 | GaimAccount *account; |
| 202 | ||
|
10574
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10401
diff
changeset
|
203 | g_return_if_fail(gc != NULL); |
|
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10401
diff
changeset
|
204 | |
|
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10401
diff
changeset
|
205 | if (accountReconnecting == NULL) |
|
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10401
diff
changeset
|
206 | return; |
|
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10401
diff
changeset
|
207 | |
| 10020 | 208 | account = gaim_connection_get_account(gc); |
| 209 | ||
| 210 | accountReconnecting = g_slist_remove(accountReconnecting, account); | |
| 211 | } | |
| 212 | ||
| 213 | static void | |
|
6113
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
214 | free_auto_recon(gpointer data) |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
215 | { |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
216 | GaimAutoRecon *info = data; |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
217 | |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
218 | if (info->timeout != 0) |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
219 | g_source_remove(info->timeout); |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
220 | |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
221 | g_free(info); |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
222 | } |
|
5bc7394e69ea
[gaim-migrate @ 6575]
Mark Doliner <markdoliner@pidgin.im>
parents:
6063
diff
changeset
|
223 | |
| 8774 | 224 | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
225 | static gboolean |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
226 | plugin_load(GaimPlugin *plugin) |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
227 | { |
| 8774 | 228 | |
| 229 | /* this was the suggested way to override a single function of the | |
| 230 | real ui ops. However, there's a mild concern of having more than one | |
| 231 | bit of code making a new ui op call-through copy. If plugins A and B | |
| 232 | both override the ui ops (in that order), B thinks that the | |
| 233 | overridden ui ops A created was the original. If A unloads first, | |
| 234 | and swaps out and frees its overridden version, then B is calling | |
| 235 | through to a free'd ui op. There needs to be a way to "stack up" | |
| 236 | overridden ui ops or something... I have a good idea of how to write | |
| 237 | such a creature if someone wants it done. - siege 2004-04-20 */ | |
| 238 | ||
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
239 | /* get old ops, make a copy with a minor change */ |
| 8774 | 240 | old_ops = gaim_connections_get_ui_ops(); |
| 241 | new_ops = (GaimConnectionUiOps *) g_memdup(old_ops, | |
| 242 | sizeof(GaimConnectionUiOps)); | |
| 10020 | 243 | new_ops->connect_progress = connect_progress; |
| 244 | new_ops->connected = connected; | |
| 245 | new_ops->disconnected = disconnected; | |
| 246 | new_ops->notice = notice; | |
| 8774 | 247 | new_ops->report_disconnect = report_disconnect; |
| 248 | gaim_connections_set_ui_ops(new_ops); | |
| 249 | ||
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
250 | hash = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, |
| 8774 | 251 | free_auto_recon); |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
252 | |
| 10020 | 253 | accountReconnecting = NULL; |
| 3630 | 254 | |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
255 | gaim_signal_connect(gaim_connections_get_handle(), "signed-off", |
| 8774 | 256 | plugin, GAIM_CALLBACK(reconnect), NULL); |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
257 | |
| 10020 | 258 | gaim_signal_connect(gaim_connections_get_handle(), "signed-on", |
| 259 | plugin, GAIM_CALLBACK(reconnected), NULL); | |
| 260 | ||
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
261 | return TRUE; |
| 3802 | 262 | } |
| 263 | ||
| 8774 | 264 | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
265 | static gboolean |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
266 | plugin_unload(GaimPlugin *plugin) |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
267 | { |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
268 | g_hash_table_destroy(hash); |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
269 | hash = NULL; |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
270 | |
| 10020 | 271 | if (accountReconnecting) { |
| 272 | g_slist_free(accountReconnecting); | |
| 273 | accountReconnecting = NULL; | |
| 274 | } | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
275 | |
| 8774 | 276 | gaim_connections_set_ui_ops(old_ops); |
| 277 | g_free(new_ops); | |
| 278 | old_ops = new_ops = NULL; | |
| 279 | ||
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
280 | return TRUE; |
| 3630 | 281 | } |
| 282 | ||
| 8774 | 283 | |
|
10748
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
284 | static |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
285 | GaimPluginPrefFrame *get_plugin_pref_frame(GaimPlugin *plugin) |
|
57d21866d182
[gaim-migrate @ 12350]
Mark Doliner <markdoliner@pidgin.im>
parents:
10738
diff
changeset
|
286 | { |
| 8774 | 287 | GaimPluginPrefFrame *frame = gaim_plugin_pref_frame_new(); |
| 288 | GaimPluginPref *pref; | |
| 289 | ||
| 290 | pref = gaim_plugin_pref_new_with_label(_("Error Message Suppression")); | |
|
9549
19c5469f9a3e
[gaim-migrate @ 10378]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9546
diff
changeset
|
291 | gaim_plugin_pref_frame_add(frame, pref); |
| 8774 | 292 | |
| 293 | pref = gaim_plugin_pref_new_with_name_and_label(OPT_HIDE_CONNECTED, | |
| 294 | _("Hide Disconnect Errors")); | |
| 295 | gaim_plugin_pref_frame_add(frame, pref); | |
| 296 | ||
| 297 | pref = gaim_plugin_pref_new_with_name_and_label(OPT_HIDE_CONNECTING, | |
| 298 | _("Hide Login Errors")); | |
| 299 | gaim_plugin_pref_frame_add(frame, pref); | |
| 300 | ||
| 10020 | 301 | pref = gaim_plugin_pref_new_with_name_and_label(OPT_HIDE_RECONNECTING_DIALOG, |
| 302 | _("Hide Reconnecting Dialog")); | |
| 303 | gaim_plugin_pref_frame_add(frame, pref); | |
| 304 | ||
| 8774 | 305 | return frame; |
| 306 | } | |
| 307 | ||
| 308 | ||
| 309 | static GaimPluginUiInfo pref_info = { | |
| 310 | get_plugin_pref_frame | |
| 311 | }; | |
| 312 | ||
| 313 | ||
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
314 | static GaimPluginInfo info = |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
315 | { |
| 9943 | 316 | GAIM_PLUGIN_MAGIC, |
| 317 | GAIM_MAJOR_VERSION, | |
| 318 | GAIM_MINOR_VERSION, | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
319 | GAIM_PLUGIN_STANDARD, /**< type */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
320 | NULL, /**< ui_requirement */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
321 | 0, /**< flags */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
322 | NULL, /**< dependencies */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
323 | GAIM_PRIORITY_DEFAULT, /**< priority */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
324 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
325 | AUTORECON_PLUGIN_ID, /**< id */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
326 | N_("Auto-Reconnect"), /**< name */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
327 | VERSION, /**< version */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
328 | /** summary */ |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
329 | N_("When you are kicked offline, this reconnects you."), |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
330 | /** description */ |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
331 | N_("When you are kicked offline, this reconnects you."), |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
332 | "Eric Warmenhoven <eric@warmenhoven.org>", /**< author */ |
|
6485
3c7ba18e32f1
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
333 | GAIM_WEBSITE, /**< homepage */ |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
334 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
335 | plugin_load, /**< load */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
336 | plugin_unload, /**< unload */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
337 | NULL, /**< destroy */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
338 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
339 | NULL, /**< ui_info */ |
| 8774 | 340 | NULL, /**< extra_info */ |
| 8993 | 341 | &pref_info, /**< prefs_info */ |
| 342 | NULL | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
343 | }; |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
344 | |
| 8774 | 345 | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
346 | static void |
|
5920
963bfdefee02
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5873
diff
changeset
|
347 | init_plugin(GaimPlugin *plugin) |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
4590
diff
changeset
|
348 | { |
| 8774 | 349 | gaim_prefs_add_none(AUTORECON_OPT); |
| 350 | gaim_prefs_add_bool(OPT_HIDE_CONNECTED, FALSE); | |
| 351 | gaim_prefs_add_bool(OPT_HIDE_CONNECTING, FALSE); | |
| 10020 | 352 | gaim_prefs_add_bool(OPT_HIDE_RECONNECTING_DIALOG, FALSE); |
|
9971
8291bafb0025
[gaim-migrate @ 10882]
Daniel Atallah <datallah@pidgin.im>
parents:
9961
diff
changeset
|
353 | gaim_prefs_remove(OPT_RESTORE_STATE); |
| 3630 | 354 | } |
| 355 | ||
| 6063 | 356 | GAIM_INIT_PLUGIN(autorecon, init_plugin, info) |