Mercurial > pidgin
annotate finch/finch.c @ 27598:e5fdfff98aa9
When GNU Libidn is available, use it for XMPP stringprep operations.
I made configure fail if libidn is unavailable and force_deps is set
because glib's UTF-8 strdown and casefold operations fail one of the
tests I've updated (based on running the tests with libidn).
Running without libidn will still work in almost every case because people
use all-ASCII JabberIDs and I had to search a fair amount to find
characters for which GLib failed. This shouldn't have a performance impact
on top of Mark's optimizations for all-ASCII JIDs.
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Fri, 17 Jul 2009 21:11:25 +0000 |
parents | 74e487f82f39 |
children | f7c5bb2f6623 |
rev | line source |
---|---|
15822 | 1 /** |
15870
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15822
diff
changeset
|
2 * finch |
15822 | 3 * |
15870
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15822
diff
changeset
|
4 * Finch is the legal property of its developers, whose names are too numerous |
15822 | 5 * to list here. Please refer to the COPYRIGHT file distributed with this |
6 * source distribution. | |
7 * | |
8 * This program is free software; you can redistribute it and/or modify | |
9 * it under the terms of the GNU General Public License as published by | |
10 * the Free Software Foundation; either version 2 of the License, or | |
11 * (at your option) any later version. | |
12 * | |
13 * This program is distributed in the hope that it will be useful, | |
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 * GNU General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU General Public License | |
19 * 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:
19567
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
15822 | 21 */ |
18210
b8572b937c09
#include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents:
18013
diff
changeset
|
22 #include "finch.h" |
b8572b937c09
#include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents:
18013
diff
changeset
|
23 |
15822 | 24 #include "account.h" |
25 #include "conversation.h" | |
26 #include "core.h" | |
27 #include "debug.h" | |
28 #include "eventloop.h" | |
29 #include "ft.h" | |
30 #include "log.h" | |
31 #include "notify.h" | |
32 #include "prefs.h" | |
33 #include "prpl.h" | |
34 #include "pounce.h" | |
35 #include "savedstatuses.h" | |
36 #include "sound.h" | |
37 #include "status.h" | |
38 #include "util.h" | |
39 #include "whiteboard.h" | |
40 | |
41 #include "gntdebug.h" | |
42 #include "gntprefs.h" | |
43 #include "gntui.h" | |
44 #include "gntidle.h" | |
45 | |
46 #define _GNU_SOURCE | |
47 #include <getopt.h> | |
48 | |
49 #include "config.h" | |
50 | |
51 static void | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21669
diff
changeset
|
52 debug_init(void) |
15822 | 53 { |
54 finch_debug_init(); | |
55 purple_debug_set_ui_ops(finch_debug_get_ui_ops()); | |
56 } | |
57 | |
18293
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
58 static GHashTable *ui_info = NULL; |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21669
diff
changeset
|
59 static GHashTable *finch_ui_get_info(void) |
18293
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
60 { |
18877
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
61 if (ui_info == NULL) { |
18293
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
62 ui_info = g_hash_table_new(g_str_hash, g_str_equal); |
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
63 |
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
64 g_hash_table_insert(ui_info, "name", (char*)_("Finch")); |
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
65 g_hash_table_insert(ui_info, "version", VERSION); |
23403
2ccda8e9046d
Added website and dev_website items to Finch's ui_get_info hash table
Evan Schoenberg <evan.s@dreskin.net>
parents:
22007
diff
changeset
|
66 g_hash_table_insert(ui_info, "website", "http://pidgin.im"); |
2ccda8e9046d
Added website and dev_website items to Finch's ui_get_info hash table
Evan Schoenberg <evan.s@dreskin.net>
parents:
22007
diff
changeset
|
67 g_hash_table_insert(ui_info, "dev_website", "http://developer.pidgin.im"); |
25513
a95eed74fdd7
Changed "type" to "client_type" for the hash value specifying client type
Marcus Lundblad <ml@update.uu.se>
parents:
25512
diff
changeset
|
68 g_hash_table_insert(ui_info, "client_type", "console"); |
27426
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
69 |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
70 /* |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
71 * This is the client key for "Finch." It is owned by the AIM |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
72 * account "markdoliner." Please don't use this key for other |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
73 * applications. You can either not specify a client key, in |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
74 * which case the default "libpurple" key will be used, or you |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
75 * can register for your own client key at |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
76 * http://developer.aim.com/manageKeys.jsp |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
77 */ |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
78 g_hash_table_insert(ui_info, "prpl-aim-clientkey", "ma19sqWV9ymU6UYc"); |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
79 g_hash_table_insert(ui_info, "prpl-icq-clientkey", "ma19sqWV9ymU6UYc"); |
27429
74e487f82f39
Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <mark@kingant.net>
parents:
27426
diff
changeset
|
80 |
74e487f82f39
Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <mark@kingant.net>
parents:
27426
diff
changeset
|
81 /* |
74e487f82f39
Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <mark@kingant.net>
parents:
27426
diff
changeset
|
82 * This is the distid for Finch, given to us by AOL. Please |
74e487f82f39
Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <mark@kingant.net>
parents:
27426
diff
changeset
|
83 * don't use this for other applications. You can just not |
74e487f82f39
Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <mark@kingant.net>
parents:
27426
diff
changeset
|
84 * specify a distid and libpurple will use a default. |
74e487f82f39
Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <mark@kingant.net>
parents:
27426
diff
changeset
|
85 */ |
74e487f82f39
Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <mark@kingant.net>
parents:
27426
diff
changeset
|
86 g_hash_table_insert(ui_info, "prpl-aim-distid", GINT_TO_POINTER(1552)); |
74e487f82f39
Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <mark@kingant.net>
parents:
27426
diff
changeset
|
87 g_hash_table_insert(ui_info, "prpl-icq-distid", GINT_TO_POINTER(1552)); |
18293
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
88 } |
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
89 |
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
90 return ui_info; |
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
91 } |
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
92 |
18877
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
93 static void |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
94 finch_quit(void) |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
95 { |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
96 gnt_ui_uninit(); |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
97 if (ui_info) |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
98 g_hash_table_destroy(ui_info); |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
99 } |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
100 |
15822 | 101 static PurpleCoreUiOps core_ops = |
102 { | |
103 finch_prefs_init, | |
104 debug_init, | |
105 gnt_ui_init, | |
18877
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
106 finch_quit, |
18293
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
107 finch_ui_get_info, |
16669
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
108 |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
109 /* padding */ |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
110 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
111 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
112 NULL |
15822 | 113 }; |
114 | |
115 static PurpleCoreUiOps * | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21669
diff
changeset
|
116 gnt_core_get_ui_ops(void) |
15822 | 117 { |
118 return &core_ops; | |
119 } | |
120 | |
121 /* Anything IO-related is directly copied from gtkpurple's source tree */ | |
122 | |
123 #define FINCH_READ_COND (G_IO_IN | G_IO_HUP | G_IO_ERR) | |
124 #define FINCH_WRITE_COND (G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL) | |
125 | |
126 typedef struct _PurpleGntIOClosure { | |
127 PurpleInputFunction function; | |
128 guint result; | |
129 gpointer data; | |
130 | |
131 } PurpleGntIOClosure; | |
132 | |
133 static void purple_gnt_io_destroy(gpointer data) | |
134 { | |
135 g_free(data); | |
136 } | |
137 | |
138 static gboolean purple_gnt_io_invoke(GIOChannel *source, GIOCondition condition, gpointer data) | |
139 { | |
140 PurpleGntIOClosure *closure = data; | |
141 PurpleInputCondition purple_cond = 0; | |
142 | |
143 if (condition & FINCH_READ_COND) | |
144 purple_cond |= PURPLE_INPUT_READ; | |
145 if (condition & FINCH_WRITE_COND) | |
146 purple_cond |= PURPLE_INPUT_WRITE; | |
147 | |
148 #if 0 | |
149 purple_debug(PURPLE_DEBUG_MISC, "gtk_eventloop", | |
150 "CLOSURE: callback for %d, fd is %d\n", | |
151 closure->result, g_io_channel_unix_get_fd(source)); | |
152 #endif | |
153 | |
154 #ifdef _WIN32 | |
155 if(! purple_cond) { | |
156 #if DEBUG | |
157 purple_debug_misc("gnt_eventloop", | |
158 "CLOSURE received GIOCondition of 0x%x, which does not" | |
159 " match 0x%x (READ) or 0x%x (WRITE)\n", | |
160 condition, FINCH_READ_COND, FINCH_WRITE_COND); | |
161 #endif /* DEBUG */ | |
162 | |
163 return TRUE; | |
164 } | |
165 #endif /* _WIN32 */ | |
166 | |
167 closure->function(closure->data, g_io_channel_unix_get_fd(source), | |
168 purple_cond); | |
169 | |
170 return TRUE; | |
171 } | |
172 | |
173 static guint gnt_input_add(gint fd, PurpleInputCondition condition, PurpleInputFunction function, | |
174 gpointer data) | |
175 { | |
176 PurpleGntIOClosure *closure = g_new0(PurpleGntIOClosure, 1); | |
177 GIOChannel *channel; | |
178 GIOCondition cond = 0; | |
179 | |
180 closure->function = function; | |
181 closure->data = data; | |
182 | |
183 if (condition & PURPLE_INPUT_READ) | |
184 cond |= FINCH_READ_COND; | |
185 if (condition & PURPLE_INPUT_WRITE) | |
186 cond |= FINCH_WRITE_COND; | |
187 | |
188 channel = g_io_channel_unix_new(fd); | |
189 closure->result = g_io_add_watch_full(channel, G_PRIORITY_DEFAULT, cond, | |
190 purple_gnt_io_invoke, closure, purple_gnt_io_destroy); | |
191 | |
192 g_io_channel_unref(channel); | |
193 return closure->result; | |
194 } | |
195 | |
196 static PurpleEventLoopUiOps eventloop_ops = | |
197 { | |
198 g_timeout_add, | |
199 g_source_remove, | |
200 gnt_input_add, | |
19567
b99a158ea85e
disapproval of revision 'c672802b647f1230fbd9b0edf383fb3d558cf719'
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19566
diff
changeset
|
201 g_source_remove, |
16669
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
202 NULL, /* input_get_error */ |
18013
58e82c3b697e
It's GLIB_CHECK_VERSION, not GLIB_VERSION_CHECK.
Richard Laager <rlaager@wiktel.com>
parents:
18009
diff
changeset
|
203 #if GLIB_CHECK_VERSION(2,14,0) |
18009
9ffa9af32854
Wire in g_timeout_add_seconds for Finch and nullclient as well.
Richard Laager <rlaager@wiktel.com>
parents:
17049
diff
changeset
|
204 g_timeout_add_seconds, |
9ffa9af32854
Wire in g_timeout_add_seconds for Finch and nullclient as well.
Richard Laager <rlaager@wiktel.com>
parents:
17049
diff
changeset
|
205 #else |
9ffa9af32854
Wire in g_timeout_add_seconds for Finch and nullclient as well.
Richard Laager <rlaager@wiktel.com>
parents:
17049
diff
changeset
|
206 NULL, |
9ffa9af32854
Wire in g_timeout_add_seconds for Finch and nullclient as well.
Richard Laager <rlaager@wiktel.com>
parents:
17049
diff
changeset
|
207 #endif |
16669
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
208 |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
209 /* padding */ |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
210 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
211 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
212 NULL |
15822 | 213 }; |
214 | |
215 static PurpleEventLoopUiOps * | |
216 gnt_eventloop_get_ui_ops(void) | |
217 { | |
218 return &eventloop_ops; | |
219 } | |
220 | |
221 /* This is mostly copied from gtkpurple's source tree */ | |
222 static void | |
223 show_usage(const char *name, gboolean terse) | |
224 { | |
225 char *text; | |
226 | |
227 if (terse) { | |
21030
3cc856ca2338
Add a --with-extraversion option to ./configure so packagers can fine tune
Stu Tomlinson <stu@nosnilmot.com>
parents:
20204
diff
changeset
|
228 text = g_strdup_printf(_("%s. Try `%s -h' for more information.\n"), DISPLAY_VERSION, name); |
15822 | 229 } else { |
230 text = g_strdup_printf(_("%s\n" | |
231 "Usage: %s [OPTION]...\n\n" | |
232 " -c, --config=DIR use DIR for config files\n" | |
25421
49d51dbcb799
Debug log is sent to stderr. Thanks to whoever noticed it in IRC the other day.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24884
diff
changeset
|
233 " -d, --debug print debugging messages to stderr\n" |
15822 | 234 " -h, --help display this help and exit\n" |
235 " -n, --nologin don't automatically login\n" | |
21030
3cc856ca2338
Add a --with-extraversion option to ./configure so packagers can fine tune
Stu Tomlinson <stu@nosnilmot.com>
parents:
20204
diff
changeset
|
236 " -v, --version display the current version and exit\n"), DISPLAY_VERSION, name); |
15822 | 237 } |
238 | |
239 purple_print_utf8_to_console(stdout, text); | |
240 g_free(text); | |
241 } | |
242 | |
243 static int | |
244 init_libpurple(int argc, char **argv) | |
245 { | |
246 char *path; | |
247 int opt; | |
248 gboolean opt_help = FALSE; | |
249 gboolean opt_nologin = FALSE; | |
250 gboolean opt_version = FALSE; | |
251 char *opt_config_dir_arg = NULL; | |
252 gboolean debug_enabled = FALSE; | |
253 | |
254 struct option long_options[] = { | |
255 {"config", required_argument, NULL, 'c'}, | |
256 {"debug", no_argument, NULL, 'd'}, | |
257 {"help", no_argument, NULL, 'h'}, | |
258 {"nologin", no_argument, NULL, 'n'}, | |
259 {"version", no_argument, NULL, 'v'}, | |
260 {0, 0, 0, 0} | |
261 }; | |
262 | |
263 #ifdef ENABLE_NLS | |
264 bindtextdomain(PACKAGE, LOCALEDIR); | |
265 bind_textdomain_codeset(PACKAGE, "UTF-8"); | |
266 textdomain(PACKAGE); | |
267 #endif | |
268 | |
269 #ifdef HAVE_SETLOCALE | |
270 setlocale(LC_ALL, ""); | |
271 #endif | |
272 | |
273 /* scan command-line options */ | |
274 opterr = 1; | |
275 while ((opt = getopt_long(argc, argv, | |
276 #ifndef _WIN32 | |
24884
b2f8b1e1e7cc
Remove unused option, thanks to KuSh. Closes #7856.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23403
diff
changeset
|
277 "c:dhn::v", |
15822 | 278 #else |
279 "c:dhn::v", | |
280 #endif | |
281 long_options, NULL)) != -1) { | |
282 switch (opt) { | |
283 case 'c': /* config dir */ | |
284 g_free(opt_config_dir_arg); | |
285 opt_config_dir_arg = g_strdup(optarg); | |
286 break; | |
287 case 'd': /* debug */ | |
288 debug_enabled = TRUE; | |
289 break; | |
290 case 'h': /* help */ | |
291 opt_help = TRUE; | |
292 break; | |
293 case 'n': /* no autologin */ | |
294 opt_nologin = TRUE; | |
295 break; | |
296 case 'v': /* version */ | |
297 opt_version = TRUE; | |
298 break; | |
299 case '?': /* show terse help */ | |
300 default: | |
301 show_usage(argv[0], TRUE); | |
302 return 0; | |
303 break; | |
304 } | |
305 } | |
306 | |
307 /* show help message */ | |
308 if (opt_help) { | |
309 show_usage(argv[0], FALSE); | |
310 return 0; | |
311 } | |
312 /* show version message */ | |
313 if (opt_version) { | |
16943
816759ae9644
Clarify the comments on the names for translators.
Richard Laager <rlaager@wiktel.com>
parents:
16931
diff
changeset
|
314 /* Translators may want to transliterate the name. |
816759ae9644
Clarify the comments on the names for translators.
Richard Laager <rlaager@wiktel.com>
parents:
16931
diff
changeset
|
315 It is not to be translated. */ |
21030
3cc856ca2338
Add a --with-extraversion option to ./configure so packagers can fine tune
Stu Tomlinson <stu@nosnilmot.com>
parents:
20204
diff
changeset
|
316 printf("%s %s\n", _("Finch"), DISPLAY_VERSION); |
15822 | 317 return 0; |
318 } | |
319 | |
320 /* set a user-specified config directory */ | |
321 if (opt_config_dir_arg != NULL) { | |
322 purple_util_set_user_dir(opt_config_dir_arg); | |
323 g_free(opt_config_dir_arg); | |
324 } | |
325 | |
326 /* | |
327 * We're done piddling around with command line arguments. | |
328 * Fire up this baby. | |
329 */ | |
330 | |
16380
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
331 /* We don't want debug-messages to show up and corrupt the display */ |
15822 | 332 purple_debug_set_enabled(debug_enabled); |
333 | |
16380
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
334 /* If we're using a custom configuration directory, we |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
335 * do NOT want to migrate, or weird things will happen. */ |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
336 if (opt_config_dir_arg == NULL) |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
337 { |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
338 if (!purple_core_migrate()) |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
339 { |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
340 char *old = g_strconcat(purple_home_dir(), |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
341 G_DIR_SEPARATOR_S ".gaim", NULL); |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
342 char *text = g_strdup_printf(_( |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
343 "%s encountered errors migrating your settings " |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
344 "from %s to %s. Please investigate and complete the " |
16931
dd768c576ab2
disapproval of revision 'e9933d653551beb8b5f477dcf2c6bd1f3d239c55'
Richard Laager <rlaager@wiktel.com>
parents:
16929
diff
changeset
|
345 "migration by hand. Please report this error at http://developer.pidgin.im"), _("Finch"), |
16380
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
346 old, purple_user_dir()); |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
347 |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
348 g_free(old); |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
349 |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
350 purple_print_utf8_to_console(stderr, text); |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
351 g_free(text); |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
352 |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
353 return 0; |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
354 } |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
355 } |
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
356 |
15822 | 357 purple_core_set_ui_ops(gnt_core_get_ui_ops()); |
358 purple_eventloop_set_ui_ops(gnt_eventloop_get_ui_ops()); | |
359 purple_idle_set_ui_ops(finch_idle_get_ui_ops()); | |
360 | |
361 path = g_build_filename(purple_user_dir(), "plugins", NULL); | |
362 purple_plugins_add_search_path(path); | |
363 g_free(path); | |
364 | |
365 purple_plugins_add_search_path(LIBDIR); | |
366 | |
367 if (!purple_core_init(FINCH_UI)) | |
368 { | |
369 fprintf(stderr, | |
370 "Initialization of the Purple core failed. Dumping core.\n" | |
371 "Please report this!\n"); | |
372 abort(); | |
373 } | |
374 | |
375 /* TODO: Move blist loading into purple_blist_init() */ | |
376 purple_set_blist(purple_blist_new()); | |
377 purple_blist_load(); | |
378 | |
19520
098c04602065
Make a note about purple_prefs_load no longer needing to be called by the UI and update finch accordingly. There doesn't appear to be any negative effects of having the purple_prefs_load called twice.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18877
diff
changeset
|
379 /* TODO: should this be moved into finch_prefs_init() ? */ |
16565
ac0d07c7fd90
Pref migration for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16525
diff
changeset
|
380 finch_prefs_update_old(); |
15822 | 381 |
382 /* load plugins we had when we quit */ | |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16098
diff
changeset
|
383 purple_plugins_load_saved("/finch/plugins/loaded"); |
15822 | 384 |
385 /* TODO: Move pounces loading into purple_pounces_init() */ | |
386 purple_pounces_load(); | |
387 | |
388 if (opt_nologin) | |
389 { | |
390 /* Set all accounts to "offline" */ | |
391 PurpleSavedStatus *saved_status; | |
392 | |
393 /* If we've used this type+message before, lookup the transient status */ | |
394 saved_status = purple_savedstatus_find_transient_by_type_and_message( | |
395 PURPLE_STATUS_OFFLINE, NULL); | |
396 | |
397 /* If this type+message is unique then create a new transient saved status */ | |
398 if (saved_status == NULL) | |
399 saved_status = purple_savedstatus_new(NULL, PURPLE_STATUS_OFFLINE); | |
400 | |
401 /* Set the status for each account */ | |
402 purple_savedstatus_activate(saved_status); | |
403 } | |
404 else | |
405 { | |
406 /* Everything is good to go--sign on already */ | |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16098
diff
changeset
|
407 if (!purple_prefs_get_bool("/purple/savedstatus/startup_current_status")) |
15822 | 408 purple_savedstatus_activate(purple_savedstatus_get_startup()); |
409 purple_accounts_restore_current_statuses(); | |
410 } | |
411 | |
412 return 1; | |
413 } | |
414 | |
18877
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
415 static gboolean gnt_start(int *argc, char ***argv) |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
416 { |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
417 /* Initialize the libpurple stuff */ |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
418 if (!init_libpurple(*argc, *argv)) |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
419 return FALSE; |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
420 |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
421 purple_blist_show(); |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
422 return TRUE; |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
423 } |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
424 |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
425 int main(int argc, char *argv[]) |
15822 | 426 { |
427 signal(SIGPIPE, SIG_IGN); | |
428 | |
19772
7dbeede6da97
Duplicate the fix from 33d699ec: do g_thread_init before using any other
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19681
diff
changeset
|
429 g_thread_init(NULL); |
7dbeede6da97
Duplicate the fix from 33d699ec: do g_thread_init before using any other
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19681
diff
changeset
|
430 |
18361
9b5b0cbde65f
Let's use g_set_prgname too.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18329
diff
changeset
|
431 g_set_prgname("Finch"); |
18828
f8b22b11a126
g_set_application_name requires glib 2.2 for finch
Richard Nelson <wabz@pidgin.im>
parents:
18456
diff
changeset
|
432 #if GLIB_CHECK_VERSION(2,2,0) |
18329
477dd067bdc1
Use g_set_application_name here too.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
433 g_set_application_name(_("Finch")); |
18828
f8b22b11a126
g_set_application_name requires glib 2.2 for finch
Richard Nelson <wabz@pidgin.im>
parents:
18456
diff
changeset
|
434 #endif |
18329
477dd067bdc1
Use g_set_application_name here too.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
435 |
20204
de68625c4c04
applied changes from 1cb036aecbbe359226e69874379d39ce74c8daf6
Richard Laager <rlaager@wiktel.com>
parents:
19772
diff
changeset
|
436 if (gnt_start(&argc, &argv)) { |
de68625c4c04
applied changes from 1cb036aecbbe359226e69874379d39ce74c8daf6
Richard Laager <rlaager@wiktel.com>
parents:
19772
diff
changeset
|
437 gnt_main(); |
15822 | 438 |
439 #ifdef STANDALONE | |
20204
de68625c4c04
applied changes from 1cb036aecbbe359226e69874379d39ce74c8daf6
Richard Laager <rlaager@wiktel.com>
parents:
19772
diff
changeset
|
440 purple_core_quit(); |
15822 | 441 #endif |
20204
de68625c4c04
applied changes from 1cb036aecbbe359226e69874379d39ce74c8daf6
Richard Laager <rlaager@wiktel.com>
parents:
19772
diff
changeset
|
442 } |
15822 | 443 |
444 return 0; | |
445 } | |
446 |