annotate finch/gntconn.c @ 28293:c42d5c23a9e8

jabber: Don't crash when adding a buddy without a node (no '@'). Closes #10261. Also add some assertions to jabber_chat_find so this doesn't cause a crash in the future.
author Paul Aurich <paul@darkrain42.org>
date Thu, 24 Sep 2009 16:58:31 +0000
parents f7c5bb2f6623
children 71dc3b5edbe7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /**
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
2 * @file gntconn.c GNT Connection API
16194
0f0832c13fcb Rename the Doxygen group from gntui to finch and define the finch group
Richard Laager <rlaager@wiktel.com>
parents: 15870
diff changeset
3 * @ingroup finch
20074
6bf32c9e15a7 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents: 20053
diff changeset
4 */
6bf32c9e15a7 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents: 20053
diff changeset
5
6bf32c9e15a7 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents: 20053
diff changeset
6 /* finch
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 *
15870
66dff3dfdea6 Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents: 15822
diff changeset
8 * Finch is the legal property of its developers, whose names are too numerous
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 * to list here. Please refer to the COPYRIGHT file distributed with this
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 * source distribution.
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 *
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 * This program is free software; you can redistribute it and/or modify
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * it under the terms of the GNU General Public License as published by
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 * the Free Software Foundation; either version 2 of the License, or
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 * (at your option) any later version.
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 *
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 * This program is distributed in the hope that it will be useful,
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 * GNU General Public License for more details.
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 *
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
22 * You should have received a copy of the GNU General Public License
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 * along with this program; if not, write to the Free Software
19681
44b4e8bd759b The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18210
diff changeset
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
25 */
18210
b8572b937c09 #include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents: 17639
diff changeset
26 #include "finch.h"
27587
f7c5bb2f6623 Don't include an internal header in the public finch headers.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22215
diff changeset
27 #include <internal.h>
18210
b8572b937c09 #include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents: 17639
diff changeset
28
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29 #include "account.h"
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
30 #include "core.h"
17639
392889212240 #include "connection.h" instead of "connection.c". I don't care if this
Stu Tomlinson <stu@nosnilmot.com>
parents: 17346
diff changeset
31 #include "connection.h"
17346
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
32 #include "debug.h"
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
33 #include "request.h"
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34
19768
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
35 #include "gntaccount.h"
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
36 #include "gntconn.h"
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
37
17346
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
38 #define INITIAL_RECON_DELAY_MIN 8000
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
39 #define INITIAL_RECON_DELAY_MAX 60000
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
40
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
41 #define MAX_RECON_DELAY 600000
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
42
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
43 typedef struct {
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
44 int delay;
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
45 guint timeout;
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
46 } FinchAutoRecon;
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
47
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
48 /**
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
49 * Contains accounts that are auto-reconnecting.
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
50 * The key is a pointer to the PurpleAccount and the
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
51 * value is a pointer to a FinchAutoRecon.
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
52 */
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
53 static GHashTable *hash = NULL;
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
54
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
55 static void
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
56 free_auto_recon(gpointer data)
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
57 {
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
58 FinchAutoRecon *info = data;
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
59
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
60 if (info->timeout != 0)
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
61 g_source_remove(info->timeout);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
62
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
63 g_free(info);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
64 }
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
65
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
66
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
67 static gboolean
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
68 do_signon(gpointer data)
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
69 {
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
70 PurpleAccount *account = data;
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
71 FinchAutoRecon *info;
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
72 PurpleStatus *status;
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
73
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
74 purple_debug_info("autorecon", "do_signon called\n");
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
75 g_return_val_if_fail(account != NULL, FALSE);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
76 info = g_hash_table_lookup(hash, account);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
77
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
78 if (info)
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
79 info->timeout = 0;
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
80
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
81 status = purple_account_get_active_status(account);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
82 if (purple_status_is_online(status))
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
83 {
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
84 purple_debug_info("autorecon", "calling purple_account_connect\n");
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
85 purple_account_connect(account);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
86 purple_debug_info("autorecon", "done calling purple_account_connect\n");
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
87 }
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
88
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
89 return FALSE;
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
90 }
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
91
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
92 static void
19768
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
93 ce_modify_account_cb(PurpleAccount *account)
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
94 {
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
95 finch_account_dialog_show(account);
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
96 }
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
97
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
98 static void
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
99 ce_enable_account_cb(PurpleAccount *account)
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
100 {
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
101 purple_account_set_enabled(account, FINCH_UI, TRUE);
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
102 }
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
103
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
104 static void
22214
2b426862ffbf Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 21627
diff changeset
105 finch_connection_report_disconnect(PurpleConnection *gc, PurpleConnectionError reason,
2b426862ffbf Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 21627
diff changeset
106 const char *text)
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
107 {
17346
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
108 FinchAutoRecon *info;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15817
diff changeset
109 PurpleAccount *account = purple_connection_get_account(gc);
20053
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
110 GList *list;
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
111
22214
2b426862ffbf Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 21627
diff changeset
112 if (!purple_connection_error_is_fatal(reason)) {
20053
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
113 info = g_hash_table_lookup(hash, account);
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
114
17346
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
115 if (info == NULL) {
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
116 info = g_new0(FinchAutoRecon, 1);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
117 g_hash_table_insert(hash, account, info);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
118 info->delay = g_random_int_range(INITIAL_RECON_DELAY_MIN, INITIAL_RECON_DELAY_MAX);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
119 } else {
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
120 info->delay = MIN(2 * info->delay, MAX_RECON_DELAY);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
121 if (info->timeout != 0)
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
122 g_source_remove(info->timeout);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
123 }
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
124 info->timeout = g_timeout_add(info->delay, do_signon, account);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
125 } else {
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
126 char *act, *primary, *secondary;
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
127 act = g_strdup_printf(_("%s (%s)"), purple_account_get_username(account),
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
128 purple_account_get_protocol_name(account));
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
129
17346
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
130 primary = g_strdup_printf(_("%s disconnected."), act);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
131 secondary = g_strdup_printf(_("%s\n\n"
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
132 "Finch will not attempt to reconnect the account until you "
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
133 "correct the error and re-enable the account."), text);
19768
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
134
21570
dccfd999ffe7 merge of '76c07fcb434a2a7aa289734bb221c171a376d73b'
Evan Schoenberg <evan.s@dreskin.net>
parents: 21244
diff changeset
135 purple_request_action(account, NULL, primary, secondary, 2,
19768
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
136 account, NULL, NULL,
21570
dccfd999ffe7 merge of '76c07fcb434a2a7aa289734bb221c171a376d73b'
Evan Schoenberg <evan.s@dreskin.net>
parents: 21244
diff changeset
137 account, 3,
19768
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
138 _("OK"), NULL,
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
139 _("Modify Account"), PURPLE_CALLBACK(ce_modify_account_cb),
41cad24fd6df Instead of just notifying the user about a connection error, give him options
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19681
diff changeset
140 _("Re-enable Account"), PURPLE_CALLBACK(ce_enable_account_cb));
17346
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
141
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
142 g_free(act);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
143 g_free(primary);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
144 g_free(secondary);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
145 purple_account_set_enabled(account, FINCH_UI, FALSE);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
146 }
20053
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
147
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
148 /* If we have any open chats, we probably want to rejoin when we get back online. */
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
149 list = purple_get_chats();
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
150 while (list) {
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
151 PurpleConversation *conv = list->data;
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
152 list = list->next;
22215
07c2b8fa7bb4 Update finch to not touch the internals of PurpleConversation.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22214
diff changeset
153 if (purple_conversation_get_account(conv) != account ||
20053
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
154 purple_conv_chat_has_left(PURPLE_CONV_CHAT(conv)))
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
155 continue;
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
156 purple_conversation_set_data(conv, "want-to-rejoin", GINT_TO_POINTER(TRUE));
21627
9f7590a24b9b Show a helpful message about account disconnect. Someone should come up with a better string.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 21570
diff changeset
157 purple_conversation_write(conv, NULL, _("The account has disconnected and you are no "
9f7590a24b9b Show a helpful message about account disconnect. Someone should come up with a better string.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 21570
diff changeset
158 "longer in this chat. You will be automatically rejoined in the chat when "
9f7590a24b9b Show a helpful message about account disconnect. Someone should come up with a better string.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 21570
diff changeset
159 "the account reconnects."),
9f7590a24b9b Show a helpful message about account disconnect. Someone should come up with a better string.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 21570
diff changeset
160 PURPLE_MESSAGE_SYSTEM, time(NULL));
20053
fb2880587f34 If there's a chat open when an account gets disconnected because of an error,
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19768
diff changeset
161 }
17346
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
162 }
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
163
17346
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
164 static void
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
165 account_removed_cb(PurpleAccount *account, gpointer user_data)
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
166 {
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
167 g_hash_table_remove(hash, account);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
168 }
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
169
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
170 static void *
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
171 finch_connection_get_handle(void)
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
172 {
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
173 static int handle;
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
174
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
175 return &handle;
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
176 }
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
177
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15817
diff changeset
178 static PurpleConnectionUiOps ops =
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
179 {
17091
46f2f86e08e4 Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents: 16439
diff changeset
180 NULL, /* connect_progress */
46f2f86e08e4 Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents: 16439
diff changeset
181 NULL, /* connected */
46f2f86e08e4 Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents: 16439
diff changeset
182 NULL, /* disconnected */
46f2f86e08e4 Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents: 16439
diff changeset
183 NULL, /* notice */
22214
2b426862ffbf Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 21627
diff changeset
184 NULL,
17091
46f2f86e08e4 Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents: 16439
diff changeset
185 NULL, /* network_connected */
46f2f86e08e4 Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents: 16439
diff changeset
186 NULL, /* network_disconnected */
22214
2b426862ffbf Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 21627
diff changeset
187 finch_connection_report_disconnect,
17091
46f2f86e08e4 Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents: 16439
diff changeset
188 NULL,
46f2f86e08e4 Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents: 16439
diff changeset
189 NULL,
46f2f86e08e4 Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents: 16439
diff changeset
190 NULL
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
191 };
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
192
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15817
diff changeset
193 PurpleConnectionUiOps *finch_connections_get_ui_ops()
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
194 {
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
195 return &ops;
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
196 }
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
197
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
198 void finch_connections_init()
17346
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
199 {
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
200 hash = g_hash_table_new_full(
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
201 g_direct_hash, g_direct_equal,
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
202 NULL, free_auto_recon);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
203
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
204 purple_signal_connect(purple_accounts_get_handle(), "account-removed",
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
205 finch_connection_get_handle(),
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
206 PURPLE_CALLBACK(account_removed_cb), NULL);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
207 }
15817
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
208
0e3a8505ebbe renamed gaim-text to finch
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
209 void finch_connections_uninit()
17346
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
210 {
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
211 purple_signals_disconnect_by_handle(finch_connection_get_handle());
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
212 g_hash_table_destroy(hash);
8c3a3407af58 Finch autoreconnecting (largely copy/paste from pidgin)
Richard Nelson <wabz@pidgin.im>
parents: 17091
diff changeset
213 }