Mercurial > pidgin
annotate finch/finch.c @ 32198:3af16402f176
Add some NULL checks. Now it should not crash even if you don't have
the default theme installed (which you won't since it's not even
written yet!) You just won't see anything...
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Wed, 21 Sep 2011 07:01:58 +0000 |
parents | 142429bcb4c8 |
children | 36fc641ca013 |
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 */ |
28770
259bbfb423d4
Fix all the remaining files for which internal.h doesn't end up being the first include.
Paul Aurich <paul@darkrain42.org>
parents:
27682
diff
changeset
|
22 #include <internal.h> |
18210
b8572b937c09
#include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents:
18013
diff
changeset
|
23 #include "finch.h" |
b8572b937c09
#include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents:
18013
diff
changeset
|
24 |
15822 | 25 #include "account.h" |
26 #include "conversation.h" | |
27 #include "core.h" | |
28 #include "debug.h" | |
29 #include "eventloop.h" | |
30 #include "ft.h" | |
31 #include "log.h" | |
32 #include "notify.h" | |
33 #include "prefs.h" | |
34 #include "prpl.h" | |
35 #include "pounce.h" | |
36 #include "savedstatuses.h" | |
37 #include "sound.h" | |
38 #include "status.h" | |
39 #include "util.h" | |
40 #include "whiteboard.h" | |
41 | |
42 #include "gntdebug.h" | |
43 #include "gntprefs.h" | |
44 #include "gntui.h" | |
45 #include "gntidle.h" | |
46 | |
47 #define _GNU_SOURCE | |
48 #include <getopt.h> | |
49 | |
50 #include "config.h" | |
27682
cc8f641d2fde
Add the MTN revision in the Pidgin About and finch --version dialogs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27587
diff
changeset
|
51 #include "package_revision.h" |
15822 | 52 |
53 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
|
54 debug_init(void) |
15822 | 55 { |
56 finch_debug_init(); | |
57 purple_debug_set_ui_ops(finch_debug_get_ui_ops()); | |
58 } | |
59 | |
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 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
|
61 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
|
62 { |
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
|
63 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
|
64 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
|
65 |
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
66 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
|
67 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
|
68 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
|
69 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
|
70 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
|
71 |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
72 /* |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
73 * 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
|
74 * 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
|
75 * 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
|
76 * which case the default "libpurple" key will be used, or you |
31672
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
77 * can try to register your own at the AIM or ICQ web sites |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
78 * (although this functionality was removed at some point, it's |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
79 * possible it has been re-added). AOL's old key management |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
80 * page is http://developer.aim.com/manageKeys.jsp |
27426
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
81 */ |
88ef8c38a639
Use a custom clientkey for AIM and ICQ for Pidgin and Finch
Mark Doliner <mark@kingant.net>
parents:
25513
diff
changeset
|
82 g_hash_table_insert(ui_info, "prpl-aim-clientkey", "ma19sqWV9ymU6UYc"); |
31672
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
83 |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
84 /* |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
85 * This is the client key for "Pidgin." It is owned by the AIM |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
86 * account "markdoliner." Please don't use this key for other |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
87 * applications. You can either not specify a client key, in |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
88 * which case the default "libpurple" key will be used, or you |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
89 * can try to register your own at the AIM or ICQ web sites |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
90 * (although this functionality was removed at some point, it's |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
91 * possible it has been re-added). AOL's old key management |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
92 * page is http://developer.aim.com/manageKeys.jsp |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
93 * |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
94 * We used to have a Finch-specific devId/clientkey |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
95 * (ma19sqWV9ymU6UYc), but it stopped working, so we switched |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
96 * to this one. |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
97 */ |
d82d402c39fb
Change Finch to use Pidgin's clientkey/devid when connecting to ICQ.
Mark Doliner <mark@kingant.net>
parents:
31086
diff
changeset
|
98 g_hash_table_insert(ui_info, "prpl-icq-clientkey", "ma1cSASNCKFtrdv9"); |
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
|
99 |
74e487f82f39
Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <mark@kingant.net>
parents:
27426
diff
changeset
|
100 /* |
74e487f82f39
Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <mark@kingant.net>
parents:
27426
diff
changeset
|
101 * 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
|
102 * 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
|
103 * 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
|
104 */ |
74e487f82f39
Oh, we don't need a special ui_info field for the AIM clientstring
Mark Doliner <mark@kingant.net>
parents:
27426
diff
changeset
|
105 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
|
106 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
|
107 } |
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
108 |
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
109 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
|
110 } |
5aae8608e1c6
UI info for finch and pidgin (finch guys probably want to take a look
Nathan Walp <nwalp@pidgin.im>
parents:
18210
diff
changeset
|
111 |
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
|
112 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
|
113 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
|
114 { |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
115 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
|
116 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
|
117 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
|
118 } |
8988a205112b
Fix a memory leak from not freeing the ui-info hashtable on exit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18828
diff
changeset
|
119 |
15822 | 120 static PurpleCoreUiOps core_ops = |
121 { | |
122 finch_prefs_init, | |
123 debug_init, | |
124 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
|
125 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
|
126 finch_ui_get_info, |
16669
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
127 |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
128 /* padding */ |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
129 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
130 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
131 NULL |
15822 | 132 }; |
133 | |
134 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
|
135 gnt_core_get_ui_ops(void) |
15822 | 136 { |
137 return &core_ops; | |
138 } | |
139 | |
140 /* Anything IO-related is directly copied from gtkpurple's source tree */ | |
141 | |
142 #define FINCH_READ_COND (G_IO_IN | G_IO_HUP | G_IO_ERR) | |
143 #define FINCH_WRITE_COND (G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL) | |
144 | |
145 typedef struct _PurpleGntIOClosure { | |
146 PurpleInputFunction function; | |
147 guint result; | |
148 gpointer data; | |
149 | |
150 } PurpleGntIOClosure; | |
151 | |
152 static void purple_gnt_io_destroy(gpointer data) | |
153 { | |
154 g_free(data); | |
155 } | |
156 | |
157 static gboolean purple_gnt_io_invoke(GIOChannel *source, GIOCondition condition, gpointer data) | |
158 { | |
159 PurpleGntIOClosure *closure = data; | |
160 PurpleInputCondition purple_cond = 0; | |
161 | |
162 if (condition & FINCH_READ_COND) | |
163 purple_cond |= PURPLE_INPUT_READ; | |
164 if (condition & FINCH_WRITE_COND) | |
165 purple_cond |= PURPLE_INPUT_WRITE; | |
166 | |
167 #if 0 | |
168 purple_debug(PURPLE_DEBUG_MISC, "gtk_eventloop", | |
169 "CLOSURE: callback for %d, fd is %d\n", | |
170 closure->result, g_io_channel_unix_get_fd(source)); | |
171 #endif | |
172 | |
173 #ifdef _WIN32 | |
174 if(! purple_cond) { | |
175 #if DEBUG | |
176 purple_debug_misc("gnt_eventloop", | |
177 "CLOSURE received GIOCondition of 0x%x, which does not" | |
178 " match 0x%x (READ) or 0x%x (WRITE)\n", | |
179 condition, FINCH_READ_COND, FINCH_WRITE_COND); | |
180 #endif /* DEBUG */ | |
181 | |
182 return TRUE; | |
183 } | |
184 #endif /* _WIN32 */ | |
185 | |
186 closure->function(closure->data, g_io_channel_unix_get_fd(source), | |
187 purple_cond); | |
188 | |
189 return TRUE; | |
190 } | |
191 | |
192 static guint gnt_input_add(gint fd, PurpleInputCondition condition, PurpleInputFunction function, | |
193 gpointer data) | |
194 { | |
195 PurpleGntIOClosure *closure = g_new0(PurpleGntIOClosure, 1); | |
196 GIOChannel *channel; | |
197 GIOCondition cond = 0; | |
198 | |
199 closure->function = function; | |
200 closure->data = data; | |
201 | |
202 if (condition & PURPLE_INPUT_READ) | |
203 cond |= FINCH_READ_COND; | |
204 if (condition & PURPLE_INPUT_WRITE) | |
205 cond |= FINCH_WRITE_COND; | |
206 | |
207 channel = g_io_channel_unix_new(fd); | |
208 closure->result = g_io_add_watch_full(channel, G_PRIORITY_DEFAULT, cond, | |
209 purple_gnt_io_invoke, closure, purple_gnt_io_destroy); | |
210 | |
211 g_io_channel_unref(channel); | |
212 return closure->result; | |
213 } | |
214 | |
215 static PurpleEventLoopUiOps eventloop_ops = | |
216 { | |
217 g_timeout_add, | |
218 g_source_remove, | |
219 gnt_input_add, | |
19567
b99a158ea85e
disapproval of revision 'c672802b647f1230fbd9b0edf383fb3d558cf719'
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19566
diff
changeset
|
220 g_source_remove, |
16669
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
221 NULL, /* input_get_error */ |
18013
58e82c3b697e
It's GLIB_CHECK_VERSION, not GLIB_VERSION_CHECK.
Richard Laager <rlaager@wiktel.com>
parents:
18009
diff
changeset
|
222 #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
|
223 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
|
224 #else |
9ffa9af32854
Wire in g_timeout_add_seconds for Finch and nullclient as well.
Richard Laager <rlaager@wiktel.com>
parents:
17049
diff
changeset
|
225 NULL, |
9ffa9af32854
Wire in g_timeout_add_seconds for Finch and nullclient as well.
Richard Laager <rlaager@wiktel.com>
parents:
17049
diff
changeset
|
226 #endif |
16669
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
227 |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
228 /* padding */ |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
229 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
230 NULL, |
30829e806dae
And finch is up to date
Gary Kramlich <grim@reaperworld.com>
parents:
16565
diff
changeset
|
231 NULL |
15822 | 232 }; |
233 | |
234 static PurpleEventLoopUiOps * | |
235 gnt_eventloop_get_ui_ops(void) | |
236 { | |
237 return &eventloop_ops; | |
238 } | |
239 | |
240 /* This is mostly copied from gtkpurple's source tree */ | |
241 static void | |
242 show_usage(const char *name, gboolean terse) | |
243 { | |
244 char *text; | |
245 | |
246 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
|
247 text = g_strdup_printf(_("%s. Try `%s -h' for more information.\n"), DISPLAY_VERSION, name); |
15822 | 248 } else { |
249 text = g_strdup_printf(_("%s\n" | |
250 "Usage: %s [OPTION]...\n\n" | |
251 " -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
|
252 " -d, --debug print debugging messages to stderr\n" |
15822 | 253 " -h, --help display this help and exit\n" |
254 " -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
|
255 " -v, --version display the current version and exit\n"), DISPLAY_VERSION, name); |
15822 | 256 } |
257 | |
258 purple_print_utf8_to_console(stdout, text); | |
259 g_free(text); | |
260 } | |
261 | |
262 static int | |
263 init_libpurple(int argc, char **argv) | |
264 { | |
265 char *path; | |
266 int opt; | |
267 gboolean opt_help = FALSE; | |
268 gboolean opt_nologin = FALSE; | |
269 gboolean opt_version = FALSE; | |
270 char *opt_config_dir_arg = NULL; | |
271 gboolean debug_enabled = FALSE; | |
30223
f30a02140f74
Create the ~/.purple/plugins directory on startup if it does not exist
Stu Tomlinson <stu@nosnilmot.com>
parents:
29377
diff
changeset
|
272 struct stat st; |
15822 | 273 |
274 struct option long_options[] = { | |
275 {"config", required_argument, NULL, 'c'}, | |
276 {"debug", no_argument, NULL, 'd'}, | |
277 {"help", no_argument, NULL, 'h'}, | |
278 {"nologin", no_argument, NULL, 'n'}, | |
279 {"version", no_argument, NULL, 'v'}, | |
280 {0, 0, 0, 0} | |
281 }; | |
282 | |
283 #ifdef ENABLE_NLS | |
284 bindtextdomain(PACKAGE, LOCALEDIR); | |
285 bind_textdomain_codeset(PACKAGE, "UTF-8"); | |
286 textdomain(PACKAGE); | |
287 #endif | |
288 | |
289 #ifdef HAVE_SETLOCALE | |
290 setlocale(LC_ALL, ""); | |
291 #endif | |
292 | |
293 /* scan command-line options */ | |
294 opterr = 1; | |
295 while ((opt = getopt_long(argc, argv, | |
296 #ifndef _WIN32 | |
24884
b2f8b1e1e7cc
Remove unused option, thanks to KuSh. Closes #7856.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23403
diff
changeset
|
297 "c:dhn::v", |
15822 | 298 #else |
299 "c:dhn::v", | |
300 #endif | |
301 long_options, NULL)) != -1) { | |
302 switch (opt) { | |
303 case 'c': /* config dir */ | |
304 g_free(opt_config_dir_arg); | |
305 opt_config_dir_arg = g_strdup(optarg); | |
306 break; | |
307 case 'd': /* debug */ | |
308 debug_enabled = TRUE; | |
309 break; | |
310 case 'h': /* help */ | |
311 opt_help = TRUE; | |
312 break; | |
313 case 'n': /* no autologin */ | |
314 opt_nologin = TRUE; | |
315 break; | |
316 case 'v': /* version */ | |
317 opt_version = TRUE; | |
318 break; | |
319 case '?': /* show terse help */ | |
320 default: | |
321 show_usage(argv[0], TRUE); | |
322 return 0; | |
323 break; | |
324 } | |
325 } | |
326 | |
327 /* show help message */ | |
328 if (opt_help) { | |
329 show_usage(argv[0], FALSE); | |
330 return 0; | |
331 } | |
332 /* show version message */ | |
333 if (opt_version) { | |
16943
816759ae9644
Clarify the comments on the names for translators.
Richard Laager <rlaager@wiktel.com>
parents:
16931
diff
changeset
|
334 /* 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
|
335 It is not to be translated. */ |
27682
cc8f641d2fde
Add the MTN revision in the Pidgin About and finch --version dialogs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27587
diff
changeset
|
336 printf("%s %s (%s)\n", _("Finch"), DISPLAY_VERSION, REVISION); |
15822 | 337 return 0; |
338 } | |
339 | |
340 /* set a user-specified config directory */ | |
341 if (opt_config_dir_arg != NULL) { | |
342 purple_util_set_user_dir(opt_config_dir_arg); | |
343 g_free(opt_config_dir_arg); | |
344 } | |
345 | |
346 /* | |
347 * We're done piddling around with command line arguments. | |
348 * Fire up this baby. | |
349 */ | |
350 | |
16380
6c97924af83b
Call the migrate code from Finch.
Richard Laager <rlaager@wiktel.com>
parents:
16098
diff
changeset
|
351 /* We don't want debug-messages to show up and corrupt the display */ |
15822 | 352 purple_debug_set_enabled(debug_enabled); |
353 | |
354 purple_core_set_ui_ops(gnt_core_get_ui_ops()); | |
355 purple_eventloop_set_ui_ops(gnt_eventloop_get_ui_ops()); | |
356 purple_idle_set_ui_ops(finch_idle_get_ui_ops()); | |
357 | |
358 path = g_build_filename(purple_user_dir(), "plugins", NULL); | |
30223
f30a02140f74
Create the ~/.purple/plugins directory on startup if it does not exist
Stu Tomlinson <stu@nosnilmot.com>
parents:
29377
diff
changeset
|
359 if (!g_stat(path, &st)) |
f30a02140f74
Create the ~/.purple/plugins directory on startup if it does not exist
Stu Tomlinson <stu@nosnilmot.com>
parents:
29377
diff
changeset
|
360 g_mkdir(path, S_IRUSR | S_IWUSR | S_IXUSR); |
15822 | 361 purple_plugins_add_search_path(path); |
362 g_free(path); | |
363 | |
364 purple_plugins_add_search_path(LIBDIR); | |
365 | |
366 if (!purple_core_init(FINCH_UI)) | |
367 { | |
368 fprintf(stderr, | |
369 "Initialization of the Purple core failed. Dumping core.\n" | |
370 "Please report this!\n"); | |
371 abort(); | |
372 } | |
373 | |
374 /* TODO: Move blist loading into purple_blist_init() */ | |
375 purple_set_blist(purple_blist_new()); | |
376 purple_blist_load(); | |
377 | |
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
|
378 /* 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
|
379 finch_prefs_update_old(); |
15822 | 380 |
381 /* 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
|
382 purple_plugins_load_saved("/finch/plugins/loaded"); |
15822 | 383 |
384 /* TODO: Move pounces loading into purple_pounces_init() */ | |
385 purple_pounces_load(); | |
386 | |
387 if (opt_nologin) | |
388 { | |
389 /* Set all accounts to "offline" */ | |
390 PurpleSavedStatus *saved_status; | |
391 | |
392 /* If we've used this type+message before, lookup the transient status */ | |
393 saved_status = purple_savedstatus_find_transient_by_type_and_message( | |
394 PURPLE_STATUS_OFFLINE, NULL); | |
395 | |
396 /* If this type+message is unique then create a new transient saved status */ | |
397 if (saved_status == NULL) | |
398 saved_status = purple_savedstatus_new(NULL, PURPLE_STATUS_OFFLINE); | |
399 | |
400 /* Set the status for each account */ | |
401 purple_savedstatus_activate(saved_status); | |
402 } | |
403 else | |
404 { | |
405 /* 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
|
406 if (!purple_prefs_get_bool("/purple/savedstatus/startup_current_status")) |
15822 | 407 purple_savedstatus_activate(purple_savedstatus_get_startup()); |
408 purple_accounts_restore_current_statuses(); | |
409 } | |
410 | |
411 return 1; | |
412 } | |
413 | |
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
|
414 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
|
415 { |
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 /* 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
|
417 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
|
418 return FALSE; |
31086
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
30223
diff
changeset
|
419 |
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
|
420 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
|
421 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
|
422 } |
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 int main(int argc, char *argv[]) |
15822 | 425 { |
426 signal(SIGPIPE, SIG_IGN); | |
427 | |
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
|
428 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
|
429 |
18361
9b5b0cbde65f
Let's use g_set_prgname too.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18329
diff
changeset
|
430 g_set_prgname("Finch"); |
18329
477dd067bdc1
Use g_set_application_name here too.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
431 g_set_application_name(_("Finch")); |
477dd067bdc1
Use g_set_application_name here too.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
432 |
20204
de68625c4c04
applied changes from 1cb036aecbbe359226e69874379d39ce74c8daf6
Richard Laager <rlaager@wiktel.com>
parents:
19772
diff
changeset
|
433 if (gnt_start(&argc, &argv)) { |
de68625c4c04
applied changes from 1cb036aecbbe359226e69874379d39ce74c8daf6
Richard Laager <rlaager@wiktel.com>
parents:
19772
diff
changeset
|
434 gnt_main(); |
15822 | 435 |
436 #ifdef STANDALONE | |
20204
de68625c4c04
applied changes from 1cb036aecbbe359226e69874379d39ce74c8daf6
Richard Laager <rlaager@wiktel.com>
parents:
19772
diff
changeset
|
437 purple_core_quit(); |
15822 | 438 #endif |
20204
de68625c4c04
applied changes from 1cb036aecbbe359226e69874379d39ce74c8daf6
Richard Laager <rlaager@wiktel.com>
parents:
19772
diff
changeset
|
439 } |
15822 | 440 |
441 return 0; | |
442 } | |
443 |